Прямо сейчас в Амстердаме начинается конференция CSS Day и мы решили попробовать новый формат и сделать текстовую трансляцию в течение дня. Программа: http://cssday.nl/programme
Эрик Мейер про веб-шрифты в CSS — http://cssday.nl/programme#eric-meyer
-
Не забывайте указывать локальные (несколько, при возможности) псевдонимы для шрифтов в
@font-face, на случай, если шрифты уже установлены. -
Если оформление заголовков в тексте веб-шрифтом ещё нормально, то оформление всего текста вызвает проблемы с быстродействием на мобильных.
-
Вы можете указывать имя шрифта при подключении короче, например
font-family:HlvвместоHelvetica, чтобы экономить место в CSS. -
Правда на Windows, если переименовать Helvetica в H, то потеряется связь с Arial, которую автоматически делает система.
-
Никто кроме разработчиков не смотрит сайты в разных браузерах, так что вы никогда не получите письмо „ваш сайт плохо выглядит в разных браузерах“
-
Можно использовать свойство
unicode-range:U+43, U+48, …внутри@font-face, чтобы применять разные шрифты к разным символам в тексте. -
Например
unicode-range:U+26для оформления всех амперсандов в тексте другим шрифтом. -
Фикс для Firefox, который не поддерживает
unicode-range: указать оформление в виде исключения:unicode-range:U+00-25, U+27-10FFFF -
С помощью
unicode-rangeможно оформить, скажем, все прописные буквы другим шрифтом, указав позиции нужных букв в диапазонах -
Из-за агрессивной предзагрузки, для более отзывчивого поведения, браузеры подгружают шрифты даже если они не применяются к текущему документу
Берт Бос про CSS-селекторы — http://cssday.nl/programme#bert-bos
-
Ссылка на презентацию Берта Боса с CSS Day — http://www.w3.org/Talks/2013/0614-CSS-Amsterdam/
-
CSS начинался как язык оформления для простых текстовых документов, для сложных случаев предполагалось использовать XSL.
-
XSL пригодился только для печати, не для интерактивных документов в онлайне. В отсутствии стандартного языка для интерефесов, выиграла пара HTML+CSS
-
Сегодня целевая аудитория и случаи для применения CSS сильно изменились, остался только целевой формат HTML: древовидный текст, в порядке следования.
-
В какой-то момент CSS начал работать с элементами вне дерева:
::first-line(letter), формы::value, псевдоконтент::before, страницы@page,@top -
Селектор
[lang|="en"]выбирает первую часть строки, разделённой дефисами, например,lang="en-ca", но неlang="enca" -
С минусом в nth-селекторах всё становится чуть сложнее, например:
nth-child(-n+3)выбирает только 1, 2 и 3 элементы -
Селектор
:notнепростой и может приводить к ошибкам, но бывают полезные случаи: все картинки без атрибутаalt—img:not([alt]) -
Селектор для локализации с главной страницы CSS на сайте W3C —
:not(:lang(en)) > li[lang|=en]:before { content: url(de) " " } -
Используйте препроцессоры, вместо того, чтобы ждать всех нужных свойств от CSS, но это не отменяет, что CSS будет развиваться дальше
Стивен Хей про Flexbox — http://cssday.nl/programme#stephen-hay
-
Первый браузер и весь веб Тим написал за год, CSS написали за 2 года. Первая CSS-спецификация для раскладки появилась через 17 лет
-
Flexbox скорее для отдельных компонентов, чем для всей страницы, для этого есть другие спецификации, см. http://xanthir.com/blog/b4580
-
Если верстать весь макет и элементы на Flexbox, то в какой-то момент вы почувствуете, что вы верстаете на таблицах с распорками
-
Работая с Flexbox, забудьте про верх, низ, лево и право — есть только оси (главная и поперечная) и начало и конец каждой из них
-
Главная идея Flexbox — это направление гл. оси: гориз. или верт., его меняет свойство
flex-direction:row|columnи обратное их направление -
Со свойствами
flex-grow(shrink,basis) и значениями короткого свойстваflexвсё не так просто, лучше открыть и поиграть с ними в браузере -
Быстрый способ сделать элемент первым в группе с помощью свойства
order(если оно уже задано всем) — это сделатьorder:-1
Дивья Маньян про фильтры и режимы смешивания в CSS — http://cssday.nl/programme#divya-manian
-
Старая версия слайдов Дивьи для доклада на CSS Day — http://nimbu.in/cssday На конференции демонстрируется более новая.
-
Группа FX Task Force объединяет авторов CSS- и SVG-спецификаций для работы над общим CSS-синтаксисом для эффектов.
-
Свойство и его значения, например,
filter:blur(10px)работает в WebKit-браузерах http://caniuse.com/css-filters -
Порядок отрисовки элемента с фильтром: формирование (рамка, фон, шрифт), применение фильтров, применение прозрачности, кадрирования
-
Свойство box-shadow делает тень для прямоугольного блока, фильтр drop-shadow делает тень для видимого контура элемента
-
Идентичные фильтры в CSS и SVG:
filter:blur(radius)и<filter id="blur"><feGaussianBlur stdDeviation="radius"></filter> -
SVG-фильтры имеют более широкую поддержку и могу быть использованы как источник для создания CSS-фильтров при обращении к ним по
id. -
Фильтры используют честное размытие по Гауссу для создания теней, свойства
box-shadowиtext-shadowиспользуют упрощённое размытие. -
Режимы смешивания (
screen,overlay, и т.п.) определяют как элемент накладывается на фон:E { mix-blend-mode:multiply } -
Режим смешивания включается только для элементов, создающих новый контекст (
transform,z-index,opacity,filter) -
Для включения нового контекста без применения специальных свойств предполагается использование спец. свойства
E { isolation:isolate } -
Смешивание дорогостоящее потому, что бразеру сначала нужно отрисовать всё под целевым элементом и только потом применить смешивание.
-
Смешивание для Canvas:
globalCompositeOperation = 'screen'(доступно в ночных сборках Firefox) -
Фильтр
feBlendпотенциально может повторить смешивание, но только самое базовое. В дальнейшем фильтры разовьются в этом направлении.
Таб Аткинсон про переменные и условия в CSS — http://cssday.nl/programme#tab-atkins
-
Ссылка на презентацию Таба Аткинсона — http://www.xanthir.com/talks/2013-06-14/
-
Текущий вид CSS-переменных: задание —
html { var-main-color:red }и использование —.foo { background:var(main-color) } -
CSS-переменные, в отличие от препроцессорных, дают привычный каскад и простое получение переменных из JavaScript:
el.style -
В имени CSS-переменных можно использовать (почти) любые юникодные символы, что может повысить читаемость и понятность кода
-
CSS-переменные можно использовать как авторские свойства (данные) и дальше легко опираться или использовать их в JavaScript
-
Проверка на поддержку Flexbox перед использованием:
@supports (display:flex) { div {display:flex} } -
Несколько условий внутри
@supportsмогут сочетаться с логическими операторамиnot,andиor— главное внимательно следить за скобками -
Условный оператор
@supports, в отличие отimplementation.hasFeature, работает на парсинге свойств, а не наtrueиfalse, что надёжнее. -
Будущее переменных:
parent-var(foo)— это значение переменной для родителя текущего элемента -
Пример динамической переменной:
.tree { var-indent:calc(parent-var(indent, 0px) + 1em) } .item { padding-left:var(indent) } -
Значение переменной по умолчанию:
E { var-main-color: blue !default }— используется, если в итоге не задаётся. -
Переменные только первый шаг. Что дальше? Авторские медиавыражения, функции и псевдо-классы (элементы), миксины,
@extendиз SASS. -
Не принятый пока черновик для иерархического CSS, как во всех препроцессорах — http://dev.w3.org/csswg/css-hierarchies/
-
Более эффективные протоколы SPDY и HTTP2 в ближайшие пару лет сделают ненужным использование CSS-спрайтов.
-
Возможность указания целевого элемента в селекторе из черновика новых CSS-селекторов — http://dev.w3.org/csswg/selectors/#subjects
-
Авторы спецификаций не изобретают новые возможности, они собирают лучшее из тысячи существующих (в препроцессорах, напр.) и документируют
-
CSS-переменные нужно понимать как отдельные свойства, которые собираются вместе по порядку и дальше сражаются за специфичность.
-
Shadow DOM будет готов для в Chrome и Firefox в ближайший год, чуть позже наверняка подключатся Safari и IE, уже есть хорошие JS-полифилы
Дэниел Глазман про медиавыражения — http://cssday.nl/programme#daniel-glazman
-
CSS WG — около 90 человек, из которых примерно 35 активных участников.
-
Медиавыражения состоят из CSS и JavaScript API, предложены Opera и Microsoft в 2001 году и стали стандартом только в июне 2012
-
HTML 4.01 с самого начала описывал правила расширение списка медиатипов, помимо существующих
all,screen,print, и т.п. -
Синтакс медиавыражений основан на вычислении
trueиfalseдля выражений и их комбинаций:screen and (color) and (min-width:900px) -
Для устаревших браузеров можно предварить выражение неизвестным для них ключевым словом:
only screen and (max-width:100px) -
Отрицание работает не только для медиатипа, а для всего выражения:
not projection and (max-width:100px) -
Процентные значения для размеров пока не разрешены в медиавыражениях из-за неопределённости применения, над проблемой думают
-
Медиавыражения в JavaScript:
window.matchMedia(query)для проверки выражения;addListenerиremoveListenerдля подписки на изменения выражений. -
Пока нет в спецификации: постраничной навигации, определения освещённости, проверки доступности JavaScript, проверки на язык документа.
-
Медиавыражения на стероидах: в работе черновик для более тонкой проверки различных параметров, даже заданных самим автором документа
-
Хочется также комбинировать группы выражений под одним именем и использовать дальше только его, чтобы избегать копирования и ошибок
-
Есть идея отказаться от медиатипов в пользу медиавозможностей, чтобы полагаться на более тонкие возможности браузеров и устройств
-
Существуют визуальные редакторы для создания медиавыражений: Adobe Edge Reflow (пока бета) и BlueGriffon (написанный мной)
-
Полезные ссылки для изучения: http://www.w3.org/TR/TR/css3-mediaqueries и http://www.w3.org/TR/cssom-view
Питер Гастон про анимации и переходы — http://cssday.nl/programme#peter-gasston
-
История анимации в браузерах: 1993
<img>анимированный GIF; 1995 IE+NN<marquee>; 1996<script>; …2003animation+transitionв Safari -
Самый простой переход записывается так:
transition:1s(остальные свойства устанавливаются по умолчанию) -
Свойство
transition-durationможет указываться вNs(секундах) или вNms(миллисекундах) -
Свойство
transition-delayтоже указывается единицами времени, но значение может быть отрицательным! -
Для управления динамикой анимации можно использовать
cubic-bezier()или набор ключевых слов (ease-in,ease-out), см. http://cubic-bezier.com -
Для пошаговой анимации указывается функция
steps()с различными ключевыми словами и непростой работой -
Упоминание
noneвместо свойства внутриtransitionотменяет работу всего свойства, однако незнакомые свойства просто игнорируются -
WebKit и Blink пытаются анимировать даже несуществующие свойства, в отличие от Firefox, что неправильно
-
Если
animation-directionполучает значениеreverse, тоanimation-timing-functionтоже переворачивается, напр. изease-inстановитсяease-out -
Спека говорит: если
animation-duration:0s, тоanimation-fill-modeвсё равно применяется, но ни один браузер почему-то так пока не делает -
Пока информация об анимациях
@keyframesне отображается в инспекторах браузеров, напр. если значение изменилось во время анимации -
Свойства, основанные напр. на
font-size, тоже будут анимированы:margin:1em,line-height, и т.п. Кроме IE, где работает толькоline-height -
SVG, встроенный прямо в документ, может быть анимирован из CSS этого документа:
svg:hover { transition:1s } -
При анимации краткого свойства
padding, событиеtransitionendв Firefox срабатывает 4 раза, в WebKit/Blink один раз. -
Событие
animationstartдаёт доступ к информации о стартовавшей анимации:e.timeElapsedиe.animationName -
Старайтесь использовать анимацию
@keyframesиtransition, если она доступна, поскольку браузеры могут их сильно оптимизировать -
CSS3 vs jQuery: слой один раз кладётся на видеокарту и работает, в случае со скриптом, это происходит снова и снова во время анимации.
-
Делайте анимации быстрее, люди приходят к вам на сайт не для того, чтобы смотреть на крутые анимации.
Лия Веру про border-radius — http://cssday.nl/programme#lea-verou
-
Ссылка на презентацию Лии Веру с CSS Day — http://lea.verou.me/humble-border-radius/ (на конференции показывается обновлённая версия)
-
Сложные значения
borde-radiusна самом деле полезны, это не просто интеллектуальная мастурбация CSS WG -
Все согласны, что свойство
border-radiusна самом деле нужно было назватьcorner-radius, ведь для его работы не нужно свойствоborder -
Chrome умеет
shape-inside:rectangle(0,0, 100%,100%, 100px,100px)— для скругления, которому следует текст, см. http://dev.w3.org/csswg/css-shapes/