Страницы

Поиск по вопросам

Показаны сообщения с ярлыком селекторы. Показать все сообщения
Показаны сообщения с ярлыком селекторы. Показать все сообщения

четверг, 11 июля 2019 г.

Выбор элементов с проверкой их родителей

Нужно выбрать те span на странице, которые не являются потомками заголовков (h1 - h6). Есть много селекторов для потомков, но вот селектора, который бы проверял принадлежность родителю, я, увы, не нашел.
Пример:
one

HEY

two

HEY2

three
Нужно выбрать span'ы за исключением тех, что в h2 и h3


Ответ

Выбираем все на странице. Для каждого пробегаемся по всем его родителям вплоть до document (можно было и только до ). Проверяем имя тега каждого родителя. Если оно входит в - , то отбрасываем этот Все оставшиеся считаются результатом.
document.addEventListener('DOMContentLoaded', onDomReady); function onDomReady() { var allSpans = document.getElementsByTagName('span'); var resultSpans = []; var regExp = /^H\d$/i; for (var i = 0; i < allSpans.length; i++) { var parent = allSpans[i].parentNode; while (parent != document) { if (regExp.test(parent.tagName)) { break; } parent = parent.parentNode; } if (parent == document) { resultSpans.push(allSpans[i]); } } for (var i = 0; i < resultSpans.length; i++) { resultSpans[i].style.color = 'red'; } }; not in hX

simple

not in hX, but in div
deep

То же самое с jQuery (если кому-то понадобится):
$(document).ready(function() { var headers = []; for (var i = 0; i <= 9; i++) { headers.push('h' + i); } var headersSelector = headers.join(','); var $resultSpans = $('span').filter(function() { return $(this).parents(headersSelector).length == 0; }); $resultSpans.css('color', 'red'); }); not in hX

simple

not in hX
deep

воскресенье, 26 мая 2019 г.

Можно ли обратится к элементу(элементам) через несколько указание нескольких атрибутов?

Возможно ли обратится к элементу(элементам) через указание нескольких атрибутов?
например: [class*="col"][role="main"] или [class*="col", role="main"] или [class*="col" role="main"]
Если возможно, то как корректно?


Ответ

Попробуйте так:

first
second
third


Документация доступна на русском по ссылке
Документация доступна английском по ссылке

понедельник, 20 мая 2019 г.

`+` (смежный селектор) и `>` (селектор непосредственного потомка) не работают вместе

Почему не работает селектор:
.parent > .child + .parent > .child { ... }
Сниппет:
.parent > .child + .parent > .child { color: green; }

текст

текст (почему не зелёный?)


Чтобы заработало можно заменить на .parent > .child + .child, но вопрос именно в том почему не работает исходная версия.


Ответ

В CSS нет никаких группировок, селекторы просто интерпретируются последовательно слева направо. Плюсик в вашем селекторе означает «следующий элемент после элемента .parent > .child»
.parent > .child + .parent > .child { color: green; }

Это .parent > .child
Это .parent > .child + .parent
Это .parent > .child + .parent > .child (зелёный!)

пятница, 26 апреля 2019 г.

Помогите разобраться с селекторами css

Как например задать класс второму по счету div, или задать только первому нужные стили, если у каждого однаковые названия классов? Немного не понятно с уровнями, как правильно задавать по уровню, что бы не плодить css классы?



Ответ

Для добавления стиля к элементам на основе нумерации в дереве элементов используется псевдокласс :nth-child
.class:nth-child(odd | even | <число> | <выражение>) {... // Styles }
Значения
odd - Все нечетные номера элементов.
even - Все четные номера элементов.
число - Порядковый номер дочернего элемента относительно своего родителя. Нумерация начинается с 1, это будет первый элемент в списке.
выражение - Задается в виде an+b, где a и b целые числа, а n — счетчик, который автоматически принимает значение 0, 1, 2...
Примеры
В вашем случае для стилизации второго элемента используйте псевдокласс :nth-child(2)
.child{ background:green; width:150px; height:100px; } .child:nth-child(2){ background:#ccc; width:100px; height:50px; }


А для стилизации первого элемента используйте псевдокласс :nth-child(1) или же :first-child
.child{ background:green; width:150px; height:100px; } .child:first-child{ background:#ccc; width:100px; height:50px; }

вторник, 2 октября 2018 г.

Псевдокласс :root и работа с ним

Сегодня случайно наткнулся на примеры работы с псевдоклассом :root. Сфера применения достаточно широкая. Хотелось бы услышать мнение тех, кто пользовался или пользуется. Реальный опыт эксплуатации, а не статейный материал. Подойдет ли для персонализации проекта, выбора основного цвета, фона и т.д.? Как дела с валидацией, скоростью и прочим? Можно ли сократить количество стилей с его помощью?
Это просто пример:
:root { --main-color: #9BC53D; --secondary-color: #EBFFFA; } body { margin: 0; padding: 0; } div { position: absolute; display: flex; justify-content: center; align-items: center; right: 20%; top: 20%; left: 20%; bottom: 20%; text-align: center; background: var(--main-color); color: var(--secondary-color); }

I am an example!

Больше примеров можно найти тут


Ответ

:root не делает ничего интересного. Его фишка в том, что он может ссылаться на любой корневой элемент. В HTML-файле это будет html, в SVG-файле svg, в XML-файле любой его корневой элемент.
Но ведь мы обычно пишем стили для HTML (ну или для SVG) и мы точно знаем, какой тег у нас корневой. Вот честно, мне сложно представить, чтобы мы один и тот же CSS-файл подключали одновременно к HTML и к SVG, да ещё и хотели одинаковые стили применить к их корневым элементам (но если всё-таки да, то этот псевдокласс для вас!).
Так что считаю, что его вполне можно заменить селектором по тегу.
Ну а если стилизуются разные XML'ки, то он вполне может быть полезен. Хотя лично я на практике не встречал необходимости стилизовать XML.

понедельник, 1 октября 2018 г.

Псевдокласс :root и работа с ним

Сегодня случайно наткнулся на примеры работы с псевдоклассом :root. Сфера применения достаточно широкая. Хотелось бы услышать мнение тех, кто пользовался или пользуется. Реальный опыт эксплуатации, а не статейный материал. Подойдет ли для персонализации проекта, выбора основного цвета, фона и т.д.? Как дела с валидацией, скоростью и прочим? Можно ли сократить количество стилей с его помощью?
Это просто пример:
:root { --main-color: #9BC53D; --secondary-color: #EBFFFA; } body { margin: 0; padding: 0; } div { position: absolute; display: flex; justify-content: center; align-items: center; right: 20%; top: 20%; left: 20%; bottom: 20%; text-align: center; background: var(--main-color); color: var(--secondary-color); }

I am an example!

Больше примеров можно найти тут


Ответ

:root не делает ничего интересного. Его фишка в том, что он может ссылаться на любой корневой элемент. В HTML-файле это будет html, в SVG-файле svg, в XML-файле любой его корневой элемент.
Но ведь мы обычно пишем стили для HTML (ну или для SVG) и мы точно знаем, какой тег у нас корневой. Вот честно, мне сложно представить, чтобы мы один и тот же CSS-файл подключали одновременно к HTML и к SVG, да ещё и хотели одинаковые стили применить к их корневым элементам (но если всё-таки да, то этот псевдокласс для вас!).
Так что считаю, что его вполне можно заменить селектором по тегу.
Ну а если стилизуются разные XML'ки, то он вполне может быть полезен. Хотя лично я на практике не встречал необходимости стилизовать XML.