О чистоте кода CSS

162
17 марта 2019, 16:10

В большинстве руководств, рекомендуют всем родительским елементам задавать классы, но при этом рекомендуют использовать не более двух селекторов для изменения стилей. Если у нас есть код

<nav class="main-navigation">
  <ul class="navigation-list">
    <li><a href="#">Ссылка 1</a></li>
    <li><a href="#">Ссылка 2</a></li>
    <li><a href="#">Ссылка 3</a></li>
  </ul>
</nav>

То как лучше обращатся к елементу списка?

.main-navigation li

или

.navigation-list li

И то же самое с сылками

.main-navigation a

или

.navigation-list a
Answer 1

Разницы нет. Дело в удобстве и правильной практики. Как насчет такого варианта по БЭМу?

<nav class="navigation">
  <ul class="navigation__list">
    <li class="navigation__item"><a class="navigation__link href="#">Ссылка 1</a></li>
    <li class="navigation__item"><a class="navigation__link href="#">Ссылка 2</a></li>
    <li class="navigation__item"><a class="navigation__link href="#">Ссылка 3</a></li>
  </ul>
</nav>

Если у вас появится нужда в дальнейшем поменять цвет одной ссылки, можно будет добавить модификатор, например:

.navigation__link_red

Answer 2

Организация CSS кода это очень индивидуальное, поскольку это зависит от многих факторов. С популярными подходами в организации CSS можете ознакомиться по ссылке, хорошо описаны подходы и их недостатки.

рекомендуют всем родительским елементам задавать классы, но при этом рекомендуют использовать не более двух селекторов для изменения стилей

Эта рекомендация дана вам для того что бы вам было проще переопределять стили для новых элементов, поскольку у новичков часто возникают проблемы с определением "веса" селектора, что бы было понятнее прочитайте эту статью.

Если вы только начали изучение CSS, то вам пока не стоит заморачиватся с организацией кода, посколько любая методология решает определённые проблемы при работе с проектами различной сложности, с которыми вы еще долгое время не столкнётесь. Например тот же БЭМ которые вам рекомендуют, был создан компанией Yandex для компонентного подхода к веб-разработке и хорошо подходит для больших команд разработчиков т.к имеет четкие правила к формированию селекторов. Пока вы не работает с большими проектами лучше потратить время на изучение самого CSS.

Если же вы уже опытный разработчик и хотите улучшить свою организацию кода, тогда попробуйте различные методологии на какой-то типовой задаче и определите с какой из них Вам удобней работать.

Answer 3

В вашем случае я бы рекомендовал '.navigation-list a'. Но вообще надо еще ориентироваться на тот факт какие блоки переиспользуются, а какие нет. Использовать '.main-navigation a' небезопасно. потому что если кто то из разработчиков проекта использует '.navigation-list a', он переопределит ваши стили. Опасность в себе несет только использование '.navigation-list li a' в дальнейшем т.к имеет больше веса, но само по себе использование такой цепочки селекторов некорректно т.к в данном случае li можно пренебречь - других селекторов кроме li внутри ul быть не может.

Answer 4

Организация кода CSS - часто субъективное явление. Я бы рекомендовал давать родителю достаточно описывающее функцию название класса, а дочерним элементам добавлять через дефис слово, описывающее элемент. К примеру

<div class="card"> 
  <p class="card-paragraph"></p> 
  <a class="card-link"></a> 
  <img class="card-picture"> 
 </div>

Ну а вообще все сводится к тому, чтобы класс достаточно понятно описывал функцию элемента. Очень хорошо можно организовать код в SCSS с такими классами. Если пишите на чистом CSS - лучше всего писать стили к родителю, а под ним в последовательности, сходной с последовательностью кода в HTML, писать стили к дочерним элементам. Удачи

Answer 5

Я предпочитаю древовидный подход, особенно с препроценссорами у вас остается дерево, аналогично блоку верстки, что визуально упрощает читабельность кода.

На примере scss:

.main-navigation {
    background: wheat;
    .navigation-list {
        list-style: none;
        li {
            display: block;
            a {
                text-decoration: none;
                &:hover,
                &.active {
                    color: red;
                }
            }
        }
    }
}

Рекомендация с максимум двумя селекторами обычно описывается как более шустрый метод в плане производительности. Но в мире современного фронта это настолько слабо ресурсо используемый процесс, что считаю не имеет смысла придерживаться этого правила.

READ ALSO
Как правильно задать viewport

Как правильно задать viewport

Нужно чтоб страница до ширины 1200px уменьшалась пропорционально, а меньше этой ширины становилась адаптивной, как это можно реализовать?

188
Колонки таблицы равной ширины

Колонки таблицы равной ширины

Я создаю таблицу и выставляю в процентах ширину каждого столбцаДля примера, второй столбец должен иметь ширину в 30%, четвертый — 10%

172
Ошибка в html коде сайта

Ошибка в html коде сайта

Как устранить ошибку? Unchecked runtimelastError while running storage

178
Настройка адаптива сайта [закрыт]

Настройка адаптива сайта [закрыт]

Как сделать чтобы сайт до ширины экрана 1200 сужался пропорционально, а меньше 1200 уже работал адаптив

171