CSS3 привнесло в нашу жизнь новые единицы измерения: vw
, vh
, и vmin
. С недавних пор dev-версия Chrome (под номером 20) тоже поддерживает их, а это дарует некоторую надежду, что и разработчики других браузеров последуют этому примеру. На самом деле, это было бы кстати, ведь это очень удобно и практично, а я попробую рассказать, почему это так.
Почему это клево?
Много причин. Вот две из них:
- Существует такая вещь, как длина строки текста, при которой чтение является комфортным. Я не хочу разжигать холивары, но, допустим, это 80 символов. Так вот, эти единицы измерения позволяют вам соблюдать это значение на любом размере экрана
- Еще они могут регулировать отношение заголовка к основному тексту, как, например, в одном из постов Trent Walton (англ.)
Как это работает?
Единица каждого из этих трех значений составляет 1% от размера экрана. Например, если размер экрана составляет 40 сантиметров по ширине, то 1vw равен 0.4 см.
1vw = 1% ширины окна
1vh = 1% высоты окна
1vmin = 1vw или 1vh, в зависимости от того, что меньше
Использование
О, это очень просто:
h1 {
font-size: 5.9vw;
}
h2 {
font-size: 3.0vh;
}
p {
font-size: 2vmin;
}
Поддержка браузерами
Chrome 20+ и IE 10+
Я проверял в Opera Next (12), Safari 5.2 и Firefox Beta (13) — безрезультатно.
Демо
Небольшое видео, в котором показывается использование vw
:
Тут можно попробовать самому (убедитесь, что Ваш браузер поддерживает данные единицы измерения)
Баги
Поддержка есть в Chrome 20, но немного кривая. Когда окна браузера изменяется, шрифт не приспосабливается в соответствии с новым размером окна. Спецификация говорит:
Если высота или ширина окна изменится, они масштабируются соотвественно
Я отправил заявку в баг-трекер. Возможно, это не большая-то и проблема, шрифт все же изменяется на «чистой» загрузке страницы. Такие мелочи интересны только только нам, гикам в дизайне, которые тщательно относятся к таким вещам, но все-таки.
Чтобы устранить эту проблему (разрешить изменение размеров без перезагрузки страницы), Вам необходимо вызвать перерисовку элемента. Я использовал jQuery и просто поэкспериментировал с z-index
значениями каждого элемента, который вызывает перерисовку.
causeRepaintsOn = $( "h1, h2, h3, p" );
$( window ).resize( function( ) {
causeRepaintsOn.css( "z-index", 1 );
});
Не только font-size
Между прочим, это всего лишь единицы. Как em
, px
, что угодно. Вы можете их использовать повсеместно, дело не ограничивается только размером шрифта.
Используйте!
Нативное использование
Не забудьте оставить callback для тех браузеров, которые пока еще не поддерживают данные единицы:
h1 {
font-size: 36px;
font-size: 5.4vw;
}
Проверка поддержки
У Modernizr пока еще нет теста для данной проверки, но вы можете проверить самостоятельно, используя небольшой скрипт на JS.
var testEl = $( "#vw-test" );
var viewport = $( window );
testEl.css( {
width: "100vw"
} );
if ( testEl.width( ) == viewport.width( ) ) {
$( "html" ).addClass( "vw-support" );
} else {
$( "html" ).append( "vw-unsupported" );
};
Имитация функциональности с FitText.js
Эта идея заключается в том, что связывает общую ширину заголовка с шириной родительского элемента, что и делает FitText.js. Правда он делает это через Javascript, математику, span-теги и еще кучу всего. Теоретически, Вы можете запустить проверку и использовать Modernizr.load для загрузки FitText.js, если поддержки не обнаружено.
Автор: theaqua