Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
CSS селекторы: Полный гайд к использованию
Целекторы (selectors) — это основа CSS. Они определяют, какие HTML элементы будут стилизованы. Хорошее понимание селекторов критически важно для эффективной разработки, так как они используются не только в CSS, но и в JavaScript (querySelector, querySelectorAll), тестировании и других местах.
Базовые селекторы
1. Селектор типа элемента (Type Selector)
/* Стилизует все элементы <p> */
p {
color: blue;
font-size: 16px;
}
/* Стилизует все <h1> */
h1 {
color: red;
font-weight: bold;
}
2. Селектор класса (Class Selector)
/* Все элементы с классом "button" */
.button {
padding: 10px 20px;
background-color: #007bff;
color: white;
}
/* Элемент с несколькими классами */
.button.primary {
font-weight: bold;
}
<button class="button">Обычная кнопка</button>
<button class="button primary">Основная кнопка</button>
3. Селектор ID (ID Selector)
/* ID должен быть уникальным на странице */
#header {
background-color: #333;
color: white;
padding: 20px;
}
<header id="header">Заголовок страницы</header>
4. Универсальный селектор (Universal Selector)
/* Выбирает ВСЕ элементы */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* Выбирает все дети внутри .container */
.container * {
color: black;
}
Селекторы атрибутов (Attribute Selectors)
/* Элемент с определённым атрибутом */
input[type="text"] {
border: 1px solid #ccc;
padding: 5px;
}
input[type="submit"] {
background-color: #007bff;
color: white;
}
/* Атрибут содержит значение */
a[href*="example.com"] {
color: green;
}
/* Атрибут начинается с значения */
a[href^="https"] {
color: blue;
}
/* Атрибут заканчивается на значение */
img[src$=".png"] {
border: 2px solid gray;
}
/* Атрибут содержит слово (отделено пробелом) */
a[rel~="external"] {
text-decoration: underline;
}
/* Атрибут точно равен или начинается с дефиса */
lang[lang|="en"] {
color: navy;
}
Комбинаторы селекторов (Combinators)
1. Потомок (Descendant Combinator)
/* Все <a> внутри <nav> на любом уровне вложенности */
nav a {
color: blue;
text-decoration: none;
}
.parent .child {
font-size: 14px;
}
2. Прямой потомок (Child Combinator)
/* Только прямые дети <div> внутри <main> */
main > div {
margin: 10px 0;
}
/* Все <li> которые прямые дети <ul> */
ul > li {
list-style-type: disc;
}
3. Соседний элемент (Adjacent Sibling Combinator)
/* <h2> который идёт сразу после <h1> */
h1 + h2 {
color: red;
margin-top: -10px;
}
/* <p> сразу после <img> */
img + p {
margin-top: 10px;
}
4. Общий соседний элемент (General Sibling Combinator)
/* Все <p> которые идут после <h1> (на одном уровне) */
h1 ~ p {
color: gray;
}
/* Все <span> после .highlight на одном уровне */
.highlight ~ span {
font-weight: normal;
}
Псевдоклассы (Pseudo-classes)
/* Состояние ссылки */
a:link { color: blue; } /* Непосещённая ссылка */
a:visited { color: purple; } /* Посещённая ссылка */
a:hover { color: red; } /* При наведении мыши */
a:active { color: darkred; } /* При клике */
/* Элемент в фокусе */
input:focus {
outline: 2px solid blue;
box-shadow: 0 0 5px rgba(0, 0, 255, 0.5);
}
/* Первый элемент своего типа */
p:first-of-type {
font-weight: bold;
}
/* Последний элемент своего типа */
p:last-of-type {
margin-bottom: 0;
}
/* N-ный элемент */
li:nth-child(2) { color: red; } /* Второй элемент */
li:nth-child(odd) { background: #f0f0f0; } /* Нечётные */
li:nth-child(even) { background: white; } /* Чётные */
li:nth-child(3n) { font-weight: bold; } /* Каждый 3-й элемент */
/* Только если элемент один */
p:only-child {
margin: 0;
}
/* Проверка, есть ли дети */
div:empty {
display: none; /* Скрыть пустые div */
}
/* Отрицание селектора */
p:not(.hidden) {
display: block;
}
/* Элемент в фокусе (современный вариант) */
input:focus-visible {
outline: 3px solid blue;
}
Псевдоэлементы (Pseudo-elements)
/* Первая строка текста */
p::first-line {
color: red;
font-weight: bold;
}
/* Первая буква */
p::first-letter {
font-size: 200%;
font-weight: bold;
}
/* Перед элементом */
button::before {
content: "→";
margin-right: 10px;
}
/* После элемента */
button::after {
content: "←";
margin-left: 10px;
}
/* Выделенный текст */
::selection {
background-color: blue;
color: white;
}
/* Placeholder в input */
input::placeholder {
color: #999;
font-style: italic;
}
/* Полоса прокрутки (webkit только) */
::-webkit-scrollbar {
width: 10px;
}
::-webkit-scrollbar-track {
background: #f1f1f1;
}
::-webkit-scrollbar-thumb {
background: #888;
}
Практические примеры
Пример 1: Навигация
nav {
background-color: #333;
}
nav > ul > li {
display: inline-block;
}
nav a {
color: white;
text-decoration: none;
padding: 10px 15px;
display: block;
}
nav a:hover {
background-color: #555;
}
nav a:active {
background-color: #007bff;
}
Пример 2: Таблица со стилями
table tr:nth-child(even) {
background-color: #f9f9f9;
}
table tr:hover {
background-color: #e3f2fd;
}
table td:first-child {
font-weight: bold;
}
table td:last-child {
text-align: right;
}
Пример 3: Форма
input[type="text"],
input[type="email"],
input[type="password"],
textarea {
width: 100%;
padding: 10px;
border: 1px solid #ccc;
border-radius: 4px;
font-family: inherit;
}
input:focus,
textarea:focus {
outline: none;
border-color: #007bff;
box-shadow: 0 0 0 3px rgba(0, 123, 255, 0.25);
}
input[disabled] {
background-color: #e9ecef;
cursor: not-allowed;
}
input[type="submit"] {
background-color: #007bff;
color: white;
cursor: pointer;
padding: 10px 20px;
border: none;
border-radius: 4px;
}
input[type="submit"]:hover {
background-color: #0056b3;
}
JavaScript и селекторы
// querySelector — вернёт первый найденный элемент
const button = document.querySelector('.button');
const header = document.querySelector('#header');
const link = document.querySelector('a[href^="https"]');
// querySelectorAll — вернёт все найденные элементы
const buttons = document.querySelectorAll('button.primary');
const items = document.querySelectorAll('li:nth-child(odd)');
// Работа с селекторами
buttons.forEach(btn => {
btn.addEventListener('click', () => console.log('Clicked'));
});
Специфичность селекторов
Универсальный селектор *: 0
Тип элемента: 1
Класс, атрибут, псевдокласс: 10
ID: 100
Инлайн стили: 1000
Примеры:
p = 1
.button = 10
p.button = 11
p#main = 101
.button:hover = 20
#header nav a = 101
Лучшие практики
- Избегай селекторов по ID если можно использовать классы
- Не вкладывай селекторы слишком глубоко (max 3 уровня)
- Используй понятные имена классов (BEM, SMACSS)
- Предпочитай селекторы классов для большинства случаев
- Селекторы атрибутов используй для input типов
Заключение
Селекторы CSS — это мощный инструмент, который позволяет точно выбирать элементы для стилизации. Глубокое понимание различных типов селекторов и их комбинаций позволит писать более эффективный и поддерживаемый CSS код, а также упростит работу с JavaScript при выборе DOM элементов.