Как мне получить div, чтобы автоматически подстраиваться под размер фона, который я для него установил, не устанавливая для него конкретную высоту (или минимальную высоту)?
css
html
background
height
JohnIdol
источник
источник
img
равно собираетесь вставить свою разметку, почему бы просто не скрыть фактическое<img>
и не заморачиваться с тем илиbackground-image
другим? Какое преимущество в том, чтобы делать вещи таким образом?background-image
том, что он может использовать режимы наложения CSS , аimg
не может.Есть очень хороший и крутой способ заставить фоновое изображение работать как
img
элемент, чтобы оноheight
автоматически настраивало его . Вам нужно знать изображениеwidth
иheight
соотношение. Установитеheight
для контейнера значение 0 и установитеpadding-top
процентное соотношение в зависимости от отношения изображения.Это будет выглядеть следующим образом:
Вы только что получили фоновое изображение с автоматической высотой, которая будет работать как элемент img. Вот рабочий прототип (вы можете изменить размер и проверить высоту div): http://jsfiddle.net/TPEFn/2/
источник
@mixin div-same-size-as-background-img($url) { background-image: url($url); background-size: contain; background-repeat: no-repeat; width: 100%; height: 0; padding-top: percentage(image-height($url) / image-width($url)); }
position:relative
div и поместить еще один div сposition:absolute; top:0; bottom:0; left:0; right:0;
setНет способа автоматически настроить размер фонового изображения с помощью CSS.
Вы можете взломать его, измерив фоновое изображение на сервере, а затем применив эти атрибуты к div, как уже упоминали другие.
Вы также можете взломать некоторый javascript для изменения размера div в зависимости от размера изображения (после того, как изображение было загружено) - это в основном то же самое.
Если вам нужен ваш div для автоматической подгонки изображения, я могу спросить, почему бы вам просто не вставить
<img>
тег в ваш div?источник
src
объектimg
с медиа-запросами, но вы можете изменить файл, используемый в качестве фонового изображения с медиа-запросами.Этот ответ похож на другие, но в целом лучший для большинства приложений. Вы должны знать размер изображения перед рукой, что вы обычно делаете. Это позволит вам добавлять наложенный текст, заголовки и т. Д. Без отрицательного заполнения или абсолютного позиционирования изображения. Они должны установить% отступа в соответствии с соотношением сторон изображения, как показано в примере ниже. Я использовал этот ответ и по существу просто добавил фоновое изображение.
источник
Может быть, это может помочь, это не совсем фон, но вы поняли:
источник
float: left;
сломал его позиционированиеУверен, это никогда не будет видно здесь. Но если ваша проблема была такой же, как у меня, это было мое решение:
Я хотел иметь div в центре изображения, и это позволит мне это.
источник
Существует чистое решение CSS, которое пропустили другие ответы.
Свойство «content:» в основном используется для вставки текстового содержимого в элемент, но также может использоваться для вставки содержимого изображения.
Это заставит div изменить его высоту до фактического размера пикселя изображения. Чтобы изменить ширину тоже, добавьте:
источник
Вы можете сделать это на стороне сервера: измерив изображение, а затем установив размер div, ИЛИ загрузив изображение в JS, прочитайте его атрибуты и затем установите размер DIV.
И вот идея, поместите то же изображение внутри элемента div, что и тег IMG, но сделайте его видимым: скрытый + игра с относительной позицией + этот элемент в качестве фона.
источник
У меня возникла эта проблема, и я нашел ответ Хасанави, но у меня возникла небольшая ошибка при отображении фонового изображения на широком экране - фоновое изображение не распространялось на всю ширину экрана.
Итак, вот мое решение - на основе кода Хасанави, но лучше ... и оно должно работать как на сверхширокых, так и на мобильных экранах.
Как вы могли заметить,
background-size: contain;
свойство не очень хорошо вписывается в очень широкие экраны, аbackground-size: cover;
свойство не очень хорошо вписывается в мобильные экраны, поэтому я использовал этот@media
атрибут, чтобы поэкспериментировать с размерами экрана и решить эту проблему.источник
Как насчет этого :)
Демо: http://jsfiddle.net/josephmcasey/KhPaF/
источник
Если это одно заданное фоновое изображение, и вы хотите, чтобы div реагировал без искажения соотношения сторон фонового изображения, вы можете сначала рассчитать соотношение сторон изображения, а затем создать div, сохраняющее соотношение сторон, выполнив следующие действия. :
Допустим, вы хотите, чтобы соотношение сторон составляло 4/1, а ширина div составляла 32%:
Это объясняется тем, что отступ рассчитывается на основе ширины содержащего элемента.
источник
Может быть, это может помочь, это не совсем фон, но вы получите простую идею
источник
Вы можете сделать что-то подобное
источник
Если вы знаете соотношение изображения во время сборки, хотите, чтобы высота была основана на высоте окна, и вы хорошо ориентируетесь на современные браузеры (IE9 +) , тогда вы можете использовать единицы просмотра для этого:
Не совсем то, о чем спрашивал ОП, но, вероятно, хорошо подходит для многих, кто просматривает этот вопрос, поэтому хотел дать здесь еще один вариант.
Скрипка: https://jsfiddle.net/6Lkzdnge/
источник
Я посмотрел на некоторые решения, и они великолепны, но я думаю, что нашел удивительно простой способ.
Во-первых, нам нужно получить соотношение из фонового изображения. Мы просто делим одно измерение на другое. Тогда мы получаем что-то вроде, например, 66,4%
Когда у нас есть коэффициент изображения, мы можем просто вычислить высоту div, умножив коэффициент на ширину области просмотра:
Для меня это работает, правильно устанавливает высоту div и изменяет его при изменении размера окна.
источник
Предположим, у вас есть что-то вроде этого:
и вы хотите добавить фон, но вы не знаете размер изображения.
У меня была похожая проблема, и я решил ее с помощью сетки:
HTML
CSS
z-index
просто для размещения изображения на самом деле на фоне, вы можете, конечно, разместитьimg.background
надdiv.content
.ПРИМЕЧАНИЕ : это может привести к тому
div.content
, что картинка имеет одинаковую высоту, поэтому если уdiv.content
вас есть дочерние элементы, расположенные в соответствии с ее высотой, вы можете установить число, отличное от 'auto'.источник
Возникла эта проблема с Umbraco CMS, и в этом сценарии вы можете добавить изображение в div, используя что-то вроде этого для атрибута 'style' div:
источник
Я какое-то время занимался этой проблемой и решил написать плагин jquery для решения этой проблемы. Этот плагин найдет все элементы с классом "show-bg" (или вы можете передать его своему собственному селектору) и вычислит их размеры фонового изображения. все, что вам нужно сделать, это включить этот код, пометить нужные элементы с помощью class = "show
Наслаждайтесь!
https://bitbucket.org/tomeralmog/jquery.heightfrombg
источник
Лучшее решение, которое я могу придумать, это указать вашу ширину и рост в процентах. Это позволит вам изменить размер экрана в зависимости от размера монитора. его более отзывчивый макет ..
Для примера. у тебя есть
Это лучший вариант, если вы хотите адаптивный макет, я бы не рекомендовал float, в некоторых случаях float можно использовать. но в большинстве случаев мы избегаем использовать float, так как это влияет на множество вещей, когда вы проводите кросс-браузерное тестирование.
Надеюсь это поможет :)
источник
на самом деле это довольно легко, когда вы знаете, как это сделать:
хитрость заключается в том, чтобы просто установить вложенный div как обычный div с размерными значениями, такими же, как фоновые размерные значения (в этом примере, 100% и 40vw).
источник
Я решил это с помощью jQuery. Пока новые правила CSS не допускают такого типа поведения, я считаю, что это лучший способ сделать это.
Настройте свои дивы
Ниже у вас есть div, на котором вы хотите, чтобы фон отображался («герой»), а затем внутренний контент / текст, который вы хотите наложить поверх фонового изображения («внутренний»). Вы можете (и должны) перемещать встроенные стили в класс вашего героя. Я оставил их здесь, чтобы было легко и быстро увидеть, какие стили применяются к нему.
Рассчитать соотношение сторон изображения
Затем рассчитайте соотношение сторон для вашего изображения, разделив высоту вашего изображения на ширину. Например, если высота вашего изображения составляет 660, а ширина - 1280, соотношение сторон составляет 0,5156.
Установите событие изменения размера окна jQuery для настройки высоты
Наконец, добавьте прослушиватель событий jQuery для изменения размера окна, а затем рассчитайте высоту вашего героя в зависимости от соотношения сторон и обновите его. Это решение обычно оставляет дополнительный пиксель внизу из-за несовершенных вычислений с использованием соотношения сторон, поэтому мы добавляем -1 к результирующему размеру.
Убедитесь, что он работает при загрузке страницы
Вы должны выполнить вызов изменения размера выше, когда страница загружается, чтобы рассчитать размеры изображения в самом начале. Если вы этого не сделаете, то div героя не будет корректироваться, пока вы не измените размер окна. Я настроил отдельную функцию, чтобы сделать изменения размера. Вот полный код, который я использую.
источник
Если вы можете сделать изображение в Photoshop, где непрозрачность основного слоя равна 1 или около того и в основном прозрачна, поместите это изображение в div, а затем сделайте реальное изображение фоновым. ПОТОМ установите непрозрачность img в 1 и добавьте нужные размеры.
Эта картинка сделана таким образом, и вы даже не можете перетащить невидимое изображение со страницы, что круто.
источник
просто добавь к
div
источник