|
|
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Имеется блок-список, внутри элементы списка оформлены как [inline-block] Если задать этим элементам [overflow: hidden], то между строками появляется паразитный интервал На первый взгляд, дело в [line-height]. Но если элементам списка задать [line-height: 1], то проблема сохраняется, хотя высота строки при этом уменьшается до высоты текста (размера шрифта). Что это за интервал такой аномальный ? https://jsfiddle.net/mmp4o090/2/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 16:14 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, https://stackoverflow.com/questions/17768922/how-to-remove-unwanted-vertical-spacing-between-divs ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 16:37 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 16:38 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 16:39 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
DeanWinchesterCyrax_02, https://stackoverflow.com/questions/17768922/how-to-remove-unwanted-vertical-spacing-between-divs Да, помогает задание списку [vertical-align: top] или [vertical-align: bottom] Проблема имеет место при [vertical-align: baseline] (по умолчанию) и [vertical-align: middle] Но здесь бы ещё логическое объяснение озвучить: 1 .Почему [li / vertical-align] влияет на вертикальное позиционирование [inline-block]-элементов списка, когда и элементы списка, и сам <ul> имеют [line-height], равный размеру шрифта ? В этом случае высота строки и базовая линия у <ul> и <li> совпадают. Следовательно, что [vertical-align: top], что [vertical-align: baseline] - разницы быть не должно и дополнительных интервалов быть не должно 2 . Почему для [inline-block]-элементов [line-height] определяет собственную (внутреннюю) высоту этих элементов (без учёта полей и границ) ? И только за счёт собственной высоты влияет на высоту строки, в которой элементы расположены. Согласно теории, должен определять высоту строки, в которой расположены эти элементы, но не менять внутреннюю высоту этих элементов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 18:22 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
3 . Почему в сабжевом примере проблема имеет место только при [overflow: hidden] ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.10.2017, 18:23 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
авторДа, помогает задание списку [vertical-align: top] или [vertical-align: bottom]Поправлюсь: не списку, а элементам списка <li> ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2017, 13:55 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
На все 3 вопроса ответы получил. Связано это с особенностями построения строчного контекста форматирования в CSS, а тажке с порядком определения базовой линии [inline-block]-элементов. Если кому интересно, могу объяснить. Если же всем пофигу, не буду тратить время. Судя по активности в теме, всем пофигу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2017, 15:52 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, просто это такое специфическое использование, что всем просто нечего сказать. я б не против узнать, если не в лом - напиши ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.10.2017, 20:51 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
авторпросто это такое специфическое использование, что всем просто нечего сказатьНа самом деле причина сабжевой проблемы достаточно фундаментальна. И приводит к проблемам во вполне себе рядовых ситуациях (создаёт проблемы "на пустом месте"). Например: 1 . Если внутри абзаца указать <span> и задать ему какой-нибудь [font-style], то появится тот же самый "аномальный" интервал между строками. Видимая высота строки будет выше [line-height]. И [overflow: visible] здесь не поможет 2 . Если элемент маркированного списка содержит ссылку (или любой другой строчный элемент) и этой ссылке (элементу) задать [display: inline-block], то маркер окажется на уровне последней строки, а не первой P.S . Вообще, во всех строках присутствует ещё кое-кто. Невидимый, неслышимый. И это не пробел. Некий фантом, который наводит ужас на верстальщиков... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2017, 01:30 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, интересно, надо запомнить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.10.2017, 22:06 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, line-height : 1; - это что за единица измерения? Если указать ul { line-height: 10px; } li { line-height: 16px; } то можно исправить ситуацию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.10.2017, 02:19 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
авторline-height : 1; - это что за единица измерения?Безразмерный коэффициент от размера шрифта (похож на em , но имеет пару особенностей) авторЕсли указать ul { line-height: 10px; } li { line-height: 16px; } то можно исправить ситуацию. Этот способ-подгонка от лукавого, т.к. принудительным уменьшением [line-height] списка <ul> мы обрезаем содержимое строк, но не уменьшаем (не нормализуем) отрендеренный (видимый) [line-height] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 13:54 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, Нет никаких подгонок от лукавого, нужно оперировать чёткими размерами и определениями/стандартами. Сабжевая "проблема" - это не проблема, потому что одинаково рендерится в несколькизх браузерах, следавательно нужно учитывать все применяемые стили, влияющие на высоту строки (в том числе и [padding] Поскольку стили по-умолчанию наследуются от родителя, то нет никакой проблемы сделать чётко то, что требуется, а не фантазировать непонятными образами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 14:07 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02 P.S . Вообще, во всех строках присутствует ещё кое-кто. Невидимый, неслышимый. И это не пробел. Некий фантом, который наводит ужас на верстальщиков...Чистая фантазия, пичины которой просты - Вы не понимаете, как у вас работает вёрстка. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 14:10 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, Результат рендеринга предсказуем на 100%, а что Вы ещё хотели? Вы не можете для всей строки задать [overflow: hidden], так как это строка, Вы указываете для отдельных элементов строки стиль [overflow: hidden] Этим вы не уменьшаете высоту строки. Или отказывайтесь от [overflow: hidden], или разруливайте с помощью разных значений [line-height], или применяйте [float:left], и т.д. и т.п. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 15:41 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
авторНет никаких подгонок от лукавого, нужно оперировать чёткими размерами и определениями/стандартами. Подгонка от лукавого есть. Она же заплатка. И заключается она в том, что уменьшая [line-height] списка <ul>, за счёт наследования этого свойства вы уменьшаете [line-height] того невидимого "фантома" , о котором я говорил. И начиная с некоторого значения [line-height] этот "фантом" совместно с <li> (который имеет собственный [line-height]) уже не создаёт того "аномального" интервала между строками, о котором говорится в сабже. Уже то обстоятельство, что [line-height] списка <ul> нужно подбирать , говорит о том, что применяемый метод - чистой воды заплатка . Что касается рекомендации " оперировать чёткими размерами ", то эта рекомендация является ошибочной. Поскольку в современной адаптивной вёрстке в большинстве случаев более корректным является использование относительных единиц: em , % , коэффициенты для [line-height] и пр. Касательно " нужно оперировать чёткими ... определениями/стандартами ". Не знаю, о каких определениях и стандартах вы здесь говорите применительно к сабжевой проблеме, но остаётся фактом то, что вы так и не объяснили причину появления "аномального" интервала между строками в сабжевом примере . авторСабжевая "проблема" - это не проблема, потому что одинаково рендерится в нескольких браузерах, следавательно нужно учитывать все применяемые стили, влияющие на высоту строки (в том числе и [padding]Сабжевая проблема заключается не в том, что приведённый пример по разному рендерится в браузерах, а в том, что при одинаковых [line-height] всех элементов списка появляется дополнительный интервал между строками. У всех элементов списка поля и границы нулевые. [line-height], задаваемый списку <ul>, сам по себе (непосредственно) не уменьшает отрендеренную (видимую) высоту строки, поскольку применительно к [block] и [inline-block]-элементам свойство [line-height] работает как минимальный [line-height]. Посему остаётся непонятным, какие ещё стили, влияющие на высоту строки, вы предлагете учитывать. авторВы не можете для всей строки задать [overflow: hidden], так как это строка. Вы указываете для отдельных элементов строки стиль [overflow: hidden]. Этим вы не уменьшаете высоту строки.В сабжевом примере [overflow: hidden] задан не для того, чтобы уменьшить высоту строки, а потому, что этим свойством <li> должны обладать в реальной задаче. Но при [overflow: hidden], как обнаружилось, появляется сабжевая проблема с "аномальным" интервалом. Вот и приведёт в сабже пример, который воспроизводит обнаруженную проблему. авторИли отказывайтесь от [overflow: hidden], или разруливайте с помощью разных значений [line-height], или применяйте [float:left], и т.д. и т.п. Отказ от [overflow: hidden], подгонка [line-height] списка <ul> и использование [float] - это всё варианты обхода проблемы, но не её решения. А для решения проблемы нужно знать особенности построения строчного контекста форматирования в CSS, а тажке порядок определения базовой линии [inline-block]-элементов, о чём я писал выше. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 19:55 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
авторПоскольку стили по-умолчанию наследуются от родителя, то нет никакой проблемы сделать чётко то, что требуется, а не фантазировать непонятными образами. авторНет никаких подгонок от лукавого, нужно оперировать чёткими размерами и определениями/стандартами.авторРезультат рендеринга предсказуем на 100%, а что Вы ещё хотели?Это вы о чём ? Американцы тоже утверждали, что у них есть неопровержимые доказательства, но... эти доказательства они никому не предоставят, поскольку это военная тайна. Если для вас результат предсказуем на 100%, изложите логику появления этого "аномального" интервала. А до тех пор у читателей сабжа будут возникать нездоровые ассоциации с тем поляком-болтуном, который в передаче "Место встречи" участвует... На фоне того, что мне известна причина появления этого интервала , о чём я написал пару дней назад, и того, что вы так и не объяснили причину , ваши вот эти слова выглядят неадекватно: авторЧистая фантазия, пичины которой просты - Вы не понимаете, как у вас работает вёрстка ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 20:05 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02, могу только повторить, что Вы указываете для отдельных элементов строки стиль [overflow: hidden] Вот поэтому и появляются отступы, так как между строками всегда есть и был интервал. Вот вариант универсальнее: ul { line-height: 1px; } /* line-height: 0; */ li { line-height: 1; } Что мешает это использовать? В чём проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.10.2017, 23:54 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
авторВы указываете для отдельных элементов строки стиль [overflow: hidden] Вот поэтому и появляются отступы, так как между строками всегда есть и был интервал.Если под "интервалом между строками" вы понимаете видимое расстояние между буквами и прочим видимым содержимым строк, то это самое расстояние входит в саму строку. И нет там никакого интервала между строками. Сабжевая проблема касается вопроса, почему высота строк списка превышает высоту элементов списка. В частности, вашу логику опровергают следующие факты: 1 . Если элементам списка задать [vertical-align: top], то даже при [overflow: hidden] никакого лишнего интервала не будет 2 . Если элементам списка задать [display: inline] , то по-прежнему никакого лишнего интервала не будет В данном случае причина появления дополнительного визуального интервала - в том, что базовая линия [inline-block]-элементов находится на разном уровне при [overflow: visible] и [overflow: hidden] авторВот вариант универсальнее: ul { line-height: 1px; } /* line-height: 0; */ li { line-height: 1; } Что мешает это использовать? В чём проблема? В данном случае дополнительный видимый интервал исчезнет. Почему - вы не знаете, так ? Ведь [line-height] применительно к блочным элементам, коим является <ul>, определяет только минимальный [line-height], а конечный [line-height] определяется высотой содержимого (именно поэтому высота строки не уменьшается меньше, чем высота элементов списка). В любом случае это заплатка, которая имеет потенциальные проблемы. Если в списке некоторому элементу не будет явно задан [line-height], то он унаследует малый [line-height] от самого списка со всем вытекающими. И вообще, это семантически неверно - задавать крайне малый [line-height], чтобы получить некоторый нормальный [line-height]... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 00:55 |
|
||
|
Аномальный интервал между строками [inline-block] при [overflow: hidden]
|
|||
|---|---|---|---|
|
#18+
Cyrax_02В данном случае причина появления дополнительного визуального интервала - в том, что базовая линия [inline-block]-элементов находится на разном уровне при [overflow: visible] и [overflow: hidden] [vertical-align: middle] смотрели? Отступ меньше, но тем не менее есть, в отличие от явной привязки [top] или [bottom] Cyrax_02авторВот вариант универсальнее: ul { line-height: 1px; } /* line-height: 0; */ li { line-height: 1; } Что мешает это использовать? В чём проблема? В данном случае дополнительный видимый интервал исчезнет. Почему - вы не знаете, так ?Знаю. Потому что, при отсутствии явной привязки к верху или к низу строки блочный элемент [display: inline-block] увеличивает высоту строки родительского элемента, вне зависимости от её заданной высоты. Это-же очевидно. Эта особенность позиционирования блочных элементов (не только [inline-block], а любых, плюс рамок таблиц, если не изменяет память) известна давно. Проблема проявляется не всегда, точно сейчас не помню, но возможно связана с особенностью точного вычисления положения элемента с учётом строчного контента. Сейчас хоть одинаково рендерят, несколько лет назад было значительно хуже - кто в лес кто по дрова, бывало приходилось извращаться, чтобы одинаковый пиксел-перфект соблюдать везде. Почему браузеры именно так рендерят? Вопрос к разработчикам браузеров - видимо есть какая-то действительно фундаментальная проблема, из-за которой создаётся эээ... «технологический» отступ )) Глубоко в эту тему лезть и фантазировать о причинах не вижу смысла, так как вопрос решается довольно просто различными способами, а 100% универсальных решений не бывает и они нафиг не нужны. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.10.2017, 02:35 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=39530143&tid=1444437]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
170ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
55ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 282ms |

| 0 / 0 |

Извините, этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
... ля, ля, ля ...