
Хабр, привет!
Ко мне обращаются проверить знание CSS у разработчиков. Это может быть при найме или для составления плана обучения сотрудника.
В этом году я обновил свой список вопросов. Интересно, сможете ли вы на них ответить. Сразу предупреждаю, что многие вопросы каверзные. В них есть подвох. К тому же они о последних нововведениях в CSS.
Так, вы готовы? Давайте посмотрим, что я вам подготовил.
Для какого числа элементов будет применено правило?
<body>
<div class="awesome-box">1</div>
<div class="awesome-block">2</div>
<div class="awesome-box">3</div>
<div class="awesome-block">4</div>
</body>
:nth-child(2 of .awesome-box, .awesome-block) {
outline: 0.3rem dashed lightblue;
}
Ответ
Когда мы объявляем псевдо-класс nth-child с помощью синтаксиса of S, мы передаём список селекторов. В спецификации его называют complex-selector-list. Браузеры ищут HTML-элементы, основываясь на нём.
В нашем примере сначала найдутся все элементы, у которых есть атрибут class и значения .awesome-box и awesome-block. Далее среди них браузеры применят правило ко второму элементу.
Правильный ответ: К элементу с цифрой два.
Чем псевдо-класс :user-valid отличается от псевдо-класса :valid?
Ответ
Псевдо-классы :valid и :user-valid отличаются принципом работы. Первый срабатывает всегда, если у элемента некорректное значение. Второй же будет ждать момент, когда пользователь закончит взаимодействие с элементом.
Например, если псевдо-класс user-valid применим к текстовому полю, то он сработает после того, как пользователь покинет поле.
Правильный ответ: Псевдо-класс :user-valid срабатывает после окончания взаимодействия пользователя с элементом формы, а псевдо-класс :valid срабатывает после готовности документной модели.
В следующем примере правило не применится, потому что в элементе div нет элемента с атрибутом id. Правда или ложь?
<body>
<div class="awesome-block">
<span>Великолепный текст</span>
</div>
</body>
.awesome-block:has(span, #awesome-block) {
background-color: lightblue;
}
Ответ
При обработке псевдо-класса :has() браузеры воспринимают указанные селекторы как список селекторов (complex-selector-list). При его составлении не важно, будет ли найден HTML-элемент или нет.
В нашем примере браузеры применят правило, потому что есть селектор span, а в HTML у элемента с классом .awesome-block есть вложенный элемент span.
Правильный ответ: Ложь. Правило применится.
В коде неправильно установлено значение для свойства display, поэтому псевдо-элемент ::before не будет отцентрирован по горизонтали и вертикали. Правда или ложь?
.awesome-block {
display: block flex;
min-height: 50dvh;
}
.awesome-block::before {
content: "";
width: 1rem;
height: 1rem;
margin: auto;
background-color: tomato;
}
Ответ
Свойство display поддерживает синтаксис с двумя ключевыми словами, установленными через пробел. Первое будет обозначать, каким типом является элемент в потоке документа. В стандарте ему дали название display-outside. Я его буду называть внешний тип отображения.
Для его обозначения мы можем использовать три ключевых слова, а именно: block, inline и run-in.
block
Если к элементу будет применено ключевое слово block, то он становится элементом block-level.
inline
При использовании ключевого слова inline создаётся inline-level элемент. Правда есть исключение. Это значение inline.
В этом случае создаётся элемент inline box. Как описано в стандарте, это элемент inline-level, у которого в качестве внутреннего типа отображения задано ключевое слово flow.
run-in
Ключевое слово run-in создаёт элемент run-in box. По сути это тот же элемент inline box, только с определёнными правилами.
Второе ключевое слово указывает, какой тип элементов он создаёт внутри себя. В стандарте он называется display-inside. Я его буду называть внутренний тип отображения.
Существует шесть ключевых слов для обозначения. Это: flow, flow-root, flex, grid, table и ruby.
flow и flow-root
Создаётся контейнер, в котором могут существовать block-level и inline-level элементы. Разница между ними в том, что второй создаёт новый блочный контекст.
flex
Ключевое слово создаёт флекс-контейнер, в котором появляются основная и дополнительная оси. Они используются для позиционирования дочерних элементов.
grid
При использовании ключевого слова grid создаётся контейнер, в котором есть строки, столбцы и сетки.
table
Специальная обёртка над блочным контейнером, создающая сетку для имитации таблицы.
ruby
Ключевое слово создаёт контейнер, внутри которого можно создать фрагмент текста, являющейся аннотацией к другому фрагменту текста.
На практике значение для свойства display можно задать двумя способами. Оба варианта будут корректными. Например, значение flex можно написать как flex или block flex.
.awesome-block {
display: flex; /* или display: block flex */
}
Разработчики привыкли к более короткой записи flex, а браузеры видят его как block flex.
Правильный ответ: Ложь. В коде нет ошибки. Элемент будет расположен по центру по горизонтали и вертикали.
У псевдо-элемента с классом .awesome-block будет вычислено значение inline-block. Правда или ложь?
.awesome-block {
position: fixed;
display: inline-block;
}
Ответ
При использовании свойств position и display нужно понимать, что значения absolute и fixed трансформируют значение свойства display. Браузеры будут использовать блочные альтернативы.
В нашем примере используется значение inline-block. Его блочной альтернативой является значение block. Оно будет вычислено.
Правильный ответ: Ложь. Браузеры вычислят значение block.
Каким будет расстояние между левой границей родительского элемента и его дочерним псевдо-элементом ::before?
.awesome-block {
box-sizing: border-box;
width: 50rem;
min-height: 20dvh;
padding: 20px;
border: 1px solid;
}
.awesome-block::before {
content: "";
width: 1rem;
height: 1rem;
position: absolute;
background-color: tomato;
}
Ответ
При объявлении свойства position со значением absolute браузеры вытаскивают элемент из обычного потока документа, но не двигают его. Он остаётся на месте, где был ранее.
В нашем примере изначально элемент был сдвинут на 20px относительно левой границы родительского элемента. Это же значение сохранится после добавления свойства position.
Правильный ответ: 20px.
Координаты псевдо-элемента ::before не будут рассчитаны от вьюпорта. Правда или ложь?
.awesome-block {
width: 50%;
min-height: 20dvh;
will-change: transform;
background-color: pink;
position: absolute;
top: 3rem;
left: 3rem;
}
.awesome-block::before {
content: "";
width: 1rem;
height: 1rem;
background-color: lightblue;
position: fixed;
top: 0;
}
Ответ
При использовании свойств top, right, bottom и left для расчётов координат браузеры используют специальную область containing block. Если мы используем свойство position со значением fixed, то вьюпорт будет являться такой областью.
Но есть ряд свойств, которые это изменят. Одним из них является свойство will-change со значением transform. По этой причине областью containing block станет элемент, у которого установлено это свойство.
В нашем примере браузеры будут элемент с классом .awesome-block. Относительно его границ будут рассчитаны координаты.
Правильный ответ: Правда. Координаты будут рассчитаны относительно границ элемента с классом .awesome-block.
Какая цель у ключевого слова safe в следующем примере?
.awesome-block {
width: 20rem;
min-height: 5rem;
background-color: lightblue;
display: flex;
flex-direction: column;
align-items: safe center;
justify-content: center;
overflow: hidden;
}
Ответ
По умолчанию свойства justify-content и align-items не учитывает размеры родительского элемента. В результате дочерние элементы могут выйти за его пределы.
Ключевое слово safe исправляет это поведение. Браузеры начинают учитывать размеры родительского элемента. В результате если размеры дочерних элементов будут больше родительских, то они будут прижаты к границам родителя, не выходя за его пределы.
Правильный ответ: Ключевое слово safe заставляет браузеры контролировать размеры родительского и дочерних элементов.
Какое значение будет вычислено для свойства background-color у элемента body?
:root {
--page-background-color: purple;
background-color: tomato;
}
body {
--page-background-color: inherit;
background-color: var(--page-background-color);
min-height: 100dvh;
}
Ответ
Для правильного ответа нужно помнить, что для пользовательских свойств также работает механизм наследования. Они наследуют значение между друг другом, если у них одинаковое наименование. В нашем примере это --page-background-color.
По этой причине браузеры наследуют значение purple из пользовательского свойства --page-background-color из первого правила, а потом передают его в свойство background-color.
Правильный ответ: purple.
Браузеры не вычислят значение 1200px для свойства width. Почему?
:root {
--page-width: 1200px;
}
body {
width: calc(var(--page-width) + var(--page-default-gap, 0));
}
Ответ
При работе с математической функцией calc() нужно помнить, что значение 0 вызывает проблемы. Если оно используется для свойства, ожидающего значение типом length, и указано без единиц измерения, то будет ошибка. В стандарте сказано, что значение 0 без единиц измерения не поддерживается.
По этой причине браузеры не могут сложить два операнда.
Правильный ответ: Значение не будет вычислено, потому что значение 0 без единиц измерения не поддерживается для свойств, которые ожидают значение с типом length. В нашем примере это свойство width.
Однако браузеры вычислят значение. Оно будет соответствовать ширине вьюпорта.
Какое значение вычислят браузеры для свойства background-color?
<body>
<div id="awesome-block" class="awesome-block">
<span>Я дочерний элемент</span>
</div>
</body>
@layer basic, components;
@layer components {
.awesome-block {
background-color: tomato;
}
}
@layer basic {
#awesome-block {
background-color: green;
}
}
Ответ
В нашем примере используются CSS-слои, поэтому специфичность селекторов будет рассчитана с учётом них. Есть правило, что последний объявленный слой с помощью правила @layer является самым приоритетным.
У нас это слой components. Следовательно, значение tomato будет приоритетнее, чем значение green из слоя basic.
Правильный ответ: Будет вычислено значение tomato.
Какое значение вычислят браузеры для свойств inline-size и block-size у псевдо-элемента ::before?
.awesome-block {
inline-size: 1000px;
min-block-size: 300px;
background-color: pink;
position: relative;
}
.awesome-block::before {
content: "";
inline-size: 50%;
block-size: 20%;
background-color: lightblue;
position: absolute;
}
Ответ
В нашем примере используются логические свойства inline-size, block-size и min-block-size. Они являются альтернативой свойствам width, height и min-height.
.awesome-block {
width: 1000px;
min-height: 300px;
background-color: pink;
position: relative;
}
.awesome-block::before {
content: "";
width: 50%;
height: 20%;
background-color: lightblue;
position: absolute;
}
Данный вид свойств реагирует на изменение направления текста. В остальном же они ведут себя как привычные свойства. Поэтому принцип расчёта значения для свойств inline-size и block-size такой же, как для widthи height.
У элементов с установленным свойством position со значением absolute значение будет рассчитано относительно элемента с нестатическим типом позиционироавния.
В нашем примере браузеры выполнят вычисления относительно элемента с классом .awesome-block.
Правильный ответ: Для свойства inline-size будет вычислено значение 500px, а для свойства block-size — 60px.
Заключение
Вот и все мои вопросы. Поделитесь в комментариях своими впечатлениями. Какие вопросы понравились, а какие нет. Интересно узнать ваше мнение.
На прошлой неделе я ещё рассказал про странные CSS свойства. Загляните, посмотрите!
Спасибо за чтение!
P. S. Помогаю больше узнать про CSS в своём ТГ-канале CSS isn't magic. Присоединяйтесь. Ссылка в профиле.
© 2025 ООО «МТ ФИНАНС»
Комментарии (69)

ShamanR
07.10.2025 09:07>К тому же они о последних нововведениях в CSS.
А подскажите, в компаниях где вас нанимают для консультаций, поддерживают какие браузеры? Если только латест хромиум, то вопросов не имею, а если нужен сафари 16, то думаю вы уже сами поняли мой немой риторический вопрос.
RepppINTim
07.10.2025 09:07- "Мы поддерживаем Safari 16"
- "Ок, тогда половину вопросов из списка можно вычеркивать, они неактуальны"

urvanov
07.10.2025 09:07А это реально прямо на собеседованиях кто-то должен ответить? Прямо сходу, без документации?

undersunich
07.10.2025 09:07Это вопросы из серии: "Заморочки из бочки". Займитесь составлением кросвордов для журналов - уйдите из профессии ! Сколько же Вы людей на собесах завалили ! Ваше место в литературе !

ofthevoid
07.10.2025 09:07если человек будет способен отвечать на все это, то вы конкретно, со своей работой и организацией уже будете ему не нужны.
впрочем, если подумать, это даже хорошо что вы завалили массу людей, как минимум спасли их от нездорового окружения.

shadwar
07.10.2025 09:07Зашел почитать актуальные сейчас вопросы, увидел какие-то совсем уж эджкейсы современных возможностей, которые сами по себе то в реальности ближайшие лет 5 можно будет встретить только в документации, а уж подобные нюансы вообще никогда. Ясно, понятно.

Akuma
07.10.2025 09:07Лет 20 в вебе. Половину синтаксиса даже не знал и нафиг надо, честно сказать.
Тут скорее посмотреть на реакцию , если уж на работу нанимаете.

0whitewolf0
07.10.2025 09:07Похожая ситуация, зайдя в компенты отлегло, когда увидел, что у большинства аналогичная реакция на пост.

klimkovsky
07.10.2025 09:07Да... судя по комментариям, познания в области CSS у этой этой цивилизации так себе...

Dren0r
07.10.2025 09:07Судя по комментариям, радует, что еще не все потеряно, и любой здравомыслящий человек считает клоунадой такой собес.
Автору желаю почаще двигать всякие :nth 100500 и гордиться этим, а не нажать ф12 и посмотреть, что и где применено
К тому же, сказано, что вопросы о последних новвоведениях.
А последние - это @container, @starting-style, :has, :is и тд
ничего этого здесь нет"Координаты псевдо-элемента ::before не будут рассчитаны от вьюпорта. Правда или ложь?"
Вообще неправильный ответ, все потому родитель fixed элемента с position:aboslute, потому координаты расчитываются от его левого верхнего края, а не вьюпорта
will-change тут вообще не при чем
melnik909 Автор
07.10.2025 09:07will-change тут вообще не при чем
Это уже ошибка. У меня есть статья со ссылками на спеку. Там всё объяснено

Dren0r
07.10.2025 09:07По поводу will-change проверил, был не прав. Так как в 99.9% вместе с absolute идут -translate-x-1/2 и -translate-y-1/2, что дают родителю трансформ и расчет идет от него, а не вьюпорта.
По остальному вам в комментариях правильно написали, это не собес - это шоу с самоутверждением за счет собеседуемого.
В проде 1% этих примеров пригодится, и это не учитывая того, что в крупных фреймворках уже есть варианты разделения css так, чтобы они не мешались между компонентами, что сразу отсеет вопросы "а что тут выведет"
Вторая половина решается ксс фреймворками как tailwind, где можно написать пачку классов и забыть, не парясь, что и где потом применится, так как все будет нормально
melnik909 Автор
07.10.2025 09:07По поводу will-change проверил, был не прав. Так как в 99.9% вместе с absolute идут -translate-x-1/2 и -translate-y-1/2, что дают родителю трансформ и расчет идет от него, а не вьюпорта.
Отлично, что разобрались. Спасибо!

sobeskiller
07.10.2025 09:07Это уже ошибка.
Ну вот ошибка, и что? Дом рухнет? Айти это такая профессия где цена ошибки крайне низка, т.к. всплывёт либо на первом же прогоне, либо дальше на кодревью, QA и т.д. Даже перфокарты уже дырявить не надо и ждать завтрашнего утра, чтобы обнаружить что "ошибка", ё-моё! Программиста зачем-то рассматривают как пилота самолёта или кардиохирга. Которые, несомненно, должны всё помнить в мельчайших деталях. Но у программиста ведь совсем другой характер работы!

melnik909 Автор
07.10.2025 09:07Ну вот ошибка, и что? Дом рухнет?
Вообще не рухнет. Я сам годами не знал. Я оставил комментарий для тех, кто увидит сообщение, чтобы они могли посмотреть и узнать.

zweroboy1
07.10.2025 09:07Примерно треть ответил, хотя верстаю каждый день. Таким не пользуюсь, стараюсь применять что-то максимально простое, с поддержкой в браузерах около 100% и не создающее головоломок следующим разработчикам, которые будут читать мой код.

dom1n1k
07.10.2025 09:07С одной стороны, понятно желание нанять человека, который действительно хорошо понимает CSS, а не вайб-кодер.
С другой стороны, тут легко перегнуть палку, требуя знать наизусть детали спеки. И предлагая ему примеры замороченного кода, который не надо писать в реальности.
С третьей стороны, современные фронтендеры (за некоторыми исключениями) верстать не умеют - это печально, но факт. Для большинства это уровень даже не хард, а ближе к импосибиль.

RulenBagdasis
07.10.2025 09:07
Больше 20 лет занимаюсь фронтенд/фулстек разработкой, верстки не боюсь, делаю её регулярно, но я в первую очередь программист, не верстальщик. Я бы у вас собес не прошёл, это как раз тот случай, когда половина заданий из серии "не делайте так в проде", а вторая половина на заучивание справочников.
Когда я собеседую фронтендеров я спрашиваю, как можно сделать ту или иную штуку в css. Грубо говоря, знает ли он, что есть flexbox и какие возможности он предоставляет, знает ли он про существование псевдоклассов, что они могут позволить сделать и т.д. При этом я не прошу ничего писать, просто рассказать. Если человек верстал, он расскажет, а конкретные свойства и синтаксис он загуглит когда ему надо будет их на практике использовать, даже если забыл, это не важно.

DmitryOlkhovoi
07.10.2025 09:07Бедные кандидаты) ну или точней компания с таким собеседующим)
Я конечно спрашиваю про CSS, но там вопросы на уровне block vs inline. И поехали делать дело)
Вот и все мои вопросы. Поделитесь в комментариях своими впечатлениями. Какие вопросы понравились, а какие нет. Интересно узнать ваше мнение.
Ваши вопросы больше похоже на понтануться перед кандидатом, понатнуться статей, а не найти человека, который нужен компании.
Ну может можно развивать CSS с таким рвением. Но сомневаюсь, что вы как-то хоть куда-то пушили.
Поэтому респект за знания, но я бы не тратил свое время пытаясь ответить на эти вопросы) В мире фронта и так ментальный перегруз технологиями и косяками. Еще сидеть гадать между px, em, rem, vh, dvh, layer и прочем. Задача формочку покрасить, большинство UI ваще бекофисная, где всем глубоко пофиг даже на адаптивку, лишь бы работало, показывался товар, и кнопочки кликались.И не забываем про реальность, где половина из этого просто не работает. Это может быть 1% от юзеров, но при этом миллионы в деньгах. И такое довольно часто происходит на сайтах с трафиком. Обмазываться пре / пост процессорами не всегда поможет

0whitewolf0
07.10.2025 09:07На мой взгляд, достаточно поспрашивать про layout. Как работает display с разными значениями, position, z-index, понимание приоритетов селекторов. Какие псевдоклассы знает и какие кейсы приходилось решать, а если кандидат шарит за гриды, вообще песня, но знания гридов считаю до сих пор опциональным требованием, так как до сих пор по прежнему в основе используется flexbox.
А вопросы из поста можно задавать если цель кандидата завалить :)

FKV
07.10.2025 09:07Какое значение вычислят браузеры для свойств inline-size и block-size у псевдо-элемента ::before?
Ответ block-size — 60px сомнительный, так как нет контекста, а именно, неизвестно содержимое .awesome-block , которое может быть по высоте и 500px.

wd-315
07.10.2025 09:07Очень интересно было почитать — я даже в какой-то момент пошёл гуглить CSS4, думая, что пропустил выпуск нового релиза, раз столько всего нового.
На собеседовании спрашивать такое - сюр какой-то, но в целом если поток кандидатов настолько велик, то и такому место быть.

xsunson
07.10.2025 09:07Не понимаю, почему все хейтят. Нормальное собеседование для браузерных движков!

Hikonomuro
07.10.2025 09:07Вопросы у ТС так же "актуальны" как у саппорта на телефоне или эникея требовать знание OSI (а это нихрена не редкость).

xsunson
07.10.2025 09:07Это вообще-то юмор. Не "на знание", а "для". И тут достаточно взглянуть на поддержку layout на caniuse. Что в него могут не только лишь все.

Bunyaz39
07.10.2025 09:07Неплохая подборка для самопроверки, хотя половина из этого в реальной жизни встречается реже, чем единорог
:nth-child с of - красиво, но в 99% случаев задача решается добавлением одного класса - хорошо для олимпиады по css, но не для повседневной верстки

farengeyt451
07.10.2025 09:07Если на этом собеседовании будут вопросы и по js, то видимо из разряда что выведет в консоль: 'b'+'a'+ + 'a' 'a').toLowerCase()

ddidwyll
07.10.2025 09:07Вёрстка это сложно, хотя не все об этом знают. Более менее понимать возможности css, считаю, необходимо. Не знаю насчет вопросов к собеседованию, но в виде статьи полезно, спасибо. Насчет хейта не расстраиватесь, людям неприятно признавать, что их навыки ограничены, особенно если они уверены в обратном.

melnik909 Автор
07.10.2025 09:07Спасибо за поддержку! У меня только положительные эмоции. Я в целом рад, что статья вызвала интерес.

Dren0r
07.10.2025 09:07Верстка сложно - если городить код из примеров на чистом css и в одном файле на 5к строк.
В проде с возможностями фреймворков, пре процессоров, вариаций encapsulation внутри одного компонента, все это очень просто. А что-то сложное уже делается на джсе с GSAP и подобными библиотеками.
Достаточно отличать блок от грида с флексом, паддинг от маргина, и знать, как вертикально центрировать. За неделю можно выучить весь пул классов tailwind и больше не задаваться вопросами "что же тут выведет?"

RepppINTim
07.10.2025 09:07Классический список вопросов, чтобы почувствовать себя умным на собеседовании и завалить кандидата. Вместо того чтобы дать простую бизнес-задачу и посмотреть, как человек ее решит, мы будем гонять его по @layer и will-change. Идеальный способ нанять теоретика, а не инженера

adminNiochen
07.10.2025 09:07Надо использовать на собесах как чек того, юзает ли кандидат чатгпт как подсказку. Если ответит - сто процентов мухлюет))

AnKu_11
07.10.2025 09:07Вас за одну только постановку вопроса с двойным отрицанием надо в отдельный котел. Я пока прочитал, у меня мозг чуть не сломался.
В следующем примере правило не применится, потому что в элементе div нет элемента
Можно ведь задать вопрос: применится ли правило в …
Тут можно дать неверный ответ, тупо из-за кривой формы построения вопроса.

urvanov
07.10.2025 09:07Вас за одну только постановку вопроса с двойным отрицанием надо в отдельный котел.
Чисто теоретически, для русского языка двойное отрицание — это нормально. Мы же не англичане. Но так да, соглашусь с вами, воспринимается такое сложнее.

rakot
07.10.2025 09:07Это точно вопросы на собеседование? На собеседовании важно за минимум вопросов оценить уровень компетентности опрашиваемого, а тут даже если ни на один не ответить, все равно могут быть приемлемые знания.

Kwisatz
07.10.2025 09:07Ну есть такие люди. Я как то в контору собеседовался, у которой большие проблемы с оптимизацией запросов к бд, дак вместо того чтобы о насущном, интервьюверу было интересней низкоуровневое фуфло и знаю ли я, цитата "как работают баферс".

melnik909 Автор
07.10.2025 09:07Хреновый опыт. Понимаю, почему у вас такая реакция. Когда проходил собеседования тоже видел людей, которые хотели самоутвердится.
Только вы зря меня к их числу причислили. Моя задача проверить знание CSS, конкретного человека, чтобы дать ему фидбек. Я спокойно указываю на то, что он знает, а что упускает.
Я самоучка, знаю, что такое учиться. На беседе со мной вполне нормально говорить "не знаю". Карательных мер не будет. Наоборот я разверну эту тему и сделаю так, чтобы человеку было интересно.
Это конечно при условии, если человек интересуется. Если CSS ему не интересен, то я не мучаю. Даю фидбек "CSS не интересен. Развиваться в нем не хочет". И такой мой фидбек часто снимает вопросы, потому что нет смысла насиловать человека тем, в чем он не заинтересован.
Это как в вашем случае с оптимизацией запросов в бд. Я сделал вывод, что вам интересна эта тема. Следовательно можно развернуться ее. Также задать вопросы, которые другим покажутся херней, а вам будет интересно на них ответить.

Kwisatz
07.10.2025 09:07Только вы зря меня к их числу причислили
Не уверен что это так.
Моя задача проверить знание CSS
В моей картине мире по важности это где то на 435 месте, я выше это расписал.
Я самоучка, знаю, что такое учиться.
Я тоже, но у вас не было бы шанса со мной побеседовать.
Я сделал вывод, что вам интересна эта тема.
Интересна? Как разработка в целом.
Следовательно можно развернуться ее.
У вас на проекте нужно большую часть времени оптимизировать запросы? Вы именно это хотите спросить CTO/тимлида/архитектора?
Также задать вопросы, которые другим покажутся херней
Только если вы не скатитесь в проверка академических знаний, ака какой порядок аргументов у функции. Потому что будь вместо CSS в статье такие же вопросы по SQL, PHP, Java, JS, HTML, whatever, то это не сильно лучше.
а вам будет интересно на них ответить
Знаете я давным давно бросил квизы и прочие что где когда. Мой мозг просто не занимается бессмысленной работой.
А реакция моя обусловлена огромным количеством сомнительных риуталов в индустрии, которые еще и сдобрены щедрой порцией картинного закатывания глаз.
Kwisatz
Простите, вы это серьезно? Вам настолько делать нечего?
melnik909 Автор
Я этим 10 лет занимаюсь. Пока еще держусь
space2pacman
А вы на работе только CSS занимаетесь?
Люди, которые занимаются CSS, JS, Vue, Node, SQL такие вещи вполне могут не знать но зато могут знать как загуглить специфичный CSS селектор.
melnik909 Автор
Не только
Я как раз помогаю фулстек-разработчикам подружиться с CSS, чтобы не было страшно
accXak
И все же - зачем разработчику знать тонкие детали проекта типа "--xyu-dzigurda", которые были нахуеверчены твоим прошлым любимчиком?
melnik909 Автор
Я проведу аналогию с языками. Английский, русский, и т.д. Большинство людей в России, говорят на русском, не зная правил, и делают много ошибок. Это им не мешает решать их задачи.
Но, есть люди, кому интересно узнать об этих ошибках. Исправить их. Не из-за результата, а потому им интересно. Это их стиль жизни.
Если вы не понимаете зачем вам знать тонкие детали, это не проблема. Я 13 лет назад тоже не понимал. А потом как-то сам втянулся. В итоге понял, что делаю свою работу медленно и приходится переделывать, а потом исправил это.
Kwisatz
Синтаксис учится за неделю, причем синтаксис чего угодно. Я давно уже даже знание языков не проверяю на собеседованиях, в том нет смысла, а тут CSS... Да в эпоху ии. На базовом уровне с CSS разберется кто угодно, в остальных случаях это нужно столь редко что помнить просто нет смысла. И это я еще не учитывая, что в статье совсем какие то безумные вещи, которые даже для меня, архитектора библиотечных компонентов, выглядят дико.
dom1n1k
Справедливости ради, у автора вопросы не на синтаксис, а на понимание как оно фунциклирует. Да, местами он перегибает палку, предлагая специфические примеры, которые вряд ли встретятся в проде. Но это не про синтаксис.
Вот это одна из причин (но не единственная конечно) нынешней плачевной ситуации с версткой.
Фронтендеры относятся к цсс откровенно пренебрежительно, считая его чем-то очень простым и второстепенным. У нас тут тайпскрипт с типами, реакт с хуками, некст-нукст-нест и прочий графкуэль - одним словом, серьезные вещи. Цсс на их фоне выглядит легкой разминкой. И в общем-то это скорее правда, хотя последние ~3 года он развивается быстрее, чем когда-либо. И там много нюансов на понимание (не заучивание).
Как итог, почти все на цсс просто забили. Он очень простой и легкий, но мы в нём ни черта не понимаем. Но разобраться ваще не проблема в любой момент. Но не разобрались. Такой вот парадокс.
Kwisatz
Ага, как раз сейчас выкидываю килограммы дурно пахнущего фронтового кода, до которого у меня руки раньше не доходили. Очень большая часть фронта - ненужные приседания которые делают не пойми зачем, и с CSS - так же. Большая часть CSS легко умещается в описание некоторого кличества универсальных элементов, причем так, чтобы контейнеры управляли содержимым а не наоборот. Но вместо это имеем scoped styles по месту и прочие бэм. Извороты реально нужны, когда тебе хочется элегантно описать хитрый компонент. Большbнству же нужно KISS на лбу набить.
dom1n1k
Я согласен с тем, что автор местами действительно перегибает палку.
Но! Также вполне очевидно, что его вопросы не говорят нам, что именно вот так и нужно писать код - основной целью была проверка понимания. Я даже думаю, что во многих случаях на собесе можно засчитывать и неправильный ответ, если он сопровождался более-менее разумными рассуждениями.
Цсс такая штука, что для хорошего результата зубрежки мало, надо понимать. Ну типа как пресловутый эвент-луп - если не понимаешь принцип, ии тебе не сильно поможет.
Kwisatz
По CSS? Вы серьезно? Я не знаю как сказать... я могу на CSS магию творить, но на таком собесе я бы встал и ушел.
я не помню что такое евент луп, беглое гугление говорит мне что это подкапотность асинхронщины. Не что вроде старого доброго основного цикла while(true). Стесняюсь спросить где бы оно кому то когда то могло бы понадобится.
Как раз в изучении он отлично помогает, его можно попросить комментировать каждую строчку
RepppINTim
от JS-разработчика это сильно
Это примерно как хирург, который не помнит, где находится сердце. Можно конечно и без этого знания резать, но как-то тревожно
Kwisatz
Ой как я люблю вот эти картинные закатывания глаз, да еще с метафорой хлесткой. Не понятно правда причем тут хирург. Давайты вы все же поясните что именно вы имеете ввиду и почему считаете это важным
PS а еще у меня нет env файлов, привычной дкоументации, линтера и хаски
dom1n1k
А не надо магию. Надо надежные адаптивные лейауты с пиксель-перфект элементами. С этим, как показывает практика, у многих проблемы, потому что там зубрежки синтаксиса и классов tw недостаточно, нужно ещё понимать как оно работает.
В реальности: Отступы не как в макете и иконка не по центру? Ой да кто там заметит эти несколько пикселей... Двадцать пикселей? Ну пофиксим (подопрем костыльным марджином с меджик-намбером).
Kwisatz
Ну серьезно, это же элементарщина. Это было ка кто сложно 20 лет назад, и то половина сложностей была в чтении макета, а сейчас, когда есть фигмы и все такое...
Гнать таких бездельников, и я буду ожидать встретить таких как раз среди тех, кто назубок знает синтаксис.
Кстати забавны, именно это я упомянул два сообщения назад.
melnik909 Автор
А мне не верили, что на float легко было макет сделать! Смотрели странно
Bunyaz39
Согласен, ля многих фронтов css стал глупой частью работы, которую можно скинуть на фреймворк типа Tailwind или просто накидать стилей по месту. А когда приходит задача сделать что-то чуть сложнее стандартного компонента, начинается магия с !important и костылями
Femistoklov
Вполне допускаю существование профессии "CSS developer". Вам такой не нужен, нам такой не нужен, а кому-то может оказаться нужен. Например, для разработки библиотеки каких-то сложных анимаций или чего-то подобного.
Есть же люди, которые чисто SQL занимаются, и даже программировать на ООП-языках толком не умеют, и это никого не смущает.
difinition
Если мне на собеседовании такие вопросы будут задавать, извините, но пошлю таких работодателей и такого «руководителя» далеко и подальше. По конкретной работе что-нибудь спросите, я работать хочу, а не разгадывать кроссворды