Дочірні селектори. Дочірні та контекстні CSS селектори Css вибрати дочірні елементи
Я думаю, що багато хто знає про контекстних селекторах в CSS. Вони використовуються найчастіше, проте, досвідчені верстальники прекрасно знають, що іноді контекстні селектори вносять певні проблеми. Це проблема пов'язана з тим, що в структурі елемента може бути багато однакових елементів, вкладених один в одного. І необхідно застосувати стиль не для всіх вкладених елементів, а тільки до безпосередньо дочірньому елементу. Ось для цього і використовуються Дочірні селектори в CSS.
Щоб проблема стала більш зрозумілою, давайте приведу невеликий приклад. Нехай у нас є такий HTML-код:
перший абзац
другий абзац
І наше завдання зробити червоним тільки " другий абзац". Якщо ми напишемо з використанням контекстного селектора:
Container p (
color: red;
}
То у нас стануть корисним обидва абзацу, що нам зовсім не потрібно. Дане завдання дуже просто вирішується за допомогою дочірніх селекторів в CSS:
Container> p (
color: red;
}
Все, тепер червоним у нас став тільки " другий абзац". Оскільки саме цей абзац є безпосередньо дочірнім для .container. А " перший абзац"Є дочірнім для внутрішнього div, Таким чином, під дію дочірнього селектора він не потрапляє.
Ось так легко вирішуються такі завдання, однак, є один величезний мінус дочірніх селекторів в CSS- вони не працюють в браузерах Internet Explorer . З цієї причини, їх використання вкрай небажано. Але якщо Ви раптом десь зустрінете, то тепер Ви будете знати, що означає даний типселектор і що він робить.
Ви дійшли до третьої частини цієї глави. Тут ви дізнаєтеся, як використовувати селектори дочірніх елементів в CSS, а також познайомитеся з деякими додатковими псевдоклас для більш точної вибірки.
Дочірні селектори CSS
У попередній статті ми розповідали про родинні зв'язки між елементами HTML-документа, в тому числі і про дочірніх елементах. Давайте подивимося на прикладі, як ці зв'язки можна використовувати в CSS.
Уявіть, що вам потрібно присвоїти стиль тільки тим тегам
Які є дочірніми по відношенню до
, Не зачіпаючи інші(Наприклад,
Дочірні по відношенню до
Як це зробити? Дуже просто: створимо дочірній селектор:
Body> p (color: # 333;)
Зверніть увагу на символ> після body. За допомогою нього ви вказуєте, що стиль застосовується виключно для дочірніх тегів
батька
. Якщо символ прибрати, то стиль застосується абсолютно до всіх тегамЯкі знаходяться всередині тега
, Хоча вони можуть і не бути для нього дочірніми.додаткові псевдокласи
В CSS3 існує ряд псевдокласів для роботи з дочірніми елементами. Нижче наведено опис кожного з них, приклади використання, а також відмінності між псевдоклас виду «child» і «of-type».
- : First-child - за допомогою цього псевдокласу можна застосувати стиль до зазначеного елементу веб-сторінки, за умови, що він є першим
- : Last-child - стиль застосовується до зазначеного елементу веб-сторінки за умови, що він є останнімдочірнім елементом свого батька;
- : Nth-child - дозволяє вибрати парні (even) і непарні (odd) дочірні елементи; також за допомогою даного псевдокласу можна стилізувати чергуються дочірні елементи, використовуючи вирази виду an + b і числа;
- : Only-child - застосовується до дочірньому елементу за умови, що той є єдинимдитиною у батьків;
- : First-of-type - стиль застосовується до першого елемента зазначеного типу(Навіть якщо цей елемент не є першим дочірнім для свого батька і над ним знаходяться інші дочірні елементи інших типів);
- : Last-of-type - працює точно так само, як і попередній псевдоклас, з тією лише різницею, що стиль застосовується до останньому елементу зазначеного типу;
- : Nth-of-type - за принципом роботи схожий на: nth-child, але орієнтується на типелемента;
- : Only-of-type - застосовується до дочірньому елементу зазначеного типу за умови, що той є у батька єдиною дитиною свого типу.
Приклад використання: first-child,: last-child і: nth-child
перша дитина
Друга дитина
третя дитина
непарний номер |
парний номер |
непарний номер |
парний номер |
остання дитина
/ * CSS * / p: first-child (font-weight: bold; text-transform: uppercase;) p: last-child (font-style: italic; font-size: 0.8em;) p: nth-child ( 3) (color: red;) tr: nth-child (odd) (background-color: # A2DED0;) tr: nth-child (even) (background-color: # C8F7C5;) Скріншот: застосування: first-child, : last-child і: nth-child
Ми написали CSS стиль для дочірніх елементів простого HTML-документа, де тег
,
Samsung | Galaxy S7 Edge | 60000 |
Apple | iPhone SE | 39000 |
Microsoft | Lumia 650 | 13500 |
Alcatel | Idol S4 | 30000 |
Huawei | P9 | 60000 |
HTC | HTC 10 | 50000 |
Meizu | Pro 6 | 40000 |
Xiaomi | Mi5 | 35000 |
Щоб визначити стиль для непарних елементів, в селектор передається значення "odd":
Tr: nth-child (odd) ()
Для стилізації парних елементів в селектор передається значення "even":
Tr: nth-child (even) ()
Також в цей селектор ми можемо передати номер стілізуемий елемента:
Tr: nth-child (3) (background-color: #bbb;)
В даному випадку стилизуется третій рядок.
Ще одну можливість представляє використання замінника для номера, який виражається буквою n:
Tr: nth-child (2n + 1) (background-color: #bbb;)
Тут стиль застосовується до кожної другої непарної рядку.
Число перед n (в даному випадку 2) представляє той дочірній елемент, який буде виділений таким. Число, яке йде після знака плюс, показують, з якого елемента потрібно починати виділення, тобто, +1 означає, що потрібно починати з першого дочірнього елемента.
Таким чином, в даному випадку виділення починається з 1-го елемента, а наступним виділяється 2 * 1 + 1 = 3-й елемент, далі 2 * 2 + 1 = 5-й елемент і так далі.
Наприклад, якщо ми хочемо виділити кожен третій елемент, починаючи з другого, то ми могли б написати:
Tr: nth-child (3n + 2) (background-color: #bbb;)
Псевдоклас: nth-last-child по суті надає ту ж саму функціональність, тільки відлік елементів йде не з початку, а з кінця:
Tr: nth-last-child (2) (background-color: #bbb; / * 2 рядок з кінця, тобто передостання * /) tr: nth-last-child (2n + 1) (background-color: #eee ; / * непарні рядки, починаючи з кінця * /)
Псевдоклас nth-of-type
Псевдоклас: nth-of-type дозволяє вибрати дочірній елемент певного типу за певним номером:
Tr: nth-of-type (2) (background-color: #bbb;)
Аналогічно працює псевдоклас nth-last-of-type, тільки тепер відлік елементів йде з кінця:
Tr: nth-last-of-type (2n) (background-color: #bbb;)
- Виконувана завдання - вибір дочірніх елементів.
- Позначення - ланцюжок: простий селектор батька, комбінатор «>», простий селектор дочірнього елемента.
- Приклад використання:
Задамо відступ зліва для списку, безпосередньо вкладеного в елемент з класом content (на списки другого рівня вкладеності ці правила не подіють):
Content> ul (margin-left: 20px;)
Детальніше про селектор дочірнього елемента
Основна відмінність селектора дочірнього елемента від розглянутого раніше - той факт, що якщо селектор нащадка вибирає все нащадки, незалежно від рівня вкладеності, то селектор дочірнього елемента вибирає нащадків тільки першого рівня - тобто безпосередньо вкладені елементи. Наприклад, напишемо такий:
Div> span (color: # 555; / * сірий колір * /)
... і такий код:
Тут знову чорний текст. І цей текст теж чорний, так як цей span НЕ дочірній для div. Його безпосередній батько - тег p.
Дочірні селектори CSS - це селектори, які використовуються для застосування стилів до елементів тільки в тих випадках, коли вони є дочірніми по відношенню до інших (батьківським) елементам. Як і селектори нащадків, дочірні селектори є складовими і складаються з простих селектор (класи, ідентифікатори і т.д.).
І знову, якщо ви забули, що таке дочірні елементи, то давайте згадаємо, розібравши вже знайомий вам приклад.
<тег1> <тег2>...тег2> <тег3><тег4>...тег4>тег3> тег1>
Елемент називається дочірнім по відношенню до іншого елементу, якщо він знаходиться всередині нього на першому рівні вкладеності. У нашому прикладі<тег2>і<тег3>є дочками<тег1>, а<тег4>- це дочка<тег3> .
Дочірні селектори складаються з двох або більше простих селектор розділених знаком ">", де спочатку вказується батько, потім його дочірній елемент, потім дочка цього дочірнього елемента і т.д. Тобто, як і в селекторах нащадків, задається шлях проходження по дереву документа. Стилі будуть застосовані тільки до тих елементів, селектори яких знаходяться останніми в списку. Загальний синтаксис:
селектор1> селектор2 (
Прогалини з обох сторін знака ">" можна ставити, а можна і ні, за бажанням.
Приклад використання дочірніх селекторів CSS
Параграф1.
Параграф2.
Результат в браузері
Параграф1.
Параграф2.
У цьому прикладі вам треба звернути увагу на два моменти. Тут є три елементи, але тільки у двох з них є рамки, відступи і поля. Чому? І другий момент. Тільки у першого параграфа синій колір тексту.
Internet Explorer 6.0 не розуміє дочірні селектори, тому, якщо ви створюєте свій сайт з урахуванням цього старого браузера - пам'ятайте про це.
Дочірні селектори в HTML-таблицях
Багато новачків (а іноді вже і не новачки) в створенні сайтів стикаються з певними проблемами при використанні дочірніх селекторів в HTML-таблицях. Щоб ви зрозуміли, про що йдеться, Давайте подивимося на таку звичайну таблицю.
осередок 1.1 | осередок 1.2 |
осередок 2.1 | осередок 2.2 |
А тепер питання. Що ви будете робити, якщо вам знадобиться за допомогою дочірніх селекторів пройти від тега до осередків? Якщо ви вирішили написати ось так, то це невірно:
table> tr> td ( властивість: значення; властивість: значення; ...)
А здогадуєтеся, чому невірно? Ні? Справа в тому, що ви забули ще про один елемент -, який навіть якщо не вказано явно, то все одно незримо присутній в кожній HTML-таблиці. Просто у нього немає обов'язкових відкривають і закривають тегів, тому про нього часто забувають. Кстати да, в HTML-підручникуми його з вами не проходили, так як в реальності його явне вказівку рідко коли потрібно. Ну, думаю ви вже здогадалися, яка буде правильний запис, Але я вам все ж покажу.
table> tbody> tr> td ( властивість: значення; властивість: значення; ...)
До речі, не тільки таблиці мають елементи з необов'язковими відкривають тегами, є і ще такі елементи. Просто на практиці «проблеми забудькуватості» виникають найчастіше саме з таблицями, тому я і загострив вашу увагу на цьому.
Домашнє завдання.
- Встановіть на сторінці шрифт Arial з розміром 0.9em і який-небудь фон.
- Напишіть на сторінці кілька заголовків і параграфів, змініть розмір і колір тексту заголовків так, як вважаєте за потрібне.
- Зробіть так, щоб посилання безпосередньо в параграфах сторінки були синього кольору без підкреслення. Але при цьому, якщо посилання додатково обрамляются будь-яким тегом, наприклад для курсиву, то вони повинні відображатися вже з підкресленням і червоного кольору. Ще раз загострюю вашу увагу на те, що не треба прописувати стилі посилань з кожним обрамляющим тегом окремо, зробіть універсально. Як? Подумайте.
- Створіть невелике меню в правій частині сторінки і зафіксуйте його, для цього вам знадобиться властивість і ще парочка супутніх йому властивостей, там розберетеся. При цьому, нехай меню не тільки залишається на місці в межах вікна браузера, а й при скролінгу НЕ наповзає на вміст сторінки.
Думаю останній пункт уроку буде для вас найскладнішим, але не намагайтеся відразу повністю зануритися в освоєння позиціонування. Просто зробіть домашнє завдання. До речі, цей пункт не буде працювати в Internet Explorer 6.0, так як старічек не розуміє фіксоване позиціонування.