Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

inline-элементы

2.2K
02 октября 2007 года
e1vin
153 / / 04.06.2006
Интересует такой вопрос: есть ли возможность с помощью CSS принудительно перенести inline-элемент на новую строку? Т.е., например, чтобы не вставляя лишние <br> заставить все элементы <label> внутри формы отображаться с новой строки, при этом оставив им "display: inline"?
832
03 октября 2007 года
Carpus
390 / / 14.04.2005
Возможно, поможет display: inline-block; clear: both;
2.2K
03 октября 2007 года
e1vin
153 / / 04.06.2006
Не помогло. Ни IE7, ни FF 2.0.0.3 на правило "clear: both" для inline-block элементов вообще никак не отреагировали, что, в общем-то, вполне закономерно :(

Другая вещь меня убивает больше - в FF не работает ширина для inline-block элементов. Он ее просто игнорирует. IE6/7, Opera - все ок. В файрфоксе - никак. Осталось только в Safari проверить и в каком-нить Konquerer'е...

Ваши соображения?
832
03 октября 2007 года
Carpus
390 / / 14.04.2005
Ну какие тут могут быть соображения? Решайте сами, так ли нужны переносы у inline элементов. В конце-концов -- <br /> тоже элемент :).
2.2K
03 октября 2007 года
e1vin
153 / / 04.06.2006
Да, наверняка к <br>ам и придем.
12
04 октября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: e1vin
Интересует такой вопрос: есть ли возможность с помощью CSS принудительно перенести inline-элемент на новую строку?


Нет. Нужна новая строка используй элементы уровня блока. Р, DIV и продобные.

12
04 октября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: e1vin

Другая вещь меня убивает больше - в FF не работает ширина для inline-block элементов.


И совершенно правильно.
http://shaelf.ru/book/css2/visudet.html#propdef-width

Цитата:

Область применения: все элементы, кроме [COLOR="Red"]незамещаемых элементов строкового уровня[/COLOR], строк таблиц и групп строк

2.2K
04 октября 2007 года
e1vin
153 / / 04.06.2006
Цитата: alekciy
И совершенно правильно.
http://shaelf.ru/book/css2/visudet.html#propdef-width



А на мой взгляд неправильно. Сначала цитаты из спецификации:

Цитата:
'width'
Значение: <length> | <percentage> | auto | inherit
Начальное: auto
Применяется: ко всем элементам, кроме незамещаемых инлайн-элементов, рядов таблиц и групп рядов
Наследуется: нет
Процентное: относительно ширины содержащего блока
Носитель: визуальный

Это свойство специфицирует ширину содержимого боксов, генерируемых элементами уровня блока и замещаемыми элементами.

Это свойство не применяется к незамещаемым элементам инлайн-уровня. Ширина боксов незамещаемых инлайн-элементов, это ширина отображаемого внутри них содержимого (до любого относительного смещения дочерних элементов). Напоминаем, что инлайн-боксы всплывают внутри строчных боксов. Ширина строчных боксов задаётся их содержащим блоком, Но может быть уменьшена при наличии поплавков.



Цитата:
10.3.1 Инлайн, незамещаемые элементы

Свойство 'width' не применяется. Специфицированное значение 'auto' для 'left', 'right', 'margin-left' или 'margin-right' становится вычисленным значением '0'.



Совершенно верно. Т.е. мы не можем указать ширину для элемента, span, например. А для элемента input запросто, т.к. он является замещаемым (точно так же, как и для любого img).

Цитата:
10.3.2 Инлайн, замещаемые элементы

Специфицированное значение 'auto' для 'left', 'right', 'margin-left' или 'margin-right' становится вычисленным значением '0'. Специфицированное значение 'auto' для 'width' даёт внутреннюю ширину элемента как вычисленное значение.



А что же такое замещаемые элементы?

Цитата:
Замещаемый элемент
Элемент, для которого форматировщик CSS знает только внутренние размеры. В HTML элементы IMG, INPUT, TEXTAREA, SELECT и OBJECT можно привести в качестве примеров таких элементов. Например, содержимое элемента IMG часто замещается изображением, на которое указывает атрибут "src". CSS не определяет, как находить внутренние размеры



Но все-таки идем дальше - к значению "inline-block" для свойства display. Видимо, все дело в том, что в спецификации CSS2 оно не оговорено (и FF его не поддерживает). Однако в спецификации CSS 2.1 написано:

Цитата:
9.2.4 The 'display' property

