Как бы было замечательно, если бы можно было написать class="round"; и углы волшебно закруглялись.
У нас на hh.ru так и сделано: у блока с классом b-round круглые углы получаются благодаря -moz-border-radius и -webkit-border-radius для Firefox, Chrome и Safari, SVG для Opera и с помощью expression для IE 6 и 7 версий.
И все бы хорошо, не выпусти Microsoft броузер IE 8, в котором не работают expression и не поддерживается CSS 3.
К счастью прилично поддерживается CSS 2.1, чем я и воспользовался при поисках метода создания круглых углов без использования дополнительных элементов.
Пример работает в IE 8
Не забудьте отключить режим совместимости
Такие спрайты используются для отрисовки углов
А теперь CSS. Только для IE 8!
.b-round-example {
Тут все просто =) Левый нижний угол в background блока. position: relative обязателен для работы нижнего правого угла.
margin: 1em 0 2em;
width: 60%;
padding: 40px 0;
color: #FFF;
text-align: center;
background-color: #7DA7D9;
background-image: url("round-tl-bl.png");
background-position: -15px bottom;
background-repeat: no-repeat;
position: relative;
}
.b-round-example:before {
Перед основным контентом блока пишем любое слово.
Пустое свойство content не подходит, потому что в дальнейшем будем использовать его :first-letter. Какого либо текста все равно не увидим, он спрятан font-sizом. Ну а отрицательный margin-top нужен, чтобы перекрыть padding-top родительского блока. position: absolute использовать к сожалению нельзя — блок выпадет из потока и :first-letter перейдет на основной контент. Это будет верхний правый угол.
content: 'round';
position: relative;
top: 0;
margin: -20px 0 0;
display: block;
font-size: 0;
height: 15px;
background-image: url("round-tr-br.png");
background-position: right 0;
background-repeat: no-repeat;
}
.b-round-example:first-letter {
float: left;
font-size: 0;
padding: 0 15px 15px 0;
background-image: url("round-tl-bl.png");
:first-letter слова round для левого верхнего угла.
background-position: 0 0;
background-repeat: no-repeat;
}
.b-round-example:after {
content: ' ';
font-size: 0;
position: absolute;
Правый нижний угол позиционирован абсолютно. content не должен быть пустым (у меня там пробел).
right: 0;
bottom: 0;
height: 15px;
width: 15px;
background-image: url("round-tr-br.png");
background-position: left bottom;
background-repeat: no-repeat;
}
Кстати этот код отлично работает в Опере, что при необходимости позволит отказаться от SVG.
Есть и ограничения, как без них...
Нет возможности положить в блок background-image. Фон уже занят одним из углов
Прозрачные углы возможны лишь для блока с заведомо известной высотой или шириной
при наличии у блока padding-top: > 0, придется ставить верхние углы руками. А все из за того, что нельзя дать .block:before {position: absolute} =(
И на закуску баг:
Углы лежащие в background блока и в first-letter (верхний левый угол) должны быть в одном спрайте, иначе background блока отображаться не будет.
Отправить комментарий