Расширяющиеся закругленные границы на CSS

Многие уже научились создавать меню со скругленными углами на чистом CSS3. А что если кому-нибудь захочется создать закругленные элементы с расширяющимися закругленными границами? Да еще и на чистом CSS3?
Стив Смит решил эту задачу и мы сейчас рассмотрим ее решение. Результат получится точно таким как на картинке сверху. И так, начнем.
<!doctype html>
<html>
<head>
<title>CSS3 расходящиеся к низу скругленные границы</title>
</head>
<body>
<ul>
<li><a href="#">Главная</a></li>
<li><a href="#">О компании</a></li>
<li><a href="#">Продукция</a></li>
<li><a href="#">Сервисы</a></li>
<li><a href="#">Контактная информация</a></li>
</ul>
</body>
</html>
HTML разметка создана, теперь можно перейти к стилю CSS.
html {
background:#efefef;
}
body {
margin:0;
padding:0;
color:#222;
font:13px "Helvetica Neue", Helvetica, Arial, sans-serif;
}
ul {
position:absolute;
left:0;
right:0;
top:0;
height:30px;
background:#959DA5;
border-bottom:1px solid #333;
margin:0;
padding:10px 16px 0;
list-style:none;
}
ul li {
float:left;
margin:0 20px 0 0;
padding:0;
}
ul a {
display:block;
color:#fff;
text-decoration:none;
padding:0 15px;
line-height:29px;
height:29px;
font-weight:bold;
background:#464646;
border:1px solid #333;
border-bottom:none;
-webkit-font-smoothing:antialiased;
-webkit-border-top-left-radius:8px;
-webkit-border-top-right-radius:8px;
-moz-border-radius:8px 8px 0 0;
border-top-left-radius:8px;
border-top-right-radius:8px;
text-shadow:#000 0 -1px 0;
/* Это необходимо для предотвращения зубчатые границы в Webkit. */
-webkit-background-clip: padding-box;
}
ul li.current a {
background:#efefef;
color:#222;
height:30px;
text-shadow:#fff 0 1px 0;
/* Это необходимо для предотвращения зубчатые границы в Webkit. */
-webkit-background-clip: padding-box;
}
Применив этот стиль к нашей разметке мы увидим:

Теперь нам надо создать скругленные снизу границы, да еще и так, чтобы они "разъезжались". Сделаем так: с помощью псевдоэлементов :before и :after мы создадим небольшие блоки и расположим их у подножия наших пунктов меню. Позиционировать эти псевдоэлементы мы будем абсолютно, так что придется позиционировать их относительно самих пунктов. Просто обратите на это внимание. И так.
ul li {
position:relative;
}
ul li:before, ul li:after {
content:'';
width:9px;
height:8px;
position:absolute;
z-index:2;
bottom:0;
background:#464646;
}
ul li:before {
left:-8px;
}
ul li:after {
right:-8px;
}
ul li.current:before, ul li.current:after {
background:#efefef;
bottom:0;
-webkit-background-clip: padding-box;
}
Теперь смотрим результат:

Теперь осталось только закруглить. Немного меняем наш CSS:
ul a {
position:relative;
}
ul a:before, ul a:after {
content:'';
width:10px;
height:8px;
position:absolute;
z-index:3;
bottom:-1px;
background:#959DA5;
overflow:hidden;
border-bottom:1px solid #333;
-webkit-background-clip: padding-box;
}
ul a:before {
left:-11px;
border-bottom-right-radius:8px;
-webkit-border-bottom-right-radius:8px;
-moz-border-radius-bottomright:8px;
border-right:1px solid #222;
}
ul a:after {
right:-11px;
border-bottom-left-radius:8px;
-webkit-border-bottom-left-radius:8px;
-moz-border-radius-bottomleft:8px;
border-left:1px solid #222;
}
ul li.current a:before, ul li.current a:after {
bottom:0;
}
И... та-да!

Срочно смотрим .
Поддерживается всеми последними браузерами. Вот так легко мы добились с вами закругленных и расходящихся углв снизу без дополнительных элементов.
на английском и без адаптации.

4 Комментариев на «Расширяющиеся закругленные границы на CSS»
Для IE6-8 применить никак?
Ответить
makecode Ответил:
Июль 31st, 2011 at 21:17
Про IE6 забудьте уже наконец. IE8 тоже устарел. Но если хочется, то думаю только картинками.
Ответить
CSS3PIE тоже не поможет?
Ответить
CSS3PIE, думаю, поможет.
Ответить