Почему bootstrap использует float на .span вместо отображения: inline-block?
Я занимался пользовательской сеткой и хотел посмотреть, как другие люди создали свои grid-системы. Поскольку twitter bootstrap казался настолько популярным, я просмотрел его код. Теперь я задаюсь вопросом , почему они используют float? Я бы использовал display: inline-block;
элементы html имели бы display: inline;
или display: block;
, я бы постарался избежать float. Но почему-то создатели бутстрапов решили использовать поплавки. сначала я думал, что они использовали их для обратной совместимости, поскольку ie6 не поддерживает display: inline-block;
, а ie7 по умолчанию поддерживает только элементы с display: inline;
. Но ie6 более или менее из игры, и поскольку они используют micro clearfix hack, который использует * zoom: 1; для таргетинга ie6 + IMO они могут реплицировать те же display: inline-block;
с помощью *display: inline; *zoom: 1;
Итак, последний вопрос Почему плавает за отображение встроенного блока? Есть ли какие-либо проблемы, которые они пытались решить я не упоминалось выше?
Ответы
Ответ 1
В терминах семантического Интернета display: inline-block
следует использовать, когда мы хотим поместить элемент уровня блока, например <img>
в строки (строки) текста. Мы не должны использовать встроенное размещение для создания главной страницы страниц. Элемент с display: inline-block
также вступает в силу из таких свойств, как font-size
и line-height
родительского элемента. Это уменьшит точность макета страницы.
При создании основного макета страницы вам лучше привыкнуть float
вместо inline-block
.
Ответ 2
Встроенные блоки учитывают пробелы, имеют автоматическую ширину фактического содержимого и суммируются в порядке, который они имеют в HTML. Плавания не требуют, но требуют метода clearfix и основаны на элементах блока. Эти элементы имеют автоматическую ширину доступного пространства по горизонтали. Чисто семантически, inline-блоки менее семантичны, так как формат с учетом пробелов и важность порядка. Но если смотреть на это чисто функционально, то и другое не предназначено для сетки. И если бы не псевдо-CSS, у нас также был бы несемантический тег HTML clearfixe. Так что, по моему мнению, они оба не победители. Но пока нет альтернативы, когда flexbox станет обязательным в ближайшие годы.
Со встроенными блоками:
<div>
<div style="display:inline-block; width:30%;">col1
</div><div style="display:inline-block; width:70%;">col2</div>
</div>
Метки должны быть склеены/добавлены, чтобы исключить любой желоб. Контейнер div необходим для принудительного включения элементов в отдельный ряд.
С поплавками:
<div class="clearfix">
<div style="float:left; width:30%;">col1</div>
<div style="float:left; width:70%;">col2</div>
</div>
Clearfix необходим для форсирования "строки" (отклонять любые проблемы с обычными элементами потока или всплывать после операций с плавающей запятой)
Использовать ли то или другое - дело вашей цели (и вкуса). Я должен сказать, что мне нравятся inline-блоки больше, чем float, если вы знаете оба значения ширины col или используете относительный размер (%). Я думаю, что это более интуитивно и предсказуемо, чем плавающие с clearfix, исправление "для проблем, которые даже не являются проблемами, если он использовался тем, как его следует использовать. Только пробел осведомленности о встроенных блоках заставляет вас использовать какой-то прикольный html Оборотная сторона
По иронии судьбы, таблицы делают все это (и даже col-heights и вертикально выравнивание) без каких-либо проблем. Поскольку встроенные блоки должны быть расположены по порядку, здесь есть мотив для обсуждения.
Если мы говорим об отзывчивости, таблица "проигрывает" inline-блоков. Допустим, у вас есть 4 колонки на рабочем столе, и вы хотите 2 колонки на планшете и 1 на мобильном телефоне. Со встроенными блоками вы "просто" задаете cols другие размеры ширины, и они, надеюсь, будут хорошо оборачиваться (помните о полях, когда они сворачиваются). С таблицами вы связаны с реальными строками, которые могут быть довольно упрямыми. Флексбокс нужен давно и выглядит красиво. Вы можете настроить гибкий макет при определенных обстоятельствах.
Bootstrap может пригодиться, чтобы узнать, как они что-то сделали. Просто прочитайте в 3.0, они используют относительный размер сетки. Что дает проблему с вложенными сетками и выравниванием.
---- --a- ---- ----
---b------
.... ..c.
Col a нормальный родительский col. Col c - вложенное в ребенка col of b. Трудно совместить c с относительным размером, так как желоб зависит от контейнера, если вы не используете модель заполнения и рамки. Но таким образом вы теряете большую гибкость. Когда вы хотите, чтобы у col было немного фона и отступов, вы запутали систему сетки, поэтому вы должны использовать контейнер, который вы стилизуете, что бы загромождало код. Я не изучал, нашли ли они решение для этого. Я еще не Я остановился на фиксированных пикселях, но это означает, что в адаптивном дизайне вы можете иметь только несколько фиксированных значений ширины, а для всего, что связано с мобильными устройствами, использовать относительную сетку.
Ответ 3
Я предпочитаю сетчатые системы, которые используют display: inline-block;
, а не float
, например Pure ( ранее Yahoo YUI Grid), потому что они интернационализируются без дополнительных стилей; изменить направление текста вправо-влево, и макет автоматически меняет направление; Поплавки этого не делают. Поплавки также приводят к необходимости очистки и других странностей с перекрестным браузером. Любые неточности, которые inline-block
могут иметь более float
, могут быть устранены, как показывает Pure. Что касается критики, что display: inline-block;
не предназначен для использования в макете, возможно, использование display: table;
также должно быть запрещено для центрирования кросс-браузера. Я бы также поставил вопрос, действительно ли термин Semantic Web применяется к CSS, поскольку этот термин в первую очередь касается HTML и использования его элементов и атрибутов для передачи машиносчитываемого значения; вся точка CSS заключается в том, чтобы стилизовать семантический HTML так же радикально, как хотелось бы, отсюда классические сайты, такие как CSS Zen Garden.
Я говорю, что пока техника не использует ошибку, не препятствует контенту пользователям и устройствам и достаточно поддерживается, тогда это приемлемо. Нет причин, по которым нельзя использовать CSS в неортодоксальных, но поддерживаемых, так же, как и CSSPlay от Stu Nicholls.
Интересно, что Flexible Box также встроен в чистые сетки, превосходную систему макетов, совместимую с современными браузерами (≥IE10 и эквивалентные браузеры).