Чем удобен селектор :any()

Недавно я наткнулся на селектор, который появился в новой версии браузера FireFox (а также в ночных билдах движка webkit). Называется этот селектор :any(). В этой статье мы рассмотрим для чего он предназначен и чем он может быть нам полезен.

Обратите внимание, что :any() пока что не является частью спецификации CSS3. Но поскольку Webkit уже реализовали его, я уверен что за ним последуют и другие. Также, для того чтобы использовать селектор в FireFox, необходимо воспользоваться префиксом -moz. Итак, давайте посмотрим что же это за селектор.

Проблема

Проблема во вложенных элементах в CSS селекторах. Например:

/* Ссылки для всего сайта */ /* Уровень 0 */ a { color: #eee; } /* Ссылки для списков, навигации, хидера и футера */ /* Уровень 1 */ li a, nav a, header a, footer a { color: #555; } /* Специфичные ссылки, другой уровень вложенности */ /* Уровень 2 */ section li a, section nav a, section header a, section footer a, article li a, article nav a, article header a, article footer a, aside li a, aside nav a, aside header a, aside footer a { color: #000; } /* Уровень 3 */ /* ну вы поняли о чём я */

Как видите, каждый следующий уровень всё сложнее для восприятия.

Решение

Селектор :any() создан для того чтобы объединить несколько селекторов вместе, чтобы получить тот же самый эффект. Таким образом повышая читабельность вашего CSS-файла.

/* Ссылки для всего сайта */ /* Уровень 0 */ a { color: #eee; } /* Ссылки для списков, навигации, хидера и футера */ /* Уровень 1 */ :any(li, nav, header, footer) a { color: #555; } /* Специфичные ссылки, другой уровень вложенности */ /* Уровень 2 */ :any(section, article, aside) :any(li, nav, header, footer) a { color: #000; } /* Применяется только для заголовков в другом уровне вложенности */ /* Уровень 3 */ :any(section, article, aside) :any(li, nav, header, footer) :any(h1, h2, h3) a { color: #aaa; }

Вместо заключения

Как видите, можно сгруппировать несколько селекторов в один :any(), для того чтобы добраться до целевого элемента. Это гораздо лучше читается, вследствие чего ваши HTML и CSS становятся проще для понимания и поддержки.

Но кроме того, этот селектор особенно удобен при использовании тегов HTML5, таких как section, header, footer, nav, aside и т.п. Поскольку с помощью HTML5, разработчики пытаются уйти от тега div и сделать веб более осмысленным (в смысле семантически), CSS селектор делает ещё один шаг вперёд. Для решения описанных выше проблем можно использовать определённые классы, чтобы добиться того же самого поведения. Но зачем так делать, если ваш HTML уже семантически корректен?

Таким образом этот селектор особенно полезен, когда вы аккуратно и правильно используете HTML5 разметку с вложенными элементами и не хотите засорять её ненужными классами (либо идентификаторами).

Примеры и ссылки по теме

  • Примерчики
  • Описание на mozilla.org
  • Статус для Webkit
  • Ещё немного с Mozilla
Опубликовано: 12.04.2011 Просмотров 32546 Ссылка на оригинал Tweet it!
4 comments  

Андрей Гурылёв

2011.04.12 08:25

 Но если все селекторы объединить таким образом, браузеры кроме лисы и веб-китов не будут понимать такого кода. Зачем тогда нужны эти мороки?
 

basilkot

2011.04.12 09:30

  • Эта статья для ознакомления, что такая фича существует. Конечно, сегодня такими селекторами пользоваться не оч удобно. Но настанет светлое будущее, а мы уже вооружены :)

faiwer

2011.04.12 16:58

 ИМХО, лучше бы добавили в спецификацию фичи из SCSS. примеры выше там реализуются куда более "очевиднее" и приятнее и глазу, и более схожи с привычным синтаксисом css
 

Сергей

2012.07.02 13:44

 "...Поскольку с помощью HTML5, разработчики пытаются уйти от тега div..."
Наверно, Вы, все же неправы, задача стоит сделать код семантически понятным, но от div никто уходить не собирается. Напротив, рекомендуется использовать этот тег, например, в качестве вспомогательной обертки, которая содержит лишь элемент дизайна.
 

Андрей

2013.09.20 15:32

 селектор :any() будет в css4.
 

Оставить после себя комментарий

user

2016.09.12

Отправить сообщение:

Email

Сообщение

Бонус на первый депозит в слоте Грейт Пигсби Мегавейс дарит тебе онлайн казино Вавада! Переходи по ссылке и получай 100 бесплатных вращений на депозит до 1000$!