Блог Половнёва

Объясни это

CSS тоже код, и заслуживает быть простым, красивым и понятным. Со сложными, колдовскими и невразумительными значениями CSS становится малопонятным. А количество чезахерня/час увеличивается в порядок.

Смотрите:

3

<div class="axis">
  <span class="point point--scored_3">
    3
  </span>
</div>
.axis {
  position: relative;
  height: 20px;
  width: 200px;

  font-size: .75rem;
}

.axis:before { /* стили для полоски-шкалы */ }

.point {
  position: absolute;
  left: 0;

  display: block;
  height: 20px;
  width: 20px;
  margin-left: -10px;

  background: #ff0;
  border-radius: 100%;
  line-height: 20px;
  text-align: center;
}

.point--scored_3 {
  left: 60px;
}

20px, 10px, 60px, 200px — это не магические числа, которые удалось подобрать, чтобы эта штука хоть как-то работала в IE. Это странные числа, вызывающие вопросы. Как они связаны между собой? Почему оно работает? Что тут скрыто? Что я сломаю, если поменяю везде 20px на 30px?

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

Чтобы убрать тайное знание и помочь другим ребятам разобраться в этом коде, введем объясняющую переменную:

$point-diameter: 20px;
$max-point-count: 10;

.axis {
  position: relative;
  height: $point-diameter;
  width: $max-point-count * $point-diameter;

  font-size: .75rem;
}

.point {
  position: absolute;
  left: 0;

  display: block;
  height: $point-diameter;
  width: $point-diameter;
  margin-left: -($point-diameter / 2);

  background: #ff0;
  border-radius: 100%;
  line-height: $point-diameter;
  text-align: center;
}

.point--scored_3 {
  left: 3 * $point-diameter;
}

Теперь зависимость величин от размера метки явно обозначена. Ось в длину 200px ($max-point-count * $point-diameter), чтобы вместить десять меток. Отрицательный отступ слева в половину метки нужен, чтобы отцентрировать ее. А высота строки в 20px ($point-diameter) центрирует текст метки по вертикали.

Кроме того, нам проще вносить изменения. Если окажется, что метки маленькие, а ось короткая, нам не придется исправлять кучу мест, связанных с этими размерами. Скорректируем одну переменную и вуаля!

Объясняйте странные числа, избегайте магических. Ребята, пришедшие в проект несколькими месяцами позже, будут рады такому подходу. И этим пришедшим разработчиком, может быть Альберт Эйнштейн можете быть вы.

P. S. Ещё больше постов о программировании, тестах и культуре разработки у меня в Телеграме.