trevoga_su
@trevoga_su

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

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

я не спорю в полезности border-box, но какие могут быть аргументы в пользу того, что бы обозначить все элементы так?
  • Вопрос задан
  • 9021 просмотр
Пригласить эксперта
Ответы на вопрос 5
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;}, а в плагине его не переопределить - верстка поплывет. Если пишете для себя особого смысла нет.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы