Глобальные атрибуты. class
Атрибут class
Определения
class является фундаментальным атрибутом используемых в html элементах.
classявляется глобальным атрибутом и может быть указан во всех html элементах
Если class присутствует, он должен иметь значение представляющий набор маркеров разделенных пробелом.
Нет никаких дополнительных ограничений на имена классов, имя может быть произвольным, но все же рекомендуется использовать осмысленные имена.
Используя class мы имеем доступ к элементу через css и управление элементами через javascript.
Точка . в css является признаком класса.
1
<header class="card-header"></header>
Особенности имен классов
- Имя класс может быть любым, но рекомендуется использовать латинские слова и писать их в нижнем регистре.
- Если слов несколько, разделять их с помощью тире или знака подчеркивания.
- В названии класса лучше не использовать больше трех слов.
- В названии так же не рекомендуют использовать цифры (
text1). - В имени класс не должна быть отсылка на контекст или внешний вид элемента, так как он может измениться, не привязывайтесь к тегу или контексту использования
Примеры названий классов
btn btn-primarybtn--primarynav__link--activecontainermain-textsub-textbutton__textcards__container-itemerror-messageform-groupis-opencol-6mt-4icon--searchalert alert--error
Доступ через javascript
Стандартный способ получить список и как то им управлять потом - это querySelectorAll;
1
2
3
4
<div class="a b">1</div>
<div class="a b">2</div>
<div class="a c">3</div>
<div class="d">4</div>
Получаем список элементов
1
2
3
4
5
document.querySelectorAll('.a') // NodeList(3) [ div.a.b, div.a.b, div.a.c ]
document.querySelectorAll('.b') // NodeList [ div.a.b, div.a.b ]
document.querySelectorAll('.d') // NodeList [ div.d ]
document.querySelectorAll('.z') // NodeList []
document.querySelectorAll('.a.b') // NodeList [ div.a.b, div.a.b ]
Еще можно использовать getElementsByClassName тогда уже вернется коллекция элементов
Здесь можно точку не писать метод и так понимает, что работает с классами.
1
2
3
4
5
document.getElementsByClassName('a') // HTMLCollection { 0: div.a.b, 1: div.a.b, 2: div.a.c, length: 3 }
document.getElementsByClassName('b') // HTMLCollection { 0: div.a.b, 1: div.a.b, length: 2 }
document.getElementsByClassName('d') // HTMLCollection { 0: div.d, length: 1 }
document.getElementsByClassName('z') // HTMLCollection { length: 0 }
document.getElementsByClassName('a b') // HTMLCollection { 0: div.a.b, 1: div.a.b, length: 2 }
Изменение класса является одной из самой распространенной операцией на странице.
Например, у элемента body сейчас два класса main main-index.
1
2
3
4
// Получить имя класс у элемента body
document.body.className // "main main-index"
// Присвоить новое имя
document.body.className = "test" // "test"
Для манипуляции с классами используют специальный объект classList. Это более удобный способ работы с классами, нежели просто со строкой
Получаем коллекцию токенов элемента
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// Текущая коллекция токенов
document.body.classList // DOMTokenList [ "main", "main-index" ]
// Если нет классов у элемента
document.body.classList //DOMTokenList []
// Добавить класс
document.body.classList.add('main2') // main main-index main2
// Удалить класс
document.body.classList.remove('main2') // main main-index
// Добавить/удалить если он есть или его нет.
document.body.classList.toggle('main2') // true
document.body.classList.toggle('main2') // false
// Проверка наличния класса
document.body.classList.contains('main') // true
// Добавить сразу несколько классов
document.body.classList.add("c1","c2","c3")
// Удалить сразу несколько классов
document.body.classList.remove("c1","c2","c3")
// Замена класса другим
document.body.classList.replace("main","main4") // true
// Заменить класс в зависимости от условия
document.body.classList.toggle("main", window.innerWidth < 1000) // true
Полезные ссылки
Хотите оптимизировать свой бизнес, нужен сервис, сайт или интеграция.
Бесплатно расчитаю время разработки, предложу решение вашей задачи.
