display:inline-block для всех браузеров
15 ноября 2007
div{ width:100px; height:100px; background:red; margin:1px; display:-moz-inline-stack;/*Firefox 2*/ display:inline-block; /*Хорошие браузеры*/ _overflow:hidden;/*IE6, IE7*/ *zoom:1;/*включаем hasLayout для IE6, IE7*/ *display:inline;/*при hasLayout true display:inline в IE6, IE7 ведёт себя как display:inline-block*/ }
‹div›1‹/div›
‹div›2‹/div›
Комментарии RSS по email OK
Вы гений, ну или тот кто это все изобрел. Объясните, как вы про это вообще догадались? Откуда взялось это все?
display:-moz-inline-stack;/Нужно для Firefox/
display:inline-block; /Не применяется в IE и Firefox/
_overflow:hidden;/*фикс для IE6*/
zoom:1;/включаем hasLayout/
display:inline;/при hasLayout true display:inline ведёт себя как display:inline-block*/
Мне это помогло. Ура!
Я это подсмотрел у Hedger Wang. В посте есть ссылка.
-moz — это эксклюзив FireFox.
hasLayout — страшная штука от Microsoft.
Спасибо за рецепт, неплохо работает в IE 6/7 и FF 2.
Спасибо, помогло.
Передо мной стоит задача по созданию кроссбраузерной и интуитивной галереи в портфолио художника и дизайнера. Поэтому считаю нужным уделить значительное внимание теме вёрстки галереи.
В принципе обёрточный div в li и не нужен. Во всяком случае, в IE с 5.5 по 8 Beta 2, FF 3.0, Safari 3.2 и Opera 9.2-9.6 всё нормально работает и без него. Но вот в FF 2.0 при печати галереи без обёрточных div'ов получается лажа: либо блоки наползают друг на друга, либо частично не отображаются. Таким образом, приходится обёртывать содержимое элементов галереи, что увеличивает html-код.
Если кто найдёт кроссбраузерное CSS-решение данной проблемы – да опубликует его в помощь верстальщикам-рационализаторам.
Так же замечено, что при вытягивании любого списка в строчку (li { display: inline | inline-block | inline-table;} после каждого элемента образуется по пробелу. Если сделать li списка блочными (со всеми вытекающими), то пробелы упраздняются. Эффект исчезновения пробелов в IE наблюдался так же при li { zoom: 1; }. Приходится мириться с данными пробелами, устанавливая несимметричный отступ и компенсируя таким образом их ширину, либо делать их блочными и колдовать с float'ом и позиционированием.
Да мало того, окаянный FF 2.0 и тут готовит нам сюрприз: он не правильно центрирует эти пробелы в галереях, смещая их к левому элементу. Зрительно это не видно, но если применить к блоку с неизвестной шириной внутри li галереи псевдоклассы :hover/:active, то поля оного блока деформируются по ширине. Такой же эффект, в блоках, в которых помимо img находятся строчные элементы с текстом, то деформация происходит и в Safari. Приходится делать img внутри блочных span так же блочными, и центрировать их (margin: 0 auto;). Но в таком случае, IE происходит перенос строк, и вся строчно-блочная вёрстка рушится (блоки галереи располагаются вертикально). Приходится делать в условном комментарии для IE изображения галереи строчными, а в html добавлять
после . Но для остальных браузеров картинки остаются блоками, по этому приходится нивелировать влияние переноса строки внутри блока-ссылки (.block-link br { display: none; }).
Казалось бы, всё; но оказывается, что Opera < 9.5 неправильно работает с псевдокласссами :hover/:active для блока, в котором содержатся блочные элементы (если подвести курсор/нажать на пустое пространство – псевдокласс работает, но если сделать тоже над содержимым – отклик отсутствует). Приходится пользоваться CSS-хаком @media screen and (min-width: 0px), внутри которого изображения делаются строчными и восстанавливается перенос строки.
Помимо выше описанного способа с рациональной, но сложной и не валидной CSS-техникой, существует комплексное решение: продублировать классы для изображений классами для блоков ссылок, в которых они размещены. Так же придётся к блочным span внутри li галереи задавать доп. класс, в котором установлена ширина.
Разумеется, данный способ увеличивает html за счёт добавления доп. класса к каждой секции галереи и раздувает css дополнительными классами с заданой шириной для каждого типа блоков-ссылок. С другой стороны, всё обходится без сложной вёрстки с блочными img, доп. кодом в CC для IE и CSS-хаков.
Однако, я выбираю более изящный, рациональный и универсальный способ, тем более, что в прямых браузерах всё отлично работает и без CC/CSS-хаков. Рад был бы увидеть и другие способы решения проблемы с пробелами в меню и галереях.
В заключение привожу фрагменты кода Naumov-Art в качестве примера рабочего материала моих наблюдений:
Абстрактный фрагмент галереи:
Структура галереи:
Ссылки:
Блоки-ссылки:
P.S. Любые предложения по модернизации вёрстки пишете на [email protected].
Мне как-то очень понравилось как сделано вот это. Рекомендую.
О боже. Фаерфокс такое дерьмо.
пожалуй поддержу предыдущего оратора
а решение хорошее. замут серьезный :)
Столкнулся с проблемой в Opera 9.2: как-то странной обрабатывает связку display:inline-block; и position:relative; (дочерние элементы с position:absolute; куда-то пропадают).
То что с -moz-inline-stack (-moz-inline-box) есть такая же проблема знал давно, но что с оперой делать?
спасибо, очень помогла
только у меня возникла проблема. спава от блока под Firefox и Opera появляется пробел, под Explorer уго нет, подскажите пожалуйста как его убрать, margin не помогает(
.content-right-music {
background-color:#f9abdd;
width: 125px;
margin: 0px;
padding: 0px;
display: -moz-inline-stack;
display: inline-block;
vertical-align: top;
zoom: 1;
*display: inline;
}
Страничку показать можно?
вот по это ссылке:
http://www.sgustok.org/archive/demo/demo.html
там ненужный пробел между блоками content-right-music
Очень помогло, спасибо.
Sgustok Design
Прибить пробелы между div-ами.
Подскажите пожалуйста как это сделать
Sgustok Design
М… ну, чтобы было вот так:
а не так:
Все хорошо, но в некоторых браузерах или старых версиях появляются глюки. Съезжают все в один столбец...
Но статья все равно дельная.
СПАСИБО вам большое! =) Я уж хотел заново верстать макет, а все оказывается решается просто и валидно!
Впервые от вас узнал о hasLayout, множество проблем верстки сразу же решилось...
Статья - супер. Обманул всё семейство "Ослов"! Спасибо.
Спасибо все действительно работает , _overflow:hidden; спасает старые ие !!! Удачи
Спасибо!
отлично! Спасибо большое за сей приём!
Заработало!