2016-06-23 6 views
5

Mam elementy rodzica z elementami a dzieci. gdy użytkownik mouse over zmieniam kolor obramowania podrzędnego na czerwony. to działa.na `hover` - jak obsługiwać" border-radius "dzieci w różnych scenariuszach?

Mój problem polega na tym, że długość dziecka nie jest statyczna. jest dynamiczny. Dodaję lewostronne radius zarówno first i last, ale jak dodać right-radius do second i last? (Bo nie wiem liczbę dzieci)

.parent { 
 
    border:5px solid red; 
 
    display:inline-block; 
 
    position: relative; 
 
    border-radius:5px; 
 
    box-sizing:border-box; 
 
    margin-bottom:3em; 
 
} 
 

 
.parent a { 
 
    display:block; 
 
    padding:1em; 
 
    border-bottom:1px solid #ddd; 
 
    position: relative; 
 
    width:50%; 
 
    float:left; 
 
    box-sizing:border-box; 
 
} 
 

 
.parent a:nth-child(odd):hover{ 
 
    border:5px solid #ddd; 
 
    margin: -5px; 
 
} 
 

 
.parent a:nth-child(even):hover{ 
 
    border:5px solid #ddd; 
 
    margin: -5px; 
 
    left:10px; 
 
} 
 

 
.parent a:first-of-type{ 
 
    border-top-left-radius:5px; 
 
} 
 

 
.parent a:last-of-type{ 
 
    border-bottom-left-radius:5px; 
 
}
<div class="parent"> 
 
     <a href="#">1</a><a href="#">2</a><a href="#">3</a><a href="#">4</a><a href="#">5</a> 
 
    </div> 
 
    
 
    <div class="parent"> 
 
     <a href="#">1</a><a href="#">2</a><a href="#">3</a> 
 
    </div> 
 
    
 
     <div class="parent"> 
 
     <a href="#">1</a> 
 
    </div>

lub co to jest poprawny sposób obsłużyć to?

+0

Opisz swój problem bardziej szczegółowo, jak obecnie jego mylące. –

+0

Przykro mi, że jako jedna linia elementy "a" są dynamiczne (liczba będzie się zmieniać), ale po najechaniu potrzebuję zarówno lewej, jak i prawej strony z zaokrąglonymi dolnymi rogami. – user2024080

+0

Użyj selektorów: first-child i: last-child, jeśli potrzebujesz tylko tych na początku i końcu –

Odpowiedz

2

można użyć następujących i wszystkich przypadkach powinny być klasyfikowane:

.parent { 
    border:5px solid red; 
    display:inline-block; 
    position: relative; 
    border-radius:5px; 
    box-sizing:border-box; 
    margin-bottom:3em; 
} 

.parent a { 
    display:block; 
    padding:1em; 
    border-bottom:1px solid #ddd; 
    position: relative; 
    width:50%; 
    float:left; 
    box-sizing:border-box; 
} 

.parent a:nth-child(odd):hover{ 
    border:5px solid #ddd; 
    margin: -5px; 
} 

.parent a:nth-child(even):hover{ 
    border:5px solid #ddd; 
    margin: -5px; 
    left:10px; 
} 

.parent a:first-of-type{ 
    border-top-left-radius:5px; 
} 

.parent a:nth-child(2) { /* second child */ 
    border-top-right-radius:5px; 
} 

.parent a:last-of-type:nth-child(even){ 
    border-bottom-right-radius:5px; 
} 

.parent a:last-of-type:nth-child(odd){ 
    border-bottom-left-radius:5px; 
} 

.parent a:nth-last-child(2):nth-child(odd) { 
    border-bottom-left-radius: 5px; 
} 

Oto jsfiddle: https://jsfiddle.net/67hr0oax/4

Oto aktualizacja niektóre z zniekształceń usunięte: https://jsfiddle.net/67hr0oax/7/

Uwaga: Obsługa przeglądarki dotyczy tylko IE9 i wyższych.

+0

już ją wybieram, w przypadku, gdy 'a' ma tylko 2 liczby możesz to pokazać? – user2024080

+0

Myślę, że twoje pytanie mnie zdezorientowało. Spróbuję pokazać to w skrzypcach i możesz wyjaśnić, co może się stać. Daj mi minutę –

+0

Zgadzam się. rozwiązanie jest mądre, działa. Ale znajduję nagły ruch na zawisie. masz jakiś inny pomysł, żeby to powtórzyć? – user2024080

0

Kiedy mówisz, że liczba elementów w Twoim wierszu to "dynamic", to nie sądzę, że CSS został zaprojektowany do obsługi tego rodzaju złożoności.

Jeśli zachowasz liczbę elementów statycznych, być może moglibyśmy użyć kombinacji :nth-last-child(), :nth-child(), aby zastosować promień obramowania.

Twoje opcje wydają się być ograniczone do przetwarzania przy użyciu javascript.

1

Dopóki zachowasz liczbę elementów, nawet dodając <a>&nbsp;</a>, to zadziała.

Chociaż zewnętrzna krawędź ma trochę szczelin, aby się zatrzymać, ale są one tam, aby zatrzymać cały blok skaczący po myszy.

.parent, 
 
.parent a { 
 
    position: relative 
 
} 
 
.parent { 
 
    display: inline-block 
 
} 
 
.parent a { 
 
    display: block; 
 
    padding: 1em; 
 
    width: 50%; 
 
    float: left; 
 
    box-sizing: border-box; 
 
    border: 5px solid transparent; 
 
    background: #fff 
 
} 
 
.parent a:nth-child(1) { 
 
    border-top-left-radius: 5px; 
 
    border-top: solid red 5px 
 
} 
 
.parent a:nth-child(2) { 
 
    border-top-right-radius: 5px; 
 
    border-top: solid red 5px 
 
} 
 
.parent a:nth-child(even) { 
 
    border-right: solid red 5px 
 
} 
 
.parent a:nth-child(odd) { 
 
    border-left: solid red 5px 
 
} 
 
.parent a:last-child { 
 
    border-bottom-right-radius: 5px; 
 
    border-bottom: solid red 5px 
 
} 
 
.parent a:nth-last-child(2) { 
 
    border-bottom-left-radius: 5px; 
 
    border-bottom: solid red 5px 
 
} 
 
.single a { 
 
    border-radius: 5px; 
 
    border: 5px solid red 
 
} 
 
.parent a:hover { 
 
    border-color: #00f 
 
}
<div class="parent"> 
 
    <a href="#">1</a> 
 
    <a href="#">2</a> 
 
    <a href="#">3</a> 
 
    <a href="#">4</a> 
 
    <a href="#">5</a> 
 
    <a>&nbsp;</a> 
 
</div> 
 

 
<div class="parent"> 
 
    <a href="#">1</a> 
 
    <a href="#">2</a> 
 
    <a href="#">3</a> 
 
    <a>&nbsp;</a> 
 
</div> 
 

 
<div class="single parent"> 
 
    <a href="#">1</a> 
 
</div>

Powiązane problemy