'display'
Value: inline | block | list-item | run-in | inline-block | table | inline-table | table-row-group | table-header-group | table-footer-group | table-row | table-column-group | table-column | table-cell | table-caption | none | inherit
Initial: inline
Applies to: all elements
Inherited: no
Percentages: N/A
Media: all
Computed value: see text

The values of this property have the following meanings:

..skipped..

inline-block
This value causes an element to generate a block box, which itself is flowed as a single inline box, similar to a replaced element. The inside of an inline-block is formatted as a block box, and the element itself is formatted as an inline replaced element.



Переводим: "Это значение заставляет элемент генерировать блочный контейнер, который ведет себя как контейнер уровня строки, подобно замещаемому элементу. Внутренняя часть inline-block'а форматриуется как блочный контейнер, а сам элемент (внешние размеры) форматируется как замещаемый элемент.

Отсюда делаю несколько выводов:
1. Во-первых, задавать свойство "inline-block" для input'ов - не нужно и излишне, т.к. они и так являются замещаемыми элементами. Т.е., получается, что им и так можно явно задать ширину и это должно работать (оно и работает, проверял в FF, IE6/7).
2. Firefox не полностью поддерживает CSS 2.1 и свойство display: inline-block напрочь игнорирует (хотя его поддерживают, как я уже писал выше, Opera, IE6/7) - оно даже отсутствует в списке стилей элемента, которые показывает Firebug.

И все-таки очень интересно, будет ли это пофиксено и когда. Потому что, как мы уже разобрались, поведение это неправильное.

12
04 октября 2007 года
alekciy
3.0K / / 13.12.2005
Написал много и вроде со ссылками, только вот толку то? CSS2 совершенно не регламентирует, какие элементы из HTML относятся к уровня блока, а какие к строковому уровню. Более того, если бы ты внимательно читал спецу, то обратил бы внимание на "Initial: inline" и "Applies to: all elements".
Прочти: "Приложение А. Пример таблицы стилей для HTML 4.0" в CSS2 спеце. В частности там и речи нет о INPUT, кроме того:
Цитата:

Это приложение [COLOR="Red"]не является нормативным[/COLOR], а носит только информативный характер.



В том же FireBug мог бы посмотреть и убедиться, что для input свойство display равно inline. Более того, так дело обстоит у всех браузеров. И это правильно.

Так что ни чего FF не игнорирует, и все там правильно.

А уж из фразы:

Цитата:

1. Во-первых, задавать свойство "inline-block" для input'ов - не нужно и излишне, т.к. они и так являются замещаемыми элементами. Т.е., получается, что им и так можно явно задать ширину и это должно работать (оно и работает, проверял в FF, IE6/7).


я понимаю что ты не совсем видимо хорошо представляешь себе модель работы CSS либо же выражаешься очень уж неправильно. Ибо для inline элементов width не должно работать.

Поэтому наверное стоит тебе перечитать CSS2 еще раз особо главы 8-10.

2.2K
06 октября 2007 года
e1vin
153 / / 04.06.2006
alekciy, по-моему, мы разговариваем либо о разных вещах, либо вообще на разных языках. Бог с ним, с инлайном, но Вы почему-то упорно игнорируете описание значения inline-block для свойства display. Я же его не выдумал.

Вот Вам цитата из книги Эрика Мейера "CSS - каскадные таблицы стилей. Подробное руководство" на тему inline-block:

Цитата:
Строчно-блочные элементы
В соответствии с гибридным внешним видом имени значения, inline-block, строчно-блочные элементы и в самом деле представляют собой гибрид блочных и строковых элементов. Это значение свойства display введено в CSS 2.1.

Строчно-блочный элемент ведет себя по отношению к другим элементам и содержимому как строковый блок. Иначе говоря, он компонуется в строку текста, как это происходило бы с изображением, и, кстати, строчно-блочные элементы форматируются в строке как замещаемый элемент (e1vin: об этом я и писал в предыдущем сообщении). Это означает, что низ строчно-блочного элемента по умолчанию располагается на базовой линии строки текста и не разрывает строку.

Содержимое строчно-блочного элемента форматируется так же, как и для блочных элементов. К нему применяются свойства width и height, как это происходит для любого блочного или замещаемого строкового элемента, и эти свойства увеличивают высоту строки, если их значение превышает эти величины для остального содержимого.



Дальше следуют примеры с пояснениями и подтверждениями того, что это работает. Надеюсь, если не к моим сентенциям, так хотя бы к тексту пера столь известного и авторитетного автора Вы прислушаетесь :)

Из этой цитаты можно сделать 2 важных вывода:

1. Не для всех элементов строчного уровня нельзя задавать ширину. Для незамещаемых - нельзя, разумеется. Для замещаемых (классические картинки, постоянно используемые Мейером в примерах, например; те же самые элементы формы, входящие в набор стандартных, гхм, "графических примитивов ОС" и прочие флэш-апплеты) - как раз-таки можно.

2. Свойство inline-block существует не только в моем мозгу и в "приложении информативного характера", а реально может использоваться и должно поддерживаться браузерами. Что, повторюсь, IE и Opera делают (щас, включу мак, проверю в сафари), а FF - отказыватся.

Теперь Ваши высказывания:

Цитата:
В том же FireBug мог бы посмотреть и убедиться, что для input свойство display равно inline. Более того, так дело обстоит у всех браузеров. И это правильно.



Разумеется, правильно. Но почему же тогда задание ширины для любого input'а работает, причем работает даже в IE5? ;) Проверьте. ([COLOR="Silver"]Правильный ответ: "потому что это замещаемые элементы"[/COLOR]).

Цитата:
я понимаю что ты не совсем видимо хорошо представляешь себе модель работы CSS либо же выражаешься очень уж неправильно. Ибо для inline элементов width не должно работать.



А по-моему, Вы просто неправильно или невнимательно прочитали мою фразу. Я же написал inline-block, а не inline!

С нетерпением жду Вашего ответа.

2.2K
06 октября 2007 года
e1vin
153 / / 04.06.2006
Проверил в Safari 2.0.4, width для inline-block элементов прекрасно работает...
12
06 октября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: e1vin
alekciy, по-моему, мы разговариваем либо о разных вещах, либо вообще на разных языках.


Видимо да. В своей работе лично я привык опираться на нормативные документы + учет того, что не всегда им следует разработчики. Чем руководствуешься ты не очень понятно.

Цитата: e1vin

Бог с ним, с инлайном, но Вы почему-то упорно игнорируете описание значения inline-block для свойства display. Я же его не выдумал.


Ну вот теперь и разобрались. Если ты обратил внимание на те ссылки, что я приводил, то должен понимает, что я веду разговор в контексте CSS версии 2. Ты же упорно пытаешь вести диалог и при этом не указываешь, что говоришь о CSS[COLOR="Red"]2.1[/COLOR].
Отсюда и недопонимание.

12
06 октября 2007 года
alekciy
3.0K / / 13.12.2005
Цитата: e1vin

А по-моему, Вы просто неправильно или невнимательно прочитали мою фразу. Я же написал inline-block, а не inline!


Я очень внимательно прочел. Поэтому и отсылал тебе к спецификации в виду того, что в CSS2.0 inline-block нет.

12
06 октября 2007 года
alekciy
3.0K / / 13.12.2005
Теперь, когда мы разобрались меж собой информация по теме для размышления:
http://alekciy.ru/test/anchor.php?url=http%253A%252F%252Fdeveloper.mozilla.org%252Fen%252Fdocs%252FCSS%253Adisplay&text=%253Cb%253Einline-block%253C%252Fb%253E%2526nbsp%253B%253A#anchor
http://alekciy.ru/test/anchor.php?url=http%253A%252F%252Fdeveloper.mozilla.org%252Fen%252Fdocs%252FMozilla_CSS_support_chart&text=Mozilla%2520does%2520not%2520support#anchor
Думаю на этом можно считать тему исчерпаной. FF просто не поддерживает данное значение для этого селектора. Изменить/повлиять на это ни как нельзя HTML+CSS средствами.
2.2K
06 октября 2007 года
e1vin
153 / / 04.06.2006
Теперь разобрались. Про ревизии спецификации понятно, я и сам на них же опираюсь. Дело-то в том, что даже древнючий IE6 это свойство поддерживает... %)

Ладно, бог с ним, спасибо за поддержку и интересную беседу ;) Тема закрыта :)
36K
30 января 2008 года
denis909
1 / / 30.01.2008
А почему бы для получения искомого результата не заставить браузер обрабатывать блочные элементы как Inline? Насколько понятно из формулировки задачи требуется например вывести Inline элементы столбиком без использования тега <br> Простой пример такого элемента теги <a> - ссылки. Например ссылки в меню. Я правильно понял проблему? Установив display: block; мы получаем нужный результат, но активное поле ссылки идет дальше текста. Напишем float: left; clear: both; - в FF и Opera уже все работает, а IE длинные ссылки мешает в кучу. Добавим white-space: nowrap; и Have Fun!

Проверено в FF2, IE7, Opera7

---
http://denis909.spb.ru
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог