Comments 147
И 1920px браузера это слишком вы хорошо взяли. Где полоса прокрутки? Где рамки окна?
Не наезд, не подумайте, просто вопросы.
Вопрос про полосу прокрутки и рамку не поняла…
По поводу рамок:
>Это означает, что на ширине браузера 1920рх (которую я принимаю как отправную точку, поскольку для этой ширины чаще всего создается дизайн сайта) отступ блока с одной стороны будет 15рх.
Не берите отправной точкой ширину браузера. Ширина браузера = ширине монитора (если человек развернул его на весь экран), однако, в зависимости от системы (а на линуксе еще и DE) мы имеем различные декораторы окон системы. Например на Windows это 2-3 пикселя. На Linux 0-4. Эти области будут заняты рамкой самого окна, развернутого на весь экран, и уберутся только при полноэкранном режиме (F11).
Далее из кракозябр идет полоса прокрутки. На виндоузе ширина рабочей области, в которую помещается контент, равняется 1903 пикселя. На моем стареньком ноутбуке с убунтой под мате — 1910.
Для более точной работы берите через javascript размер области viewport и расчитывайте с него. Лично мне хватает простого document.documentElement.clientWidth
Про минимальный шрифт вы не правы. Ваш минимальный шрифт дает разрядку блокам. Если минималка будет больше чем вы ожидаете — блок уползет на следующую строку, а вы будете искать где у вас косяк в margin (я неделю искал в чем проблема по незнанию). Выход простой — блок комментария начинающийся сразу после элемента и идущий ровно до следующего. Он немного дубовый. но всеже.
В блоке с классом .box размер шрифта обнуляется. По этому, кстати, и размер шрифта в rem))
P.S. Сам так делаю. Ибо
блок комментария начинающийся сразу после элемента и идущий ровно до следующегоне даёт выровнять блоки по ширине, используя text-align: justify;
Без ( html { font-size: 62.5% } и layout в rem )
И em в тех местах где без него нельзя.
Пиксели остаются только в пределах media деклараций.
Вопрос к тем кто меня заминусовал, вы серьезно так отстали от жизни?
Если вам нужен fallback для пикселей, есть же инструменты автоматизации!
Не все верстают текстовый и/или легко тянущийся контент, а вы слишком категоричны в суждениях, вот и схватили минусов, а не из-за того, что кто-то «отстал от жизни».
Как пользователь задаст 1rem === 11px? если он полезет ручками в CSS то он сам себе злой буратино
reset.css использовать не нужно
* {} — очень плохо, он вам не нужен
normalize.css — он вам тоже не нужен, пропишите дефолтные свойства, только тем тегам, что вы реально используете в проекте и то, как вам нужно, чтоб потом не переопределять.
Следующий момент, инлайн-блоки плохо годятся на роль сетки. Настоящая сетка — это разделение по горизонтали И по вертикали.
На текущий момент делить по вертикали могут только display: flex;
(ну и таблицы, привет old school)
По поводу того, что инлайн-блоки плохо годятся на роль сетки, не могу с вами согласится. Инлайн-блоки выравниваются и по-горизонтали, и по-вертикали. По крайней мере лучше выравниваются, чем флоаты, на которых работают почти все html-фреймвоки.
сделайте реальную сетку:
1) header
2) main (тут section & aside)
3) footer
шапка должна быть сверху.
в самом низу окна браузера подвал.
между шапкой и подвалом блок main, в котором справа расположен aside, который располагается по всей высоте экрана.
* {} — очень плохо
Почему?
Ну то есть это действительно не самый быстрый селектор на свете, но в общем ряду пожирателей ресурсов и врагов перфоманса он стоит где-то на сороковом месте.
У нее есть и достоинство — надежность. Завтра появится новый тег и он точно ничего не поломает.
По производительности там разница настолько копеечная, что видна разве что только в микроскоп. Хотя можно искусственно сгенерировать такой пример, где это станет заметно, но к реальной практике он не будет иметь никакого отношения.
Обычно люди, которые громче всех возмущаются медленностью звездочки, почему-то игнорируют кучу других, гораздо более серьезных, неоптимальностей.
Вот сколько у вас в документе тегов — он применится ко всем. И это ресурсоемко, в отличие от конкретно заданного класса.
Вопрос — зачем к элементам a, span, b, div применять margin:0;padding:0 когда у них итак это дефолтные значения.
.block {display: table;}
@media all and (max-width: 1000px) {
.block {display: block;}
}
Зато выравнивать произвольное содержимое по вертикали таблицы пока умеют даже лучше флексбоксов:)
Кстати, вот не тестировал таблицы при writing-mode: tb-* (или как он теперь называется) — наверное, так можно и флексы с flex-direction:column зафолбэчить?
речь про отступы между инлайн-блоками.
чтобы их не было — ставится font-size:0 родительскому блоку и нет никаких отступов.
Уточните, пожалуйста, где вы столкнулись с подобным поведением? Просто font-size: 0
это очень известный и используемый хак. Если бы всё работало именно так, как вы говорите, у таких людей треть сайтов бы кривились. Я пот полез даже поискал где и как такое можно задать в Chrome. Так вот, по дефолту там стоит 6px
. И это не мешает использованию font-size: 0
. Правда возможно мешает использованию числе >0 но <6
Проверил в Firefox. font-size: 0 работает. Установил ограничение в настройках в 10px, и правда 1-9px не работают. А 0 работает. Текст пропадает. Приведите, пожалуйста, реальные примеры.
Стало быть Firefox вы просто так привели? Ну спасибо. По сабжу:
- Firefox 52
- Safari 10
- Opera 12
Везде font-size: 0
убирает текст. Качать свежую оперу для теста лень.
Настройку то я задал правильную (Preferences — Advanced — Fonts — Minimum font size (pixels). По дефолту стояла 1px. Но вот повторно воспроизвести уже не получается. Более того, в прошлый раз у меня стрекозу не перекосило (незабываемое зрелище), а сейчас перекосило. Вероятно я что-то сделал не так. Так что с аргументом в пользу древней оперы соглашусь.
Вы точно проверяете font-size: 0? У меня и в Safari, и в Chrome всё работает. Ставлю 0 — надпись пропадает. Ставлю >0, но <лимита, надпись размером с лимит.
Вы знаете, я кажется понял о чём вы. Вы несколько раз столкнулись с тем, что font-size: 0 (как и line-height: 0) не привёл к нужному результату в каких то условиях (браузер, ос, устройство и пр.). Я охотно в это верю. Вёрстка на этих двух костылях изначально очень шаткая, даже более шаткая, чем на float-ах. А учитывая, что мобильные браузеры в целом любят издеваться над размером шрифта, пытаясь сделать текст доступнее для пользователя… В общем верю.
НО! Скорее всего, всё это не имеет ни малейшего отношения к настройке минимального размера шрифта в браузере. Просто какая-либо мелочь из рендер движка сыграла на 1px больше-меньше и всё поехало.
Поверьте это была именно опция минимального шрифта. Для полной радости я ее понизил до нуля и у меня успешно убрались отступы.
Не спорю, я может быть преувеличиваю значимость данного косяка, но если верстаешь под кучу устройств — надо держать такое в голове. Например последнее такое я лечил именно потому что оно всплыло на ведроиде 4.
Я сталкивался с подобными проблемами когда использовал встроенный в браузер zoom страницы. Немного в другую стороны погрешности вычислений layout-а страницы сыграют и все тонкоподстроенные inline-блоки разлетелись.
Мы не будем гадать, сколько у этого браузера минималка, мы скажем 0 и он сам нужное применит.
Буквально два дня назад переделал верстку присланную дизайнером где был перенос между li-строк и стоял хак с font-size:0. Хром на компе блок сдвигал на 2 пикселя, руководствуясь своим правилам, хром на андроиде (вроде там хром?) сдвигал блок на следующую строку.
вы им (андроид 4) задали 10px и ваши 2px пропали?
мне тут на днях попадалось «чудо»
.className1.className2.className3.className4 .ul {}
ужас.
А зависимости это норм… У меня бывает и по 9 каскадов, которые отталкиваются от одного id элемента.
В лисе и хроме font-size: 0; срабатывает нормально.
вот есть http://colourgarden.net/avalanche/ я не использовал, но думаю в проектах использовать можно если нужнен grid с bem и inline-block
display:inline-block
раздражаеи именно из-за надобности делать нулевой размер шрифта у контейнера. Проще на flexbox перейти.
Даже во времена расцвета inline-block'ов старался избегать этих методов в реальных проектах (применял наверное раза 2, когда совсем деваться некуда было), а уж сегодня-то вообще нет никаких здравых причин это использовать :)
Решение примера на bootstrap: https://jsfiddle.net/babenkoma/soz98d87/2/
Решение примера на моей сетке: https://jsfiddle.net/babenkoma/a3un7vzw/
Отличается от моей сетки только тем, что аналогичные классы содержат чуть меньше свойств и отсутствием box. Хотя если нужны отступы между элементами, то не всегда без box можно обойтись.
У вас в коде есть момент который вы никак не описали в статье: inline-block
учитывает пробельные симоволы между элементами (в даном случае между .cell
). И это влияет на геометрию. Поэтому когда вы задаете ширину в 20% — на самом деле это 20% + пробел. И пять элементов в ряд не станут. Для этого нужно обнулять размер шрифта родителю (что вы и сделали в коде). Этот момент очень критичен для инлайновых сеток, его стоило бы пояснить детально.
Одновременно это хак еще и самый большой минус таких сеток. Потому что никак нельзя использовать наследование размера шрифта и em
для колонок.
Если вам нужно поддерживать древние браузеры, то в сетке на инлайнах есть смысл, скорее всего em
и rem
там тоже не поддерживаются, поэтому минус хака с font-size
не критичен.
Костыли, которые завязаны на разметке даже не рассматриваю. Это хрупко и ненадужно
Это неудобно. Но гораздо надёжнее (именно в данном случае), чем font-size. Серьёзно. Увы.
Удалить пробелы надежнее??? Или может не закрыть тег надежнее? Вы серьезно?
Именно удалить пробелы ― надёжнее. Да, я серьёзно. Когда HTML токенайзером разбирается на кусочки в AST он не находит text-ой Node-ы между тегами, и соответственно никакие настройки браузера, никакие тонкости ОС, никакие особенности браузера, пустую область тут уже не породят. Как там было у классиков? "Нет человека — нет проблемы". Так и тут "нет space-а, нет поехавших блоков".
А что вам в этом так удивляет? Вы когда-нибудь писали парсер для HTML? Или ковырялись в результате работы какого-нибудь cherio или whacko? Мне приходилось и то и другое делать. По сути есть 3 вида нод: теги, комментарии и тексты. И тексты обрабатываются очень по разному в зависимости от display-я окружения.
Парсеры не писал и в AST деревьях не ковырялся. Это не мешает мне понимать, почему данный подход работает и почему он существует.
Но сетка, которая зависит от закрытого/незакрытого тега — априори прохой варинт.
А если мне по семантике не подходит использовать li
. Что тогда?
@ROBsoer, я рассуждал не о незакрытых <li/>, а о промежутках. Да и с тем, что вёрстка на inline-блоках весьма склизкая, я не могу не согласиться.
При малейшей возможности лучше использовать что-то менее костыльное, а такое оставлять разве что на самый крайний фолбэк.
можно, а еще можно отрицательны margin
. Но я сознательно упустил эти способы, так как они зависят от окружающих условий
http://joxi.ru/E2p17VGh946MGA
http://joxi.ru/YmEal8Xu0Bozwm
Нужно повозится, что бы настроить. А я свой вариант за 3 мин сделала
Есть ещё такие способы: https://css-tricks.com/fighting-the-space-between-inline-block-elements/ но каждый из них несёт свои проблемы.
Я нашёл вроде бы безпроблемный:
ul {
letter-spacing: -1em;
}
ul li {
letter-spacing: 0;
}
Есть еще более обстоятельная статья на русском: http://css-live.ru/articles/zagadochnye-otstupy-mezhdu-inlajn-blokami.html.
Совсем беспроблемных способов "обнуления" пробелов через CSS нет. Вариант с word-spacing: -0.43em
, некогда чуть ли не канонический и включенный в кучу уважаемых проектов типа YUI-фреймворка, тоже был беспроблемным… до обновления Хрома до 26-й версии, когда пофиксили баг, на котором он держался. А то, что сейчас пробельные символы при очень большом по модулю отрицательных letter-spacing
по-разному «скукоживаются» в зависимости от того, между обычными буквами они или между инлайн-блоками — на чем (пока) держится предложенный хак — как по мне, очень уж смахивает на баг...
Но зачем все эти страдания в 2018 году, когда задача действительно беспроблемно и куда более гибко повсеместно решается флексбоксами?
cell cell--none cell--md8 cell--sm24 cell--center
В названиях классов в вёрстке не должно быть никаких размеров и расположений.
Ну вот назовёте вы класс cell-color-blue, пропишите его в двадцати разных файлах, а потом приходит дизайнер и говорит — ребяты, нужно красный. Тут то и начнётся.
Клссс нужно именовать вида cell-date, то есть, по содержимому. Тогда сменить цвет — это один раз изменить в css.
Про размеры и расположение вообще ужас.
И препроцессоры тут не причём. Они используются для другого.
Сетка на inline-block действительно хороша. Большинство тут восклицает о том, что пробельный символ будет мешать и фиксы с размером шрифта не идеальны. Так и есть. Но ведь достаточно просто сжимать html? Если сейчас ещё кто-то не пользуется препроцессорами для html, то уж минификаторы то смогут освоить. И пробельные символы больше никогда не помешают. На фрилансе, конечно, приходится объяснять заказчику, что минификация обязательна. Но из моей практики — никто не возражал и даже радовался тому, что html-ка весит на один-два килобайта меньше.
Единственное, что меня коробит — почему все до сих пор пользуются фиксированным количеством колонок? Один небольшой mixin и можно организовать сетку на дробях. С классами вида: .col-1-2, .col-2-10. Несомненно, классов будет чуть больше, но в целях универсальности и расширяемости это круто, когда ты можешь задать любые пропорции. Частенько радовали ребята, которые брали бутстраповскую сетку на 16 колонок и пытались через неё организовать три равных блока по ширине после того, как в дизайне неожиданно они появились. Извращения с вложениями колонок друг в друга или дополнительные классы с паддингами. Сплошное веселье.
Я пользуюсь чем-то подобным:
.row-el
display: block
> [class^='col-']
display: inline-block
vertical-align: top
&.row-middle
> [class^='col-']
vertical-align: middle
.row-el
@for $a from 1 through $column-count
@for $b from 1 through $a
@if $a != $b or ($a == 1 and $b == 1)
$result: 100% / $a * $b
> .col-#{$b}-#{$a}
width: $result
1. При этом глубже разбираешься в проблеме, больше узнаешь, короче, полезно для работы и саморазвития
2. Мне лично удобнее использовать то, что сама написала, поскольку я знаю как оно работает и знаю где нужно изменить в случае чего, чем чужой код, который как правило нужно использовать именно так, как написано в документации
2. Но тогда вы обрекаете себя на поддержку, а, публикуя такую библиотеку, обрекаете еще и ее потенциальных пользователей на большой геморрой, когда вы поддерживать ее перестанете.
Лучший велосипед — несуществующий.
Новая сетка на inline-block: описание, пример использования, плюсы и минусы