Стиль последнего ребенка переполняет стиль первого ребенка, когда доступен только один ребенок

enter image description here

ul li:first-child a {
   border-radius: 5px 5px 0 0;
}

ul li:last-child a {
   border-radius: 0 0 5px 5px;
}

Когда только один раз ребенок, стиль последнего ребенка переполняет стиль первого ребенка. Есть ли способ применить оба (поскольку он является первым и последним дочерним элементом)

Я хочу добиться этого только с помощью CSS без помощи JS. Спасибо.

Ответы

Ответ 1

Просто примените свои границы отдельно:

ul li:first-child a {
   border-top-left-radius: 5px;
   border-top-right-radius: 5px;
}

ul li:last-child a {
   border-bottom-left-radius: 5px;
   border-bottom-right-radius: 5px;
}

Таким образом, последнее правило не отменяет предыдущее правило (border-radius: 5px 5px 0 0; сбрасывает радиусы нижней границы обратно на ноль).

Демо: http://jsfiddle.net/vUz5Z/5/

Ответ 2

Вы можете использовать :only-child. Просто добавьте

ul li:only-child a {
   border-radius: 5px;
}

после них. Он не будет работать в IE8 (или старше), но я предполагаю, что это не проблема, так как border-radius тоже не работает в IE8.

Или используйте радиус границы в самом списке ul {border-radius: 5px}, если это возможно.

Ответ 3

Почему бы не поместить радиус границы в контейнер?

ul,li { margin:0; padding:0; list-style:none; }
ul { border-radius: 10px; overflow:hidden }
a { display:block; margin-bottom:2px; padding:3px; background-color:#f00 }
ul li:last-child a {
 margin: 0;
} ​

http://jsfiddle.net/BanEg/

Ответ 4

Вы также можете использовать auto insead of 0px values. Ex. (МЕНЬШЕ):

&:first-child{
    .border-radiuses (5px, auto, auto, 5px);

}
&:last-child{
    .border-radiuses (auto, 5px, 5px, auto);
}