css
В лицо шрифту (@font-face)
Когда я только начинал выходить в интернет (годах в 1997—1998), обе программы, который в то время считались браузерами — Internet Explorer 4.0 и Netscape Navigator 4.0 умели показывать так называемые «embeded fonts» («внедрённые шрифты», сейчас эту технологию всё чаще называют «web fonts»). IE использовал собственный формат — EOT («Embedded Font Technology»), а компания Netscape — лицензированную у Bitstream технологию.
С помощью «внедрённых шрифтов» в браузер можно было подгружать любой специально подготовленный шрифт и писать тексты им (например, в моём родном Татарстане так делали сайты на татарском языке, ещё до введения татарского алфавита на основе кириллицы в Unicode). Причём IE позволял включать в шрифт не все буквы, а только те, которые могут понадобиться. Технологию незаслуженно ругают — говорят, что
Как обычно, то, что появляется в IE, со временем появляется и в других браузерах, только в другом виде. В данный момент «web fonts» является частью не вышедшей ещё спецификации CSS3 (впервые встречается ещё в CSS2) и уже есть браузер, который поддерживает часть возможностей — движок браузеров WebKit (на нём построен, например, браузер Safari) уже начал поддерживать правило

В CSS это всё выглядит следующим образом:
@font-face {
font-family: "Kimberley";
src: url(http://www.princexml.com/fonts/larabie/kimberle.ttf) format("truetype");
}
h1 { font-family: "Kimberley", sans-serif }Указывается путь до шрифта, его имя в документе и его формат («truetype»).
«Опера» ищут траву или «мне это подкинули»
Давайте я вам всю мощь «Оперы» (последней) покажу? А то тут некоторые товарищи user.js для обнаружения «трафки™» начали придумывать. Тем не менее, JavaScript тут не нужен, хватит и CSS. Ведь у «Оперы», наряду с пользовательскими JavaScript, есть и пользовательские CSS. Так что, просто подключаем к «Опере» следующий код и следим за индикатором в левом верхнем углу экрана (рассказывать как подключать я не буду и другим не советую — пусть это будет фильтром).
a[href*="blogowar.ru/soldier"] img[src*="blogowar.ru/herbs"]
{
position: fixed; top: 4px; left: 4px; z-index:5000;
background-image: url(http://blogowar.ru/favicon.ico);
background-position: 50%;
background-repeat: no-repeat;
background-color: #eee;
display: block;
width: 25px; height: 25px;
}IE6 background flicker bug
На первой странице студии Артемия Лебедева сегодня была новость о сайте «Хэлплайна» с движущимся, при наведении мышки, изображением пластмассовой уточки. Сама новость мне не интересна, а решение, которое позволяло уточке двигаться я посмотрел. Как и ожидалось — сдвиг позиции фонового изображения. Но есть
Как оказалось, это решение застарелого бага IE6 с миганием фона, подложенного под ссылку. Подробное описание описание условий возникновения бага можно найти в статье «Minimize Flickering CSS Background Images in IE6». Баг заметен, если в настройках кеширования браузера выбрать «Every visit to the page» для параметра «Check for newer versions of stored pages».
Вкратце, баг чаще всего проявляется при подкладывании фоновой картинки под ссылку — фон при наведении начинает неприятно мерцать, это Internet Explorer отсылает запросы на сервер, чтобы провеить не изменилась ли картинка, которую использовали как фон. Способ, который помогает решить проблему заключается в специальном
try { document.execCommand('BackgroundImageCache', false, true);} catch(e) {}
Min-width в IE6 без JavaScript
Для меня оказалось сюрпризом, что
/* min-width для остальных браузеров */
body {margin:0;padding:0;}
.outer {
background-color:red;
margin:0 auto;
min-width:600px
}
/* стили для IE6 */
* html .outer {padding-left:600px}
* html .minwidth {height:0} /* holy hack для IE, что бы включить свойство hasLayout */
* html .container {margin-left:-600px;position:relative; height:0}HTML:
<div class="outer">
<div class="minwidth">
<div class="container">
Блок с min-width 600 пикселей.
</div>
</div>
</div>Первоисточником решения, по всей видимости, является статья Stu Nicholls на сайте CSSPlay.
Перенос и FireFox
Как известно — FireFox последний из браузеров, который не поддерживает мягкий перенос (shy). Explorer, как один из продвинутых браузеров (не надо смеяться, я не шучу), начал его поддерживать самым первым. Мягким переносом верстальщик может указать где в длинном слове, при необходимости, можно сделать перенос, например, если слово не умещается в колонку. Я прочитал несколько статей на эту тему, но нигде эту задачу решить не смогли. Между тем, в FireFox действует нестандартный тег WBR, который позвляет добиться того же самого, но без символа переноса. Что не совсем то. Кстати, CSS применить к WBR нельзя. Как же быть?
Проблему я решил, но, увы, с потерями: придётся подбирать один параметр для каждого вида шрифта, слово разорванно тегом и поисковые машины проиндексируют его по частям, а полный (совместимый с Opera, FF и IE6) вариант довольно громоздок.
С идеей как это всё реализовать, я определился сразу — строка при переносе должна открывать концевой символ. А, если переноса нет, вставать поверх него. Вдоволь помучавшись с перекрытием через «position: absolute», и селектором «:after», я вдруг вспомнил о теге «Q», где можно указать текст перед и после этого тега
Итак, один из минусов — это размер символа переноса в вашем экранном шрифте. Задаётся он в стиле (см. ниже) в параметре
<!-- Soft hyphen emulation in FireFox -->
<style type="text/css">
body { background: white }
var>q { quotes: "" "-"; margin-right: -0.36em }
var { font-style: normal; background: inherit }
</style>
<var><q>оченьдлинноеслово​<var>продолжениеоченьдлинногослова</var></var>Стоит браузеру разорвать слово в месте, где стоит пробел нулевой ширины
Поэтому мы его убираем (кстати, можно попытаться вставить его через атрибут «content» селектором «var>var:before», если текст у нас в Unicode):
<!-- Soft hyphen in FireFox, Opera, IE6 -->
<style type="text/css">
body { background: gray; font-size: 20px; font-family: Tahoma }
var>q { quotes: "" "-"; margin-right: -0.36em }
var { font-style: normal; background: inherit }
* html var b { display: none }
</style>
<var><q>оченьдлинноеслово<b>​</b>­<var>продолжениеоченьдлинногослова</var></var>Фокусы с GIF, прозрачность и hover
Самые внимательные, наверное, заметили, что в прошлых заметках у меня на картинке использовалась эмуляция эффекта наведения на ссылку — посмотрите, если навести на картинку мышку, «ссылка», выделенная синим, на картинке подчеркнётся. И это не JavaScript.
Объяснение очень простое — картинка сделана с прозрачностью, далее при помощи CSS под неё подставлен белый фон, а при наведении (селектор «:hover») фон меняется на голубой. Такой же эффект использован на картинке с пистолетом слева (наведите мышку). Ссылка на картинке обязательна — без неё в Internet Explorer (версии ниже
a.gun:hover img { background: black } /* стиль при наведении мышкой */
a.gun img { margin: 0px; background: white } /* убираем поля в Opera и подкладываем белый фон */HTML, соотвественно:
<a href="#" class="gun"><img src="gun.gif" /></a>Если вам не ясно, почему пистолетик «стреляет» (т. е. почему изображение движется, когда наводишь мышку), то тут всё просто — прозрачная область движется (это animated GIF), на белом фоне этого не видно, когда фон меняется, создаётся эффект движущейся пули.
Ещё интересные эффекты можно получить, если использовать
Маркетологи
Придумал шутку про маркетологов. Для тех, кто понимает, marketolog.css:
* { text-transform: uppercase }
:after { content: '!!!!!' }Layout в IE
На хабре есть крайне полезный, но малоизвестный материал «Изучаем наличие layout»:
Множество несоответствий (стандартам) Internet Explorer’а при визуализации
веб-страниц может быть устранено путем присвоения конкретным элементам свойства layout. John Gallant и Holly Bergevin называют эти несоответствия «пространственными ошибками», подразумевая, что они часто могут быть исправлены, если задать элементу ширину или высоту. Это ведет к справедливому вопросу: каким образом layout может менять визуализацию одного элемента и совместное отображение нескольких?
Что такое layout в Internet Explorer, почему работает «хак» «height: 1%» и тому подобное — в этой статье. Крайне рекомендую к прочтению и пониманию всем, кто так или иначе занимается вёрсткой сайтов.
Трюк с прозрачностью
Ещё интересный трюк с прозрачностью — изменение картинки при наведении на неё мышкой. Трюк в том, что у картинки есть прозрачные области, а при наведении на неё мышкой, у контейнера, где находится картинка, меняется фон. Этот эффект можно использовать для подсвечивания пунктов меню, например, но, впрочем, не буду ограничивать вашу фантазию.
Эффекты для шрифта
Интересная техника изменения шрифта — наложить поверх текста полупрозрачную картинку, что даёт
Причём, такой текст индексируется поисковиками, его можно выделить и скопировать, а возможности его оформления почти безграничны и включают в себя даже анимацию, что может дать интересные эффекты, если применять эту возможность с умом.
Решение проблемы box-model
В журнале kukutz’a на сайте NPJ появилась заметка «Решение проблемы
Известно, что есть как минимум два варианта
бокс-модели: W3Cшный, когда в ширину блока включен только размер содержимого (контента), майкрософтовский, когда в ширину блока включается ещё padding и border.
Майкрософтовский, надо сказать, куда более понятен и интуитивен.
Сегодня мы рассмотрим, как, проиграв в валидируемости ваших CSS, попросить все браузеры придерживаться Майкрософтовской
бокс-модели.
IE 5.5: новые классы CSS
Сегодня я зашел на сайт PixelCore под своим IE 5.5 и увидел там полосу прокрутки… шоколадного цвета! Мыслей возникло две — новые возможности новой версии и глюк браузера.
Версию о глюке я отложил в сторону и стал смотреть откуда растут шоколадные ноги у полос прокрутки. Под подозрение попал PixelCore’вский CSS-файл. Скачав его себе, я увидел внутри вожделенные свойства, начинающиеся со слова scrollbar. «Так,» — подумал я — «пора сходить на MSDN».
На MSDN’е мне вежливо объяснили, что браузере IE5.5 от мамы с папой при рождении получил, кроме нового в области фильтров и JavaScript, еще и новые атрибуты к евойному CSS, о чем подробнее можно почитать «здесь, там и еще вот тут». Я проникся уважением от такой заботы к разработчикам и с удовольствием почитал. И вот, что я узнал.
scrollbar-face-color, scrollbar-shadow-color, scrollbar-highlight-color, scrollbar-3dlight-color, scrollbar-darkshadow-color, scrollbar-track-color, scrollbar-arrow-color — весьма многочисленная группа атрибутов, управляющая цветами элементов прокрутки. Назначение каждого, думаю, понятно из названия
word-wrap — управляет разбиением текста в контейнере. Возможные значения — normal и word-break. Второе указывает на то, что текст, не поместившийся в контейнер по ширине будет принудительно разбит на несколько строк. Помните, как слишком длинные слова «раздвигали» таблицу? Теперь это поправимо средствами CSS.
writing-mode — переключает между режимами написания
white-space — может принимать значения normal или nowrap. normal задает обычный режимом вывода (текст, не поместившийся по ширине, автоматически разбивается на строки по пробелам и знакам препинания), nowrap — режим, при котором не поместившийся текст увеличивает ширину контейнера.
text-underline-position — управляет стилем подчеркивания текста. Принимает значения below (линия под текстом) и above (линия над текстом).
zoom — как и следует из названия, атрибут, предназначенный для _масштабирования_ содержимого тега. Значения указываются в процентах (например, 110%, 200%, 14%) или как коэффициент масштабирования (например, 1.1, 2, 0.14). Масштабировать можно все, что имеет содержание (например BODY).
Кроме того в IE 5.5