Как я могу заставить DIV вести себя как IMG для использования в качестве спрайта CSS?

Я написал код, который автоматически создает спрайты CSS на основе тегов IMG на странице и заменяет их на DIV с (как я думал) подходящим CSS для размещения изображения спрайта в качестве фона, позволяющего просвечивать соответствующую часть - проблема в что я не могу заставить DIV вести себя как замена для IMG.

Если я оставлю значение 'display' по умолчанию, установленное на 'block', тогда, если исходный IMG был расположен в конце некоторого текста, заменяющий DIV перейдет к следующей строке после текста (что, конечно, я ожидал чего-то с отображением: блок делать).

Если я изменю «отображение» на встроенный, то DIV останется в той же строке, что и текст, но игнорирует «ширину» и «высоту», которые я установил, и сворачивается. Я попытался разместить   внутри DIV, но тогда он занимает достаточно ширины, чтобы содержать nbsp.

Я пробовал поэкспериментировать с настройкой отображения всех возможных значений (в том числе «непонятных», таких как «table-row», «run-in», «compact» и т. д.), Но все безуспешно. Можно ли вообще создать DIV с тем же поведением макета, что и IMG?

Я открыт для чего-то более сложного, чем просто один DIV, однако я пробовал там очевидные вещи (один DIV внутри другого, где внутренний DIV настроен на display: block с внешним набором для display: inline), но у меня нет Я тоже не нашел там комбинации, которая работает.

Всегда есть определенные вещи, которые я могу сделать помимо замененного IMG / DIV, чтобы получить желаемый макет, но моя цель - иметь общий механизм авто-CSS-спрайтов, который работает независимо от остальной части HTML.

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
12
0
10 255
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Display: inline-block должен работать в этой ситуации. Вы пробовали?

Пришлось нам отобразить: -moz-inline-block; дисплей: встроенный блок; чтобы заставить его работать в обоих браузерах, но это помогло.

John 11.11.2008 04:40

У изображений есть эквивалент display: inline-block. Первоначально это не было включено в CSS, но было добавлено частично, чтобы устранить тот факт, что изображения ведут себя подобным образом.

Проблема в том, что все браузеры только сейчас его поддерживают. Если вы хотите поддерживать браузеры годичной давности, вы застряли.

Другое, но не такое замечательное решение - это «плавающий» div ("float: left").

inline-block : Introduced in CSS 2.1. This causes the element to generate a block element box that will be flowed with surrounding content as if it were an single inline box (behaving much like a replaced element [meaning an image] would.).

Исходный код Центр разработчиков Mozilla

Ответ принят как подходящий

display: inline-block; пробовали?

возможно, вам также придется использовать display: -moz-inline-block; для firefox2

Другие вопросы по теме