Задать вопрос
trevoga_su
@trevoga_su

Зачем указывать box-sizing для всех элементов?

Часто вижу конструкцию типа
* {
    box-sizing: border-box;
}

я не спорю в полезности border-box, но какие могут быть аргументы в пользу того, что бы обозначить все элементы так?
  • Вопрос задан
  • 9459 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 6
Petroveg
@Petroveg
Миром правят маленькие с#@&ки
Никаких внятных аргументов нет.
Update: А ещё бить бы по рукам любителям универсального селектора без ограничения области его применения. Кто писал хотя бы один модуль, тот поймёт.
Ответ написан
fr_end
@fr_end
Frontend разработчик
Потому что по умолчанию стоит модель content-box, и она убога.
Хотя для того, чтобы например его можно было переопределить в плагинах, предпочитаю такой способ
html {
  box-sizing: border-box;
}
*, *:before, *:after {
  box-sizing: inherit;
}


UPDATE: Решил посмотреть, как влияет применение универсального селектора на производительность.
Взял статью frontender.info/css-performance-revisited-selector..., и оттуда код
<script type="text/javascript">
    ;(function TimeThisMother() {
        window.onload = function(){
            setTimeout(function(){
            var t = performance.timing;
                alert("Speed of selection is: " + (t.loadEventEnd — t.responseEnd) + " milliseconds");
            }, 0);
        };
    })();
</script>

Также использовал 1000 идентичных кусков данной разметки
<div class="tagDiv wrap1">
  <div class="tagDiv layer1" data-div="layer1">
    <div class="tagDiv layer2">
      <ul class="tagUl">
        <li class="tagLi"><b class="tagB"><a href="/" class="tagA link" data-select="link">Select</a></b></li>
      </ul>
    </div>
  </div>
</div>

Проверял 2 способа: с пустым css файлом, и с CSS кодом
html {
  box-sizing: border-box;
}
*, *:before, *:after {
  box-sizing: inherit;
}

Пока только на последнем хроме. Запускал страницу по 50 раз и вычислил средние значения:
В первом случае, без css кода, это оказалось 124ms, во втором - 121ms.
Понятно, что это статистическая погрешность, поэтому пришел к выводу, что разницы никакой нет.
Если предложите другие варианты тестирования - буду очень рад.
Ответ написан
andykov
@andykov
Shit happens
Соглашусь с Евгением, аргументов нет, ровно как и с такой конструкцией
* {
    margin: 0;
    padding: 0;
}

Универсальный селектор я никогда не использовал и не буду, считаю это плохим тоном.
Ответ написан
@sanphir
Когда важна попиксельная точность. Когда ты ставишь div'у width =100, что бы это было 100 а не 100+borderwidth
Ответ написан
@kedavra
code berserker
Обычно так делают с расшариваемым кодом. Если у вас на странице будет * {box-sizing: padding-box;}, а в плагине его не переопределить - верстка поплывет. Если пишете для себя особого смысла нет.
Ответ написан
Комментировать
Задавать всем элементам сайта box-sizing: border-box; — это хорошая практика, и вот почему:

1.Предсказуемость размеров: По умолчанию, в CSS используется значение content-box, что означает, что ширина и высота элемента включают только содержимое, без учета отступов (padding) и границ (border). Это может привести к неожиданным размерам элементов, особенно когда вы добавляете отступы или границы. border-box изменяет это поведение, так что ширина и высота включают содержимое, отступы и границы, что делает размеры элементов более предсказуемыми.

2.Упрощение расчетов: С border-box вам не нужно постоянно пересчитывать размеры элементов, когда вы добавляете отступы или границы. Это упрощает процесс верстки и уменьшает вероятность ошибок.

3.Совместимость с фреймворками: Многие CSS-фреймворки, такие как Bootstrap, уже используют box-sizing: border-box; для своих элементов, что делает его использование в вашем проекте более согласованным.

4.Поддержка браузерами: Все современные браузеры поддерживают box-sizing: border-box;, так что это не должно вызвать проблем с совместимостью.

Вот как можно применить это правило ко всем элементам:
*,
*::before,
*::after {
  box-sizing: border-box;
}


Этот код устанавливает box-sizing: border-box; для всех элементов и их псевдоэлементов, что делает его универсальным и эффективным решением для вашего проекта.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы