Comments 53
Придёт flexbox, clearing с inline-block элементами умрут сами по себе.
А реализация варианта с комментариями пробелов на к.-н. шаблонизаторе та ещё задача, это в голом html всё красиво
А реализация варианта с комментариями пробелов на к.-н. шаблонизаторе та ещё задача, это в голом html всё красиво
0
Так в шаблонизаторе можно и просто в строку вывести, как первый предложенный вариант, и тогда не будет такой проблемы. Flexbox ждем, пока ie8 и ie9 поддерживаем не получится.
0
Придёт flexbox, clearing с inline-block элементами умрут сами по себе.Не вижу связи.
Flexbox не позволяет решить задачу «поместить по горизонтали столько элементов, сколько влезет», а именно для этого чаще всего употребляется
0
Хм, вроде бы позволяет: codepen.io/d4rkr00t/pen/Cqzvo
0
пока видимо только webkit браузеры так могут
+1
И FF, и ещё кое-кто. Вот хорошая презентация от pepelsbey на эту темку http://pepelsbey.net/2013/05/flexbox-gotcha/
+1
да, да понял, не только webkit
0
flex-wrap: wrap
позволяет+3
Ну незнаю, с дополнительными комментариями это проще. Главное чтобы кодер не посчитал их лишними
<div class="parent"><!-- 600px
--><div class="child">I'm a child!</div><!--
--><div class="child">I'm a child!</div><!--
--><div class="child">I'm a child!</div><!--
--></div>
0
В идеале в html не должно быть ничего, относящегося к отображению. Хотя вопрос конкретно пробелов между тегами достаточно спорный, так как сложно различить ситуации где пробел является частью данных, которые нужно отобразить, а где используется лишь для форматирования кода. По идее это должен быть атрибут родительского тега. Либо свойство CSS по произвольному селектору, позволяющее включать и отключать игнорирование пробелов или, в более общем случае, текстовые ноды внутри контейнера. В крайнем случае какая-то новая относительная единица измерения для обозначения ширины пробела в текущем шрифте. В общем имея в виду, что в SGML-based (по крайней мере популярнех HTML и XML) языках к пробельным символам особое отношение, нужно и в css ввести особое к ним отношение.
0
Обычно проблему с float'ами решаю применяя overflow: hidden для родительского элемента: jsfiddle.net/6PDmf/
0
Да, известный способ.
Но как только внутри появляется абсолютно-позиционируемый элемент, вылезающий за границы родителя, приходится отказываться.
Но как только внутри появляется абсолютно-позиционируемый элемент, вылезающий за границы родителя, приходится отказываться.
+4
А в чем проблема? jsfiddle.net/alright/dPjND/1/
0
вот в чем jsfiddle.net/2T7AY/
+2
0
Chrome 28. Mac. Баг остался.
0
забыл из вашего примера удалить у родителя overflow:hidden;
jsfiddle.net/mdss/64eyb/1/
теперь все нормально
jsfiddle.net/mdss/64eyb/1/
теперь все нормально
0
UFO just landed and posted this here
вот в чём: jsfiddle.net/dPjND/3/
+1
Возможно, я зря это сюда пишу, т.к. сам противник очистки потока через
overflow:hidden;
, но с помощью дополнительной обёртки проблема решаема: jsfiddle.net/GruZZ/bXbe5/1/+1
Это на какой язык перевод?
-6
SASS плюс Compass легко решают все эти и многие другие проблемы.
Не совсем в тему пример: responsive галерея (попробуйте поиграть с шириной окна). sassbin.com/gist/5670191/
Не совсем в тему пример: responsive галерея (попробуйте поиграть с шириной окна). sassbin.com/gist/5670191/
0
Каким образом решают?
0
Понятно, что SASS для браузера не может предложить ничего, на что не способен CSS. Но существующие решения, которые на чистом CSS являются занозой в заднице, с SASS применяются легко и непринужденно.
Так, для очистки float'ов етсь целый арсенал решений. Я предпочитаю Toolkit:
Что касается проблемы пробелов между inline-block'ами, удалить пробелы можно средствами Haml (раз, два), если, конечно, вам посчастливилось использовать этот язык для разметки. Но по сути проблема пробелов существует, только покуда вы применяете inline-block'и для решения задач, для которых они изначально не предназначены. Я считаю, этот прием — из категории «голь на выдумки хитра». Для выстраивания элементов в ряд есть и другие способы, делать их обзор в этом комментарии считаю излишним.
Проблема понимания контекста — это вообще смешно, танцору мешают собственные шнурки. Но и тут SASS может предложить удобные инструменты.
Вот, к примеру, intrinsic ratio из того же Toolkit. Этот mixin позволяет одной строчкой (например,
Этот прием очень удобен для вставки изображений, видео и iframe'ов в responsive дизайн. Демонстрация: sassbin.com/gist/6172280/
Так, для очистки float'ов етсь целый арсенал решений. Я предпочитаю Toolkit:
#some-container
@extend %clearfix-micro
Что касается проблемы пробелов между inline-block'ами, удалить пробелы можно средствами Haml (раз, два), если, конечно, вам посчастливилось использовать этот язык для разметки. Но по сути проблема пробелов существует, только покуда вы применяете inline-block'и для решения задач, для которых они изначально не предназначены. Я считаю, этот прием — из категории «голь на выдумки хитра». Для выстраивания элементов в ряд есть и другие способы, делать их обзор в этом комментарии считаю излишним.
Проблема понимания контекста — это вообще смешно, танцору мешают собственные шнурки. Но и тут SASS может предложить удобные инструменты.
Вот, к примеру, intrinsic ratio из того же Toolkit. Этот mixin позволяет одной строчкой (например,
+intrinsic-ratio(4/3, 50%)
) задать пропорции для контейнера (в данном примере 4 к 3), имеющего динамическую ширину (в данном примере 50% от ширины родителя). Содержимое контейнера при этом растягивается на весь контейнер при помощи абсолютного позиционирования.Этот прием очень удобен для вставки изображений, видео и iframe'ов в responsive дизайн. Демонстрация: sassbin.com/gist/6172280/
+1
Обсуждаемую проблему с inline-block можно решить иначе: у родителя ставится font-size: 0px, но у детей нужно проставить первоначальный размер шрифта родителя.
-1
в статье есть такой способ и рассказаны его минусы
+1
Кстати, некоторые проблемы webkit'ов можно решить с помощью нулевого svg-шрифта и подключать его как
Пример самого шрифта:
7days.ru/bitrix/templates/7dn-main/css/fonts/w-webfont.svg
Но это, к сожалению, просто еще один не самый лучший вариант решения проблемы.
font:0/0 'null', a;
.Пример самого шрифта:
7days.ru/bitrix/templates/7dn-main/css/fonts/w-webfont.svg
@font-face {
font-family: "null";
font-style: normal;
font-weight: 400;
src: url('fonts/w-webfont.svg#null') format("svg");
}
Но это, к сожалению, просто еще один не самый лучший вариант решения проблемы.
0
Я буду читать статью до конца, прежде чем написать комментарий
Я буду читать статью до конца, прежде чем написать комментарий
Я буду читать статью до конца, прежде чем написать комментарий
Я буду читать статью до конца, прежде чем написать комментарий
Я буду читать статью до конца, прежде чем написать комментарий
+3
UFO just landed and posted this here
Не являюсь frond-end экспертом, хотя стараюсь прокачиваться в этом направлении.
Взял за привычку в кастомных стилях ставить следующий css-селектор
Волнует как раз position. Логика такая, что relative элемент без смещения находится на том же месте, что и static, но при этом допускает абсолютное позиционирование дочерних элементов, да и, если появляется такая необходимость, сам может быть смещен, что, в общем-то, очень удобно.
Внимание, вопрос: есть ли здесь какой-либо подводный камень, и надо ли мне дать по рукам за то, что так делаю?
Взял за привычку в кастомных стилях ставить следующий css-селектор
* {
margin: 0;
padding: 0;
position: relative;
box-sizing: border-box;
}
Волнует как раз position. Логика такая, что relative элемент без смещения находится на том же месте, что и static, но при этом допускает абсолютное позиционирование дочерних элементов, да и, если появляется такая необходимость, сам может быть смещен, что, в общем-то, очень удобно.
Внимание, вопрос: есть ли здесь какой-либо подводный камень, и надо ли мне дать по рукам за то, что так делаю?
-2
Ну вы рано или поздно просто огребете, что ваш абсолютно спозиционированный элемент начнет вычислять свои координаты относительно первого же предка. Это не так чтобы проблема (на первый взгляд), но неочевидно.
Еще понаогребаете с z-index'ами, их у вас будет чуть ли не на каждый элемент, который следует за родительским блоком абсолютно спозиционированной ноды.
Еще селекторы * — очень медленные и ускорить их вообще нечем.
Вдобавок ко всему это совсем неочевидно. Все равно как если бы в вашем проекте все классы реализовывали бы некий интерфейс IMyInteface, в котором есть какой-то метод, вообще мало что имеющий общего с большей частью реализаций.
Еще понаогребаете с z-index'ами, их у вас будет чуть ли не на каждый элемент, который следует за родительским блоком абсолютно спозиционированной ноды.
Еще селекторы * — очень медленные и ускорить их вообще нечем.
Вдобавок ко всему это совсем неочевидно. Все равно как если бы в вашем проекте все классы реализовывали бы некий интерфейс IMyInteface, в котором есть какой-то метод, вообще мало что имеющий общего с большей частью реализаций.
+2
UFO just landed and posted this here
You might get up in arms about the universal * selector. Apparently you’ve heard its slow. Firstly, it’s not. It is as fast as h1 as a selector. It can be slow when you specifically use it like .foo > *, so don’t do that. Aside from that, you are not allowed to care about the performance of * unless you concatenate all your javascript, have it at the bottom, minify your css and js, gzip all your assets, and losslessly compress all your images.
www.paulirish.com/2012/box-sizing-border-box-ftw/
0
Минуса за вопрос, куда катится этот мир?
0
Спасибо, полезная статья.
<grammar-nazi> Правда, излишняя любовь автора к запятым немного ухудшает читаемость ;) </grammar-nazi>
<grammar-nazi> Правда, излишняя любовь автора к запятым немного ухудшает читаемость ;) </grammar-nazi>
С тех пор, css, прошел долгий путь.
Давайте, лучше, попробуем, что нибудь еще.
Позиционирование, начинающим, дается с большим трудом.
0
про отступы у inline-блок не знал, спасибо ) (как раз недавно столкнулся)
0
По поводу inline-block элементов и пробела между ними.
А именно про способ: «отрицательный margin»
Нам не нужно удалять маргин, у первого элемента
И более того это работает в IE 6/7/8 если указывать <!DOCTYPE >
Нужно просто использовать селектор +
Сам я такой метод никогда не использую
Но раз уж автор разбирает проблемы CSS странно, что он указал способ с очищением для :first-of-type
А именно про способ: «отрицательный margin»
Еще один подход к решению задачи, очень похож на предыдущий, но с использование отрицательного отступа. Главный его недостаток он не работает в IE 6/7. Плюс нам необходимо убрать отступ с первого элемента, что бы они ровно встали внутри нашего контейнера.
.child { margin-left: -0.25em; } .child:first-of-type { margin-left: 0; }
Нам не нужно удалять маргин, у первого элемента
И более того это работает в IE 6/7/8 если указывать <!DOCTYPE >
Нужно просто использовать селектор +
.child + .child {
margin-left: -0.25em;
}
Сам я такой метод никогда не использую
Но раз уж автор разбирает проблемы CSS странно, что он указал способ с очищением для :first-of-type
+1
Sign up to leave a comment.
Проблемы CSS. Часть 1