
Наталия Короткова

Писать CSS просто
#games .header .top .topmenu ul.secondary li a {}
#games div.with-blockquote .block-quote .body-text {}
#games #stepcontent-free.ipadbox {}
#games .left-content-box1 #stepcontent-free.iphonebox {}
#directory-listing#profile {}
#directory-listing-inquiries h4 {}
#directory.contains-box span.verification-link-number {}
#directory#directory-settings ul li span.bullet-directory-listing {}
#directory#directory-not-listed dl dd .city .city-ico {}
#directory-listing-students table.students td.link_body {}
#student-game-activity div.base_row .level-text div.number {}
Это не только
перевод макета в код
Архитектура CSS
- масштабируемость
- предсказуемое поведение
- повторное использование
- упрощение поддержки кода
Недооценная проблема —
быстрые фиксы





Stylelint
- поиск ошибок
- автоматический код-ревью
- обмен хорошими практиками
Препроцессоры
- не решают проблемы архитектуры
- потеря контроля над содержанием (nesting, mixins, extend, циклы и условия)
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled.active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled.focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled:active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled:focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled:hover,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled],
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled].active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled].focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled]:active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled]:focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled]:hover,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled.active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled.focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled:active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled:focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled:hover,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled],
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled].active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled].focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled]:active,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled]:focus,
.main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled]:hover,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled.active,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled.focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled:active,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled:focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled:hover,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled],
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled].active,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled].focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled]:active,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled]:focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled]:hover,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled.active,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled.focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled:active,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled:focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled:hover,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled],
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled].active,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled].focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled]:active,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled]:focus,
.main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled]:hover,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled.active,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled.focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled:active,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled:focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled:hover,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled],
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled].active,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled].focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled]:active,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled]:focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled]:hover,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled.active,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled.focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled:active,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled:focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled:hover,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled],
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled].active,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled].focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled]:active,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled]:focus,
.main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled]:hover,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled.active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled.focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled:active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled:focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.disabled:hover,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled],
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled].active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled].focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled]:active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled]:focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button[disabled]:hover,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled.active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled.focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled:active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled:focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.disabled:hover,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled],
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled].active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled].focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled]:active,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled]:focus,
.payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button[disabled]:hover,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled.active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled.focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled:active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled:focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.disabled:hover,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled],
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled].active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled].focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled]:active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled]:focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button[disabled]:hover,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled.active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled.focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled:active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled:focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.disabled:hover,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled],
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled].active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled].focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled]:active,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled]:focus,
.payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button[disabled]:hover,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled.active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled.focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled:active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled:focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.disabled:hover,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled],
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled].active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled].focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled]:active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled]:focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button[disabled]:hover,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled.active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled.focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled:active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled:focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.disabled:hover,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled],
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled].active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled].focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled]:active,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled]:focus,
.payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button[disabled]:hover,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.active,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button.focus,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button:active,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button:focus,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action .continue-button button:hover,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.active,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.focus,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button:active,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button:focus,
fieldset[disabled] .main.checkout .checkout-row .card.checkout-details .details-holder .action-block .continue-button button:hover,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.active,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button.focus,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button:active,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button:focus,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action .continue-button button:hover,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.active,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button.focus,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button:active,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button:focus,
fieldset[disabled] .main.checkout .checkout-row .card.contact-details .details-holder .action-block .continue-button button:hover,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.active,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button.focus,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button:active,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button:focus,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action .continue-button button:hover,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.active,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button.focus,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button:active,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button:focus,
fieldset[disabled] .main.checkout .checkout-row .card.payment-details .details-holder .action-block .continue-button button:hover,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button.focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button:active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button:focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action .continue-button button:hover,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button.focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button:active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button:focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.checkout-details .details-holder .action-block .continue-button button:hover,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button.focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button:active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button:focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action .continue-button button:hover,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button.focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button:active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button:focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.contact-details .details-holder .action-block .continue-button button:hover,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button.focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button:active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button:focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action .continue-button button:hover,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button.focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button:active,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button:focus,
fieldset[disabled] .payment-details-vouchers .checkout-row .card.payment-details .details-holder .action-block .continue-button button:hover {
border-color: #F1C933
}
Работа браузера
.block div .link {}
.link
div
div
div
div
.link
.link
html
.block
.block
.link
div
div
div
div
div
Bootstrap

глобальных
селекторов
> 600
Слабая архитектура
усложнит разработку
Война селекторов
Глобальное пространство имен
.link {
color: green;
}
Каскад и специфичность
.block .link {
color: yellow;
}

