Дисплей: flex; vs calc(); представление

Сегодня я пришел в дискуссию, где мне интересно, какой самый эффективный способ иметь двух div рядом друг с другом.

С одной стороны, мне нравится использовать display:flex;, с другой стороны есть возможность использовать calc(), причина в том, что наш div имеет отступы, и нам нужно уменьшить ширину с помощью дополнения. Корпус:

<div class='container'>
 <div class='inner'></div>
 <div class='inner'></div>
</div>

Оба должны быть на 50% ширины. По умолчанию css:

* {
 -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
 -moz-box-sizing: border-box;    /* Firefox, other Gecko */
 box-sizing: border-box;         /* Opera/IE 8+ */
}
.container {
 height: 100%;
 width: 100%;
}
.inner {
 width: 50%;
 padding: 20px;
}

Способ display:flex; будет дополнительным:

.container {
 display: -webkit-box;
 display: -moz-box;
 display: -ms-flexbox;
 display: -webkit-flex;
 display: flex;
 flex-wrap: nowrap;
 align-items: stretch;
 align-content: stretch;
}

calc():

.inner {
 width: calc(100% - 40px);
 display: inline-block;
}

или

.inner {
 width: calc(100% - 40px);
 float: left;
}

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

Что было бы рекомендовано использовать? Что больше производительности?

Я уже нашел статью о том, что производительность уже значительно увеличена. Ссылка

Ответ 1

Я провел простой тест из любопытства и, похоже, не было никаких различий в производительности между float + calc vs flex, за исключением IE, который намного медленнее, чем FF и Chrome.

Из связанная статья:

Новый flexbox код имеет намного меньше многопроходных кодовых файлов. Вы все еще могут легко удалять многопроходные кодеки (например, flex-align: растяжка часто 2-х прохода). В общем, это должно быть много быстрее в общем случае, но вы можете построить случай, когда его одинаково медленно.

Тем не менее, если вам это удастся, регулярный макет блока (non-float), обычно будет таким же быстрым или быстрым, чем новый flexbox, поскольку его всегда один проход. Но новый flexbox должен быть быстрее, чем использовать таблиц или написания собственного кода компоновки JS-base.

Я уверен, что calc() делает компоновку блока также несколько проходов:)


LE: была ошибка в Firefox, которая делала переполнения очень медленными, когда у вас было 4-5 вложенных flexboxes, но оно было исправлено в последние версии (37 +).