Как мне получить div для автоматической настройки размера фона, который я установил для него, не устанавливая для него определенную высоту (или минимальную высоту)?
Как получить высоту div для автоматической настройки размера фона?
Ответ 1
Другим, возможно, неэффективным решением будет включение изображения под элементом img
, установленным в visibility: hidden;
. Затем сделайте background-image
окружающего div таким же, как изображение.
Это установит окружающий div в размер изображения в элементе img
, но отобразит его как фон.
<div style="background-image: url(http://your-image.jpg);">
<img src="http://your-image.jpg" style="visibility: hidden;" />
</div>
Ответ 2
Существует очень красивый и классный способ сделать фоновое изображение таким же, как элемент img
, чтобы он автоматически настраивал его height
. Вам нужно знать соотношение изображения width
и height
. Установите height
контейнера в 0 и установите значение padding-top
в процентах на основе отношения изображения.
Он будет выглядеть следующим образом:
div {
background-image: url('http://www.pets4homes.co.uk/images/articles/1111/large/feline-influenza-all-about-cat-flu-5239fffd61ddf.jpg');
background-size: contain;
background-repeat: no-repeat;
width: 100%;
height: 0;
padding-top: 66.64%; /* (img-height / img-width * container-width) */
/* (853 / 1280 * 100) */
}
У вас есть фоновое изображение с автоматической высотой, которое будет работать как элемент img. Вот рабочий прототип (вы можете изменить размер и проверить высоту div): http://jsfiddle.net/TPEFn/2/
Ответ 3
Невозможно автоматически настроить размер фонового изображения с помощью CSS.
Вы можете взломать его, измерив фоновое изображение на сервере, а затем применив эти атрибуты к div, как упомянули другие.
Вы также можете взломать некоторый javascript, чтобы изменить размер div на основе размера изображения (как только изображение было загружено) - это в основном то же самое.
Если вам нужен ваш div для автоматической установки изображения, я могу спросить, почему бы вам просто не поместить тег <img>
внутри своего div?
Ответ 4
Этот ответ аналогичен другим, но в целом он подходит для большинства приложений. Вам нужно знать размер изображения перед рукой, который вы обычно делаете. Это позволит вам добавлять текст наложения, титры и т.д. Без отрицательного отступов или абсолютного позиционирования изображения. Ключ их состоит в том, чтобы установить дополнение% в соответствие с соотношением сторон изображения, как показано в примере ниже. Я использовал этот ответ и по существу просто добавил фон изображения.
.wrapper {
width: 100%;
/* whatever width you want */
display: inline-block;
position: relative;
background-size: contain;
background: url('https://upload.wikimedia.org/wikipedia/en/thumb/6/67/Wiki-llama.jpg/1600px-Wiki-llama.jpg') top center no-repeat;
margin: 0 auto;
}
.wrapper:after {
padding-top: 75%;
/* this llama image is 800x600 so set the padding top % to match 600/800 = .75 */
display: block;
content: '';
}
.main {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
color: black;
text-align: center;
margin-top: 5%;
}
<div class="wrapper">
<div class="main">
This is where your overlay content goes, titles, text, buttons, etc.
</div>
</div>
Ответ 5
Может быть, это может помочь, это не совсем фон, но вы получаете идею:
<style>
div {
float: left;
position: relative;
}
div img {
position: relative;
}
div div {
position: absolute;
top:0;
left:0;
}
</style>
<div>
<img src="http://antwrp.gsfc.nasa.gov/apod/image/0903/omegacen_davis.jpg" />
<div>Hi there</div>
</div>
Ответ 6
Довольно уверен, что этого никогда не увидим здесь. Но если ваша проблема была такой же, как у меня, это было мое решение:
.imaged-container{
background-image:url('<%= asset_path("landing-page.png") %> ');
background-repeat: no-repeat;
background-size: 100%;
height: 65vw;
}
Я хотел иметь div в центре изображения, и это позволит мне это.
Ответ 7
Существует чисто CSS-решение, которое пропустили другие ответы.
Свойство content: в основном используется для вставки текстового содержимого в элемент, но также может использоваться для вставки содержимого изображения.
.my-div:before {
content: url("image.png");
}
Это приведет к тому, что div изменит размер своей высоты на фактический размер пикселя изображения. Чтобы изменить размер ширины, добавьте:
.my-div {
display: inline-block;
}
Ответ 8
Вы можете сделать это на стороне сервера: измерив изображение, а затем установив размер div, ИЛИ загрузив изображение с помощью JS, прочитайте его атрибуты и затем установите размер DIV.
И вот идея, поместите то же изображение внутри div как IMG-тэг, но дайте ему видимость: hidden + play с позицией relative + дайте этому div изображение в качестве фона.
Ответ 9
У меня была эта проблема и я нашел ответ Хасанави, но у меня появилась небольшая ошибка при отображении фонового изображения на широком экране. Фоновое изображение не распространялось на всю ширину экрана.
Итак, вот мое решение - основано на коде Hasanavi, но лучше... и это должно работать как на экстра-широких, так и на мобильных экранах.
/*WIDE SCREEN SUPPORT*/
@media screen and (min-width: 769px) {
div {
background-image: url('http://www.pets4homes.co.uk/images/articles/1111/large/feline-influenza-all-about-cat-flu-5239fffd61ddf.jpg');
background-size: cover;
background-repeat: no-repeat;
width: 100%;
height: 0;
padding-top: 66.64%; /* (img-height / img-width * container-width) */
/* (853 / 1280 * 100) */
}
}
/*MOBILE SUPPORT*/
@media screen and (max-width: 768px) {
div {
background-image: url('http://www.pets4homes.co.uk/images/articles/1111/large/feline-influenza-all-about-cat-flu-5239fffd61ddf.jpg');
background-size: contain;
background-repeat: no-repeat;
width: 100%;
height: 0;
padding-top: 66.64%; /* (img-height / img-width * container-width) */
/* (853 / 1280 * 100) */
}
}
Как вы могли заметить, свойство background-size: contain;
не подходит для расширенных экранов, а свойство background-size: cover;
не подходит для мобильных экранов, поэтому я использовал этот атрибут @media
для воспроизведения с экрана размеров и исправить эту проблему.
Ответ 10
Как насчет этого:)
.fixed-centered-covers-entire-page{
margin:auto;
background-image: url('https://i.imgur.com/Ljd0YBi.jpg');
background-repeat: no-repeat;background-size:cover;
background-position: 50%;
background-color: #fff;
left:0;
right:0;
top:0;
bottom:0;
z-index:-1;
position:fixed;
}
<div class="fixed-centered-covers-entire-page"></div>
Ответ 11
Если это одно заданное фоновое изображение, и вы хотите, чтобы div был отзывчивым, не искажая пропорции фонового изображения, вы можете сначала рассчитать соотношение сторон изображения и затем создать div, который сохраняет его соотношение сторон на делая следующее:
Предположим, что соотношение сторон 4/1 и ширины div равно 32%:
div {
width: 32%;
padding-bottom: 8%;
}
Это связано с тем, что заполнение рассчитывается на основе ширины содержащего элемента.
Ответ 12
Может быть, это может помочь, это не совсем фон, но вы получаете простую идею
<style>
div {
float: left;
position: relative;
}
div img {
position: relative;
}
div div {
position: absolute;
top:0;
left:0;
}
</style>
<div>
<img src="http://www.planwallpaper.com/static/images/recycled_texture_background_by_sandeep_m-d6aeau9_PZ9chud.jpg" />
<div>Hello</div>
</div>
Ответ 13
Вы можете сделать что-то подобное
<div style="background-image: url(http://your-image.jpg); position:relative;">
<img src="http://your-image.jpg" style="opacity: 0;" />
<div style="position: absolute;top: 0;width: 100%;height: 100%;">my content goes here</div>
</div>
Ответ 14
Если бы эта проблема была с CMS Umbraco, и в этом случае вы можете добавить изображение в div, используя что-то подобное для атрибута style для div:
style="background: url('@(image.mediaItem.Image.umbracoFile)') no-repeat scroll 0 0 transparent; height: @(image.mediaItem.Image.umbracoHeight)px"
Ответ 15
Я занимался этой проблемой некоторое время и решил написать плагин jquery для решения этой проблемы. Этот плагин найдет все элементы с классом "show-bg" (или вы можете передать его собственный селектор) и вычислите их размеры фонового изображения. все, что вам нужно сделать, это включить этот код, пометить нужные элементы с помощью class= "show
Наслаждайтесь!
Ответ 16
Лучшее решение, о котором я могу думать, - это указать ширину и высоту в процентах. Это позволит вам настроить ваш экран на основе размера вашего монитора. его более отзывчивый макет.
Для экземпляра. у вас есть
<br/>
<div> . //This you set the width percent to %100
<div> //This you set the width percent to any amount . if you put it by 50% , it will be half
</div>
</div>
Это лучший вариант, если вам нужен отзывчивый макет, я бы не рекомендовал float, в некоторых случаях float можно использовать. но в большинстве случаев мы избегаем использования float, поскольку это скажется на множестве вещей, когда вы выполняете кросс-браузерное тестирование.
Надеюсь, что это поможет:)
Ответ 17
Если вы можете сделать изображение в Photoshop, где основной слой имеет непрозрачность 1 или около того и в основном прозрачный, поместите это img в div, а затем сделайте реальное изображение фоновым изображением. Затем установите непрозрачность img равным 1 и добавьте требуемые размеры размера.
Эта картина сделана именно так, и вы не можете даже перетащить невидимое изображение с прохладной страницы.
Ответ 18
на самом деле это довольно легко, когда вы знаете, как это сделать:
<section data-speed='.618' data-type='background' style='background: url(someUrl)
top center no-repeat fixed; width: 100%; height: 40vw;'>
<div style='width: 100%; height: 40vw;'>
</div>
</section>
трюк заключается в том, чтобы установить замкнутый div как обычный div с размерными значениями, такими же, как и размерные значения фона (в этом примере 100% и 40vw).
Ответ 19
Я решил это с помощью jQuery. Пока новые правила CSS не допускают такого поведения, я считаю, что это лучший способ сделать это.
Установите свои divs
Ниже у вас есть div, на который вы хотите, чтобы фон появился ( "герой" ), а затем внутренний контент/текст, который вы хотите наложить поверх фонового изображения ( "внутренний" ). Вы можете (и должны) перемещать встроенные стили в класс героя. Я оставил их здесь, поэтому быстро и легко увидеть, какие стили применяются к нему.
<div class="hero" style="background-image: url('your-image.png'); background-size: 100%; background-repeat: no-repeat; width: 100%;">
<div class="inner">overlay content</div>
</div>
Рассчитать пропорции изображения
Затем вычислите пропорции для вашего изображения, разделив высоту изображения по ширине. Например, если ваша высота изображения равна 660, а ваша ширина составляет 1280, ваше соотношение сторон составляет 0,5156.
Настройка события изменения размера окна jQuery для регулировки высоты
Наконец, добавьте прослушиватель событий jQuery для изменения размера окна, а затем вычислите высоту своего героя на основе соотношения сторон и обновите его. Это решение обычно оставляет дополнительный пиксель внизу из-за несовершенных вычислений с использованием соотношения сторон, поэтому мы добавляем -1 к результирующему размеру.
$(window).on("resize", function ()
{
var aspect_ratio = .5156; /* or whatever yours is */
var new_hero_height = ($(window).width()*aspect_ratio) - 1;
$(".hero").height(new_hero_height);
}
Убедитесь, что он работает при загрузке страницы
Вы должны выполнить вызов изменения размера выше, когда страница загружается, чтобы иметь размеры изображения, рассчитанные с самого начала. Если вы этого не сделаете, то атрибут hero не будет регулироваться, пока вы не измените размер окна. Я настраиваю отдельную функцию для выполнения настроек изменения размера. Здесь полный код, который я использую.
function updateHeroDiv()
{
var aspect_ratio = .5156; /* or whatever yours is */
var new_hero_height = ($(window).width()*aspect_ratio) - 1;
$(".hero").height(new_hero_height);
}
$(document).ready(function()
{
// calls the function on page load
updateHeroDiv();
// calls the function on window resize
$(window).on("resize", function ()
{
updateHeroDiv();
}
});
Ответ 20
просто добавьте в div
style="overflow:hidden;"