.block div > .link {
color: green;
}
.block .link {
color: yellow;
}
.block a.link {
color: red;
}
.block div .link {
color: blue;
}
1)
2)
3)
4)
Специфичность
#nav input[name=tabs]:nth-of-type(1):checked
~ .tabs > div:after {}
- количество ID в селекторе
- количество классов, атрибутов и псевдоклассов
- количество имён элементов и псевдоэлементов
Специфичность
#nav input[name=tabs]:first-child:checked
~ .tabs > div:after {}
#nav
.tabs
[name=tabs]
:last-child
:checked
input
div
:after

#block {}
.block .link {}
a.link {}
Снижение веса


.block {}
.block-link {}
.link {}
[id="block"] {}
.link.link.link.link {}
Хаки

Делайте селекторы
понятнее и быстрее,
выбрасывайте лишнее
!important
служебные классы
виджеты


postcss-safe-important
!important не исправит
плохой CSS
Наследование
body {
font-family: Arial, sans-serif;
font-size: 14px;
}
/*
p {
font-family: Arial, sans-serif;
font-size: 14px;
}
*/
- не всегда предсказуемо
- не все свойства наследуются, подробнее в таблице
- inherit
- initial
- unset
- revert
.wrapper {
min-height: 100px;
}
.block {
min-height: inherit;
}
Inherit
.block-link {
color: inherit;
}
.header .block-link {
color: pink;
}
.footer .block-link {
color: blue;
}
Inherit
.block {
font-weight: 700;
}
.block a {
font-weight: initial;
}
Initial
.block {
all: initial;
}
Initial
.block {
all: unset;
}
Unset
свойство наследуется — inherit
иначе initial
unset сохранит нативное
наследование,
в отличии от initial
* {
all: unset;
}
Современный сброс стилей?
.block {
all: revert;
}
Revert
свойство наследуется — inherit
иначе до браузерных стилей
div {
display: revert;
}
/*
div {
display: block;
}
*/
div {
display: unset;
}
/*
div {
display: inline;
}
*/
Изоляция
Локальный сброс стилей

.block {
all: initial;
}
postcss-initial
Как это работает
.block {
position: initial;
}
.block {
position: static;
position: initial;
}
.block {
all: initial;
}
.block {
animation: none 0s ease 0s 1 normal none running;
backface-visibility: visible;
background: transparent none repeat 0 0 / auto auto padding-box border-box scroll;
border: medium none currentColor;
border-collapse: separate;
border-image: none;
border-radius: 0;
border-spacing: 0;
bottom: auto;
box-shadow: none;
box-sizing: content-box;
caption-side: top;
clear: none;
clip: auto;
color: #000;
columns: auto;
column-count: auto;
column-fill: balance;
column-gap: normal;
column-rule: medium none currentColor;
column-span: 1;
column-width: auto;
content: normal;
counter-increment: none;
counter-reset: none;
cursor: auto;
direction: ltr;
display: inline;
empty-cells: show;
float: none;
font-family: serif;
font-size: medium;
font-style: normal;
font-variant: normal;
font-weight: normal;
font-stretch: normal;
line-height: normal;
height: auto;
hyphens: none;
left: auto;
letter-spacing: normal;
list-style: disc outside none;
margin: 0;
max-height: none;
max-width: none;
min-height: 0;
min-width: 0;
opacity: 1;
orphans: 2;
outline: medium none invert;
overflow: visible;
overflow-x: visible;
overflow-y: visible;
padding: 0;
page-break-after: auto;
page-break-before: auto;
page-break-inside: auto;
perspective: none;
perspective-origin: 50% 50%;
position: static;
right: auto;
tab-size: 8;
table-layout: auto;
text-align: left;
text-align-last: auto;
text-decoration: none;
text-indent: 0;
text-shadow: none;
text-transform: none;
top: auto;
transform: none;
transform-origin: 50% 50% 0;
transform-style: flat;
transition: none 0s ease 0s;
unicode-bidi: normal;
vertical-align: baseline;
visibility: visible;
white-space: normal;
widows: 2;
width: auto;
word-spacing: normal;
z-index: auto;
all: initial;
}
+ gzip
Наследуйте,
когда это нужно

- БЭМ именование
- CSS Modules
- CSS-in-JS
Субъективное
Есть мнение

Лапша в CSS
By Nataliya Karatkova
Лапша в CSS
Немного плохого CSS там, немного тут. Проект подрос и отследить «откуда вообще оно взялось» стало невозможно. Внутри команды нет «камикадзе», желающих брать таски по вёрстке. Пришло время подробно разобраться с главными механизмами CSS и писать простой в поддержке код.
- 2,507