Я проходил множество интервью, и когда дело доходило до вопросов о CSS, то они сводились к: "Перечислите все известные способы центрирования элемента". После 5 ответов, откровенно, это надоело. Поэтому я хочу поделиться своими любимыми вопросами о CSS, которые я задаю на интервью. И начну я с CSS селекторов
Вопросы
В1. Каким способом я могу установить непрозрачность для элемента button, у которого есть атрибут disabled?
В2. Как я могу установить непрозрачность для элемента span, который следует прямо за элементом input?
В3. Как можно установить непрозрачность для элемента input, у которого установлен атрибут type со значением "radio".
В4. Есть фрагмент кода. Скажите сколько элементов с пурпурным фоном будет в первом и во втором случае.
<div class="some-element">some text</div>
<div class="some-element">some text</div>
<article class="some-element">some text</article>
случай 1
.some-element:first-child {
background-color: purple;
}
случай 2
.some-element:first-of-type {
background-color: purple;
}
В5. Что такое псевдокласс :root?
В6. Как работает псевдокласс :placeholder-shown?
В7. Изучите следующий фрагмент кода и назовите 2 способа переписать его без потери внешнего результата, чтобы в CSS осталось только одно правило
.list__item {
margin-right: 10px;
}
.list__item:last-child {
margin-right: 0;
}
В8. Как я могу задать CSS для элемента, в котором есть элемент, находящийся в фокусе?
В9. Представьте, что есть таблица с данными. Назовите способ добавления непрозрачности для всех строк, кроме той, на которую навел пользователь.
В10. Как можно установить цвет фона для элемента button, когда URL страницы содержит хэш #somehash? Для ответа на вопрос, исследуйте следующий код.
<div class="some-parent">
<button id="somehash" type="button">Some button</button>
</div>
Ответы
В1. Каким способом я могу установить непрозрачность для элемента button, у которого есть атрибут disabled?
Ответ
Чтобы отобрать элемент, у которого установлен атрибут disabled, нужно использовать селекторы атрибутов.
button[disabled] {
opacity: 0.24;
}
В2. Как я могу установить непрозрачность для элемента span, который следует прямо за элементом input?
Ответ
Нужно использовать смежный (+).
input + span {
opacity: 0.24;
}
В3. Как можно установить непрозрачность для элемента input, у которого установлен атрибут type со значением "radio".
Ответ
Чтобы отобрать элемент с type="radio" требуется использовать селекторы атрибутов.
input[type="radio"] {
opacity: 0.24;
}
В4. Есть фрагмент кода. Скажите сколько элементов с пурпурным фоном будет в первом и во втором случае.
<div class="some-element">some text</div>
<div class="some-element">some text</div>
<article class="some-element">some text</article>
случай 1
.some-element:first-child {
background-color: purple;
}
случай 2
.some-element:first-of-type {
background-color: purple;
}
Ответ
В первом случае один элемент, а во втором — 2.
В5. Что такое псевдокласс :root?
Ответ
:root — псевдокласс, которые отбирает корневой элемент в дереве документа. В случае HTML документа это элемент html. В случае SVG документа это элемент svg.
В6. Как работает псевдокласс :placeholder-shown?
Ответ
Псевдокласс :placeholder-shown срабатывает, когда у элементов input или textarea отображается placeholder. Если пользователь начинает ввод текста, то placeholder скрывается, и поэтому псевдокласс :placeholder-shown не применяется.
input:placeholder-shown {
background-color: lightgray;
}
В7. Изучите следующий фрагмент кода и назовите 2 способа переписать его без потери внешнего результата, чтобы в CSS осталось только одно правило
.list__item {
margin-right: 10px;
}
.list-item:last-child {
margin-right: 0;
}
Ответ
Первый способ это заменить margin-right на the margin-left и использовать псевдокласс :nth-child.
.list__item:nth-child(n+2) {
margin-left: 10px;
}
Второй способ это использовать псевдоклассы :not() и:last-child, чтобы задать margin-right.
.list__item:not(:last-child) {
margin-right: 10px;
}
/* or */
.list__item:not(:first-child) {
margin-left: 10px;
}
В8. Как я могу задать CSS для элемента, в котором есть элемент, находящийся в фокусе?
Ответ
Нужно использовать псевдокласс :focus-within.
<div class="some-parent">
<button type="button">Some button</button>
</div>
.some-parent:focus-within {
outline: 2px solid purple;
outline-offset: 5px;
}
В9. Представьте, что есть таблица с данными. Назовите способ добавления непрозрачности для всех строк, кроме той, на которую навел пользователь.
Ответ
Нужно использовать сложный селектор. Первая часть tbody:hover нужна, чтобы установить opacity для всех строк. Вторая часть чтобы opacity не применялось на наведенную строку, нужно использовать :not(:hover).
tbody:hover tr:not(:hover) {
opacity: 0.24;
}
В10. Как можно установить цвет фона для элемента button, когда URL страницы содержит хэш #somehash? Для ответа на вопрос, исследуйте следующий код.
<div class="some-parent">
<button id="somehash" type="button">Some button</button>
</div>
Ответ
Нужно использовать псевдокласс :target.
button:target {
background-color: purple;
}
P.S: Если интересно узнать больше о селекторах и проверить свои знания на практике, то это можно сделать на моем Patreon. Также для большей информации прочитайте введение для моего Patreon.
Специально для сайта ITWORLD.UZ. Новость взята с сайта Хабр