С рождением замечательных CSS3, для того, чтоб на своем сайте закруглить уголки каких-либо блоков уже не обязательно использовать картинки или громадный JavaScript. Достаточно добавить несколько мелких строк в ваш файл css и вуаля — все сделано.
Но каково было мое удивление, когда я на проверку валидности кода выставил свой файл style.css…
Сначала, для тех кто не в теме, закругление уголков с помощью CSS3 осуществляется с помощью параметра «border-radius» .
Давайте рассмотрим какие браузеры понимают параметр «border-radius» . Следует отметить самые популярные: Chrome, Firefox, Opera, Internet Explorer. Safari я не рассматриваю (без комментариев), все остальное — вообще браузерами не считаю. Итак, какие популярные браузеры поддерживают параметр «border-radius» в чистом виде?
Для того, чтоб закруглить уголки в каком-либо блоке, необходимо в css добавить свойство «border-radius» , например:
#block{border-radius:10px;}
Все, элемент «#block» будет с закругленными уголками, но при таком раскладе все 4 угла будут одинаковыми. На случай кастомизирования каждого угла у этого свойства есть возможность выставить параметры для каждого угла в отдельности: border-top-left-radius, border-top-right-radius, border-bottom-right-radius, border-bottom-left-radius — соответственно: верхний левый, верхний правый, нижний правый и нижний левый углы. То есть, можно забабахать вот такие настройки:
#block{
border-top-left-radius:10px;
border-top-right-radius:15px;
border-bottom-right-radius:20px;
border-bottom-left-radius:25px;}
Таким образом, каждый уголок будет разным, но код получается не очень-то маленький. Есть вариант попроще — указывать размер округления просто через пробел:
#block{border-radius:10px 15px 20px 25px;}
В итоге мы получим то же, что и в предыдущем варианте, только попроще
. Тут следует лишь запомнить что порядок уголков начинается с левого верхнего — по кругу — к левому нижнему. Еще можно использовать всего 2 и 3 указателя, но там уже несложно догадаться.
Повторюсь: выше показанное будет работать только в Chrome (все версии), Opera (начиная с 10.5 версии) и Internet Explorer (начиная с 9).
C ним сложней. До версии 3.0 он совсем не признавал «border-radius» , а потом начал признать «по-своему», это оригинальный браузер, ему нахрен не нужны стандарты. Вместо «border-radius» он использует свое название: «-moz-border-radius» . Казалось бы, всего 5 добавленных символов, а придется добавлять из-за этого лишние строки кода. Благо, работает и дает он результат такой же, как и с использованием стандартной функции. То есть, если вдолбить такие буковки:
#block{
border-radius:10px 15px 20px 25px;
-moz-border-radius:10px 15px 20px 25px;
}
Получится правильное отображение уже в 3-х браузерах (Chrome, Opera, Firefox), но код становится тяжелей из-за мусора, а такой код у меня вообще вызывает температуру:
#block{
border-top-left-radius:10px;
border-top-right-radius:15px;
border-bottom-right-radius:20px;
border-bottom-left-radius:25px;
-moz-border-radius-topleft10px:;
-moz-border-radius-topright:15px;
-moz-border-radius-bottomright:20px;
-moz-border-radius-bottomleft:25px;
}
И это все лишь для округления уголков! А что будет если добавить еще такой же свой «оригинальный» высер Safari, накшталт: «-webkit-border-bottom-right-radius» ???
Ну да ладно, лишний мусор в коде — это еще фигня, тем более, с выходом версии 4.0 Firefox будет понимать нормальный код (к слову, Safari — c версии 5.0), есть еще одна проблемка.
Угадайте что выдаст валидатор на проверку вашего css после округления уголков?
Свойство -moz-border-radius не существует …
Свойство -webkit-border-radius не существует …
Правильно. Всякие шлаки от «оригинальных» браузеров не проходят проверку валидации. Да, кто-то скажет:
W3C фактически принадлежит компании Майкрософт, а интернет эксплорер — это продукт Майкрософта и им пофиг на вашу мозиллу, сафари и т.д. Если компания Майкрософт говорит, что -webkit-border-radius она не поддерживает, значит этот параметр и не будет валиден.
Мать вашу! С какого перепугу W3C должен подстраиваться под высеры каждого левого продукта??? W3C задает стандарт и на него необходимо равняться! Да, ie не поддерживает эту функцию, но в будущем он будет поддеживать «border-radius» , но никогда он не будет поддерживать чисто Мозилловские заморочки и никогда веб-стандарт не будет подстроен для каждого браузера! «Стандарт» — от англ. standard — норма, образец.
Конечно, многие говорят что валидность — это херня и не нужно ее придерживаться…мол, у них все работает замечательно и без валидности кода, с миллионом ошибок при проверке…и пр. Это выбор каждого. Если не умеете, не можете или не хотите — валидность (то есть, правильный код без ошибок) не нужна. Я думаю иначе. 