Nth child не работает в ie. Как работает CSS-селектор nth-child

Одним из наиболее популярных направлений развития виртуальной и дополненной реальности является образование. Существует много различных вариантов применения современных технологий в этой области — от простых школьных туров по Древнему Египту на уроках географии до обучения специалистов для работы на сверхскоростном поезде или на космической станции. Своими замечаниями о том, какими возможности обладает виртуальная реальность в образовании, поделился Дмитрий Кириллов, руководитель VRAR lab и Cerevrum Inc .

Плюсы использования VR в образовании

Использование виртуальной реальности открывает много новых возможностей в обучении и образовании, которые слишком сложны, затратны по времени или дороги при традиционных подходах, если не всё одновременно. Можно выделить пять основных достоинств применения AR/VR технологий в образовании.

Наглядность. Используя 3D-графику, можно детализированно показать химические процессы вплоть до атомного уровня. Причем ничто не запрещает углубиться еще дальше и показать, как внутри самого атома происходит деление ядра перед ядерным взрывом. Виртуальная реальность способна не только дать сведения о самом явлении, но и продемонстрировать его с любой степенью детализации.

Безопасность. Операция на сердце, управление сверхскоростным поездом, космическим шатлом, техника безопасности при пожаре — можно погрузить зрителя в любое из этих обстоятельств без малейших угроз для жизни.

Вовлечение. Виртуальная реальность позволяет менять сценарии, влиять на ход эксперимента или решать математическую задачу в игровой и доступной для понимания форме. Во время виртуального урока можно увидеть мир прошлого глазами исторического персонажа, отправиться в путешествие по человеческому организму в микрокапсуле или выбрать верный курс на корабле Магелланна.

Фокусировка. Виртуальный мир, который окружит зрителя со всех сторон на все 360 градусов, позволит целиком сосредоточиться на материале и не отвлекаться на внешние раздражители.

Виртуальные уроки. Вид от первого лица и ощущение своего присутствия в нарисованном мире — одна из главных особенностей виртуальной реальности. Это позволяет проводить уроки целиком в виртуальной реальности.

Форматы VR в образовании

Использование новых технологий в образовании предполагает, что учебноый процесс должен быть перестроен соответствующим образом.

ОЧНОЕ ОБРАЗОВАНИЕ

Виртуальные технологии предлагают интересные возможности для передачи эмпирического материала. В данном случае классический формат обучения не искажается, так как каждый урок дополняется 5–7-минутным погружением. Может быть использован сценарий, при котором виртуальный урок делится на несколько сцен, которые в включаются в нужные моменты занятия. Лекция остается, как и прежде, структурообразующим элементом урока. Такой формат позволяет модернизировать урок, вовлечь учеников в учебный процесс, наглядно иллюстрировать и закрепить материал.

ДИСТАНЦИОННОЕ ОБРАЗОВАНИЕ

При дистанционном обучении ученик может находиться в любой точке мира, равно как и преподаватель. Каждый из них будет иметь свой аватар и лично присутствовать в виртуальном классе: слушать лекции, взаимодействовать и даже выполнять групповые задания. Это позволит придать ощущение присутствия и устранить границы, которые существуют при обучении через видеоконференции. Также преподаватель сможет понять, когда ученик решит покинуть урок, так как шлемы Oculus Rift и HTC Vive оборудованы датчиком освещения, позволяющим распознать, используется шлем в данный момент или нет.

СМЕШАННОЕ ОБРАЗОВАНИЕ

При наличии обстоятельств, мешающих посещать занятия, ученик может делать это удаленно. Для этого класс должен быть оборудован камерой для съемки видео в формате 360-градусов с возможностью трансляции видео в режиме реального времени. Ученики, посещающие урок дистанционно, смогут наблюдать происходящее в классе от первого лица (например, прямо со своего места), видеть своих одноклассников, общаться с преподавателем и принимать участие в совместных уроках.

САМООБРАЗОВАНИЕ

Любой из разработанных образовательных курсов может быть адаптирован для самостоятельного изучения. Сами уроки могут размещаться в онлайн-магазинах (например, Steam, Oculus Store, App Store, Google Play Market), чтобы у всех была возможность осваивать или повторять материал самостоятельно.

Минусы использования VR в образовании

Однако пока использование технологий и сами устройства не будут максимально «отточены», будут существовать минусы и потенциальные проблемы использования виртуальной реальности в образовании.

Объем. Любая дисциплина довольно объемна, что требует больших ресурсов для создания контента на каждую тему урока — в виде полного курса или десятков и сотен небольших приложений. Компании, которые будут создавать такие материалы, должны быть готовы заниматься разработкой довольно продолжительное время без возможности ее окупить до выхода полноценных наборов уроков.

Стоимость. В случае с дистанционным обучением нагрузка по покупке устройства виртуальной реальности ложится на пользователя, или этим устройством может быть его телефон. Но образовательным учреждениям понадобится закупать комплекты оборудования для классов, в которых будут проходить занятия, что также требует существенных инвестиций.

Функциональность. Виртуальная реальность, как и любая технология, требует использования своего, специфического языка. Важно найти верные инструменты для того, чтобы сделать контент наглядным и вовлекающим. К сожалению, многие попытки создания обучающих VR-приложений не используют все возможности виртуальной реальности и, как следствие, не выполняют своей функции.

Пример: урок физики в VR

Для того, чтобы проверить эффективность и жизнеспособность использования виртуальной реальности в образовании, компания VRAr lab разработала экспериментальный урок по физике. В исследовании приняли участие 153 человека: подростки 6-17 лет, их родители и родственники. После просмотра участников попросили ответить на три вопроса: насколько хорошо усваивается учебный материал, поданный таким образом; каково отношение детей к обучению в виртуальной реальности; какие школьные предметы (по мнению школьников) предпочтительны для создания уроков в виртуальной реальности.

Урок был посвящен теме электрического тока в простейшей электрической цепи. Надев очки, пользователь оказывался в комнате перед столом, на котором была визуализирована простейшая электрическая цепь. Далее пользователь попадал внутрь проводника, где ему предстояло изучить его строение (визуализация строения атома, кристаллической решетки, условная визуализация течения электрического тока в связке с источником питания). Урок рассчитан на шесть учеников, сопровождается лекцией учителя и длится от 5 до 7 минут.

После лекции респонденты заполнили анкеты.

Усвоение материала и отношение к урокам в VR

Респондентам было предложено ответить на три закрытых вопроса анкеты: какая из перечисленных частиц не является частицей атома; из чего состоит ядро атома; какая частица отвечает за передачу электрического заряда. Результат оказался отличным – лишь 8,5% респондентов не усвоили материал.

Что касается отношения к подобным урокам, то по данным VRAR lab, 148 респондентов из 153 (97,4%) желали бы и дальнейшего применения технологий виртуальной реальности на школьных уроках, причем в качестве дисциплин большинство указало физику и химию.

В целом, эксперимент, проведенный VRAR lab, показал успешность применения VR в образовании. Современные технологии, несмотря на долгий путь развития, еще молоды, но всё же виртуальная реальность – это следующий большой рывок в развитии сферы образования. И в ближайшее время нам предстоит увидеть множество интересных открытий в этой области.

Существует такой селектор, точнее псевдокласс, называемый:nth-child . Вот пример его использования:

UL LI:nth-child(3n+3) { color:#CCC; }

Что делает CSS-код, приведенный выше? Он выбирает каждый третий элемент внутри маркированного списка: это 3-й, 6-й, 9-й, 12-й и т.д. Давайте посмотрим, как именно работает это выражение и что еще можно сделать с помощью:nth-child .

Всё зависит от того, что находится между скобками. Селектор:nth-child принимает два ключевых слова: even и odd . Тут всё просто: even выбирает чётные элементы, такие как 2-ой, 4-ый, 6-ой и т.д., а odd выбирает нечётные элементы, такие как 1-й, 3-й, 5-й и т.д.

Как видно из первого примера, :nth-child также принимает в качестве параметра выражения. В том числе и простейшие уравнения, иначе говоря, просто числа. Если поставить их в скобки, будет выбран только один элемент с соответствующим номером. Например, вот как выбрать только пятый элемент:

UL LI:nth-child(5) { color:#CCC; }

Однако давайте вернемся к 3n+3 из первого примера. Как он работает и почему выбирается каждый третий элемент? Весь фокус в понимании переменной n и приведенного алгебраического уравнения. Подумайте об n , как о начинающемся с нуля множестве целых чисел. Потом дополните уравнение. Так 3n это 3×n , а все уравнение вместе это (3×n)+3 . Теперь, подставляя вместо n числа больше или равные нулю, мы получим:

  • (3 × 0) + 3 = 3 = 3-й элемент
  • (3 × 1) + 3 = 6 = 6-й элемент
  • (3 × 2) + 3 = 9 = 9-й элемент и т.д.

А как насчёт:nth-child(2n+1) ?

  • (2 × 0) + 1 = 1 = 1-й элемент
  • (2 × 1) + 1 = 3 = 3-й элемент
  • (2 × 2) + 1 = 5 = 5-й элемент и т.д.

Так, стоп! Это ведь то же самое, что и odd . Тогда, возможно, не стоит использовать это выражение? Но разве в этом случае мы не подвергаем наш первый пример излишнему усложнению? Что, если вместо 3n+3 мы запишем 3n+0 или ещё проще 3n ?

  • (3 × 0) = 0 = ничего нет
  • (3 × 1) = 3 = 3-й элемент
  • (3 × 2) = 6 = 6-й элемент
  • (3 × 3) = 9 = 9-й элемент и т.д.

Итак, как вы можете видеть, результат получится такой же, а значит, нет необходимости в +3 . Мы можем использовать и отрицательные значения n , с таким же успехом, как и вычитание в уравнениях. Например, 4n-1:

  • (4 × 0) – 1 = –1 = ничего нет
  • (4 × 1) – 1 = 3 = 3-й элемент
  • (4 × 2) – 1 = 7 = 7-й элемент и т.д.

Использование -n может показаться странным - ведь если конечный результат отрицательный, то никакие элементы в выборку не попадут. Но если дополнить уравнение и снова сделать результат положительным, то выборка окажется довольно интересной: при помощи неё можно будет получить первые n элементов, например так: -n+3:

  • –0 + 3 = 3 = 3-й элемент
  • –1 + 3 = 2 = 2-й элемент
  • –2 + 3 = 1 = 1-й элемент
  • –3 + 3 = 0 = ничего нет и т.д.

На SitePoint есть хороший справочник с милой табличкой , которую я бесстыдно опубликую здесь:

n 2n+1 4n+1 4n+4 4n 5n-2 -n+3
0 1 1 4 3
1 3 5 8 4 3 2
2 5 9 12 8 8 1
3 7 13 16 12 13
4 9 17 20 16 18
5 11 21 24 20 23

Поддержка браузерами

Селектор:nth-child - один из немногих CSS-селекторов, который почти полностью поддерживается в современных браузерах и абсолютно не поддерживается в IE, даже в IE8. Поэтому когда дело доходит до его использования, и конечный результат сделан по технологии прогрессивного улучшения - вы можете смело использовать его для некоторых оформительских элементов, вроде расцветки строк таблицы. Однако не стоит применять его в более серьезных случаях. Например, полагаться на него в раскладке сайта или удалять правое поле из каждого третьего блока в сетке три на три, чтобы они вошли в ряд.

Допустим, есть такой HTML:


<p > Little</ p >
<p > Piggy</ p >
</ section>

Следующий CSS будет делать одно и тоже:
p:nth- child(2 ) { color : red ; }

p:nth-of- type(2 ) { color : red ; }

Хотя, конечно, в этих селекторах, есть разница.

Псевдокласс :nth-child , означачает выбрать элемент, если:

  1. Этот элемент - параграф;
  2. Это второй элемент одного родителя.
Псевдокласс :nth-of-type , означает:
  1. Выбрать второй параграф одного родителя.
Предположим, что наша разметка изменена следующим образом:

<h1 > Words</ h1 >
<p > Little</ p >
<p > Piggy</ p >
</ section>

Теперь первый вариант не работает:
p:nth- child(2 ) { color : red ; } /* Не работает */

Второй продолжает работать:
p:nth-of- type(2 ) { color : red ; } /* Продолжает работать */

Под «Не работает» я имею ввиду, что cелектор:nth-child выбирает слово «Little» вместо «Piggy». Потому что элемент выполняет оба условия: 1) Это второй элемент родительского элемента и 2) Это параграф. Под «Продолжает работать», я имею ввиду, что селектор продолжает выбираться «Piggy», потому что это второй параграф родительского элемента.

Если добавить

после

, то селектор с:nth-child не выберет ничего , потому что параграф больше не является вторым элементом. Селектор с:nth-of-type продолжит работать.

Мне кажется:nth-of-type менее хрупкий и более полезный в целом, несмотря на это:nth-child продолжает быть основным в работе. Как часто вы думаете «Я хочу выбрать второй элемент в родительском блоке, если это параграф». Возможно иногда, но чаще вы думаете «Выбрать второй параграф» или «выбрать каждую третью строку таблицы», для этих задач больше подходит:nth-of-type (опять же, на мой взгляд).

Большинство ситуаций, когда я говорю «Почему мой селектор с:nth-child не работает?» случаются из за того, что я забываю про выборку тегов и нужный тег не оказывается по счету тем, который нужен. Поэтому, при использовании:nth-child лучше указывать его от родителя и не использовать привязку к тегу.

dl :nth- child(2 ) { } /* Этот вариант лучше чем */
dd:nth- child(2 ) { } /* этот */

Но, конечно, все зависит от конкретной ситуации.

Поддержка браузерами:nth-of-type довольно приличная… Firefox 3.5+, Opera 9.5+, Chrome 2+, Safari 3.1+, IE 9+. Я бы сказал, если вам нужна более глубокая поддержка, то используйте jQuery (используйте селектор и применяйте класс, там где нужно), но jQuery прекратил поддержку:nth-of-type . Слышал, что из за редкого использования, но мне это кажется странным. Если вы хотите пойти этим путем, то вот

В CSS существует селектор, если быть более точным, псевдо-селектор, называемый nth-child. Пример его использования:

Ul li:nth-child(3n+3) { color: #ccc; }

Вышеприведённый CSS делает следующее: применяет стиля для каждого третьего элемента ненумерованного списка. А именно 3-го, 6-го, 9-го, 12-го и т.д. Но как это работает? А также какую выгоду можно извлечь используя nth-child ?

Основной смысл заключается в выражении в скобках. nth-child принимает два ключевых слова: even (чётный) и odd (нечётный). Смысл их абсолютно ясен. Even выбирает чётные элементы (2, 4, 6), odd - нечётные (1, 3, 5).

Как показано в примере выше, nth-child может обрабатывать выражения. Какое самое простое возможное выражение? Просто число. Если вы напишите какое-нибудь число в скобках, то будет выбран один единственный элемент. Например, выберем пятый элемент списка:

Ul li:nth-child(5) { color: #ccc; }

Вернёмся к нашему первому примеру, в котором мы использовали выражение (3n+3). Как он работает? Почему он выбирает каждый третий элемент? Вся суть в переменной n. Она принимает целые значения от нуля и больше. Давайте рассмотрим подробнее:

(3 x 0) + 3 = 3 = 3-ий элемент (3 x 1) + 3 = 6 = 6-ой элемент (3 x 2) + 3 = 9 = 9-ый элемент и т.д.

Теперь попробуем следующее выражение: nth-child(2n+1) :

(2 x 0) + 1 = 1 = 1-ый элемент (2 x 1) + 1 = 3 = 3-ий элемент (2 x 2) + 1 = 5 = 5-ый элемент и т.д.

В итоге получили тоже самое что и в случае с odd , таким образом нет нужды часто использовать такое выражение. Более того, наш первый пример тоже можно упростить и использовать вместо оригинального выражения (3n+3), выражение (3n):

(3 x 0) + 0 = 0 = нет соответствия (3 x 1) + 0 = 3 = 3-ий элемент (3 x 2) + 0 = 6 = 6-ой элемент и т.д.

Как видите, результат тот же, но не надо писать "+3". Также мы можем использовать отрицательные значения в выражении. Например, 4n-1:

(4 x 0) - 1 = -1 = нет соответствия (4 x 1) - 1 = 3 = 3-ий элемент (4 x 2) - 1 = 7 = 7-ой элемент и т.д.

Использование отрицательных значений для коэффициента при n, выглядит слегка странно, потому что в случае отрицательного результата не будет найдено соответствие. Вам надо будет постоянно изменять выражение, чтобы добавить положительных элементов. Как оказалось, этот подход очень удобен для выбора первых n элементов. Рассмотрим пример с "-n+3":

0 + 3 = 3 = 3ий элемент -1 + 3 = 2 = 2-ой элемент -2 + 3 = 1 = 1-ый элемент -3 + 3 = 0 = нет соответствия

Кроссбраузерность

nth-child является одним из тех самых несчастных атрибутов, которые являются полностью кроссбраузерными, за исключением абсолютного нуля в IE, даже 8-ой версии. Поэтому, когда речь заходит о его использовании, то если ожидаемый результат - это в некотором роде визуальный эффект (например раскраска строк некой таблицы), то это идеальный подход. Но, вероятно, не стоит использовать его для чего-то более важного, что может повлиять, например, на корректность вёрстки.

Конечно, если вы используете jQuery, то вам не стоит переживать по этому поводу, так как jQuery работает даже в Internet Explorer.

Ну и напоследок

Вы можете поиграть с различными выражениями для селектора на

Псевдокласс :nth-child используется для добавления стиля к элементам на основе нумерации в дереве элементов.

Обозначения

Описание Пример
<тип> Указывает тип значения. <размер>
A && B Значения должны выводиться в указанном порядке. <размер> && <цвет>
A | B Указывает, что надо выбрать только одно значение из предложенных (A или B). normal | small-caps
A || B Каждое значение может использоваться самостоятельно или совместно с другими в произвольном порядке. width || count
Группирует значения. [ crop || cross ]
* Повторять ноль или больше раз. [,<время>]*
+ Повторять один или больше раз. <число>+
? Указанный тип, слово или группа не является обязательным. inset?
{A, B} Повторять не менее A, но не более B раз. <радиус>{1,4}
# Повторять один или больше раз через запятую. <время>#
×

Значения

odd Все нечётные номера элементов. even Все чётные номера элементов. <число> Порядковый номер дочернего элемента относительно своего родителя. Нумерация начинается с 1, это будет первый элемент в списке. <выражение> Задаётся в виде an±b , где a и b - целые числа, а n - счётчик, который автоматически принимает значение 0, 1, 2...

Если a равно нулю, то оно не пишется и запись сокращается до b . Если b равно нулю, то оно также не указывается и выражение записывается в форме an . a и b могут быть отрицательными числами, в этом случае знак плюс меняется на минус, например: 5n-1.

За счёт использования отрицательных значений a и b некоторые результаты могут также получиться отрицательными или равными нулю. Однако на элементы оказывают влияние только положительные значения из-за того, что нумерация элементов начинается с 1.

В табл. 1 приведены некоторые возможные выражения и ключевые слова, а также указано, какие номера элементов будут задействованы.

Табл. 1. Результат для различных значений псевдокласса
Значение Номера элементов Описание
1 1 Первый элемент, является синонимом псевдокласса :first-child .
5 5 Пятый элемент.
2n 2, 4, 6, 8, 10,… Все чётные элементы, аналог значения even .
2n+1 1, 3, 5, 7, 9,… Все нечётные элементы, аналог значения odd .
3n 3, 6, 9, 12, 15,… Каждый третий элемент.
3n+2 2, 5, 8, 11, 14,… Каждый третий элемент, начиная со второго.
n+4 4, 5, 6, 7, 8,… Все элементы, кроме первых трёх.
-n+3 3, 2, 1 Первые три элемента.
5n-2 3, 8, 13, 18, 23,…
even 2, 4, 6, 8, 10,… Все чётные элементы.
odd 1, 3, 5, 7, 9,… Все нечётные элементы.

Допустимо комбинировать два псевдокласса :nth-child для выбора диапазона элементов. Здесь будут выбраны все элементы со второго по пятый.

:nth-child(n+2):nth-child(-n+5) { … }

Пример

nth-child

21342135 213621372138
Нефть1634 627457
Золото469 725647
Дерево773 793486
Камни2334 8853103

В данном примере псевдокласс :nth-child используется для изменения стиля первой строки таблицы, а также для выделения цветом всех чётных строк (рис. 1).

Рис. 1. Применение псевдокласса:nth-child к строкам таблицы

Спецификация

Каждая спецификация проходит несколько стадий одобрения.

  • Recommendation (Рекомендация ) - спецификация одобрена W3C и рекомендована как стандарт.
  • Candidate Recommendation (Возможная рекомендация ) - группа, отвечающая за стандарт, удовлетворена, как он соответствует своим целям, но требуется помощь сообщества разработчиков по реализации стандарта.
  • Proposed Recommendation (Предлагаемая рекомендация ) - на этом этапе документ представлен на рассмотрение Консультативного совета W3C для окончательного утверждения.
  • Working Draft (Рабочий проект ) - более зрелая версия черновика после обсуждения и внесения поправок для рассмотрения сообществом.
  • Editor"s draft (Редакторский черновик ) - черновая версия стандарта после внесения правок редакторами проекта.
  • Draft (Черновик спецификации ) - первая черновая версия стандарта.
×


Top