19 ответов:
другим, возможно, неэффективным решением было бы включить изображение под
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>
есть очень хороший и классный способ сделать фоновое изображение работать как
imgэлемент, так что настроить егоheightавтоматически. Вы должны знать изображениеwidthи . Установите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/
нет способа автоматической настройки размера фонового изображения с помощью CSS.
вы можете взломать его, измеряя фоновое изображение на сервере, а затем применяя эти атрибуты к div, как упоминали другие.
вы также можете взломать некоторые javascript, чтобы изменить размер div на основе размера изображения (после загрузки изображения) - это в основном то же самое.
Если вам нужен ваш div для автоматической подгонки изображения, я мог бы спросить, почему вы не просто поставить
<img>тег внутри вашего div?
этот ответ похож на другие, но в целом лучше всего подходит для большинства приложений. Вы должны знать размер изображения перед рукой, что вы обычно делаете. Это позволит вам добавить наложение текста, титров и т. д. без отрицательного заполнения или абсолютного позиционирования изображения. Они ключ, чтобы установить заполнение %, чтобы соответствовать соотношению сторон изображения, как показано в примере ниже. Я использовал ответ и по существу просто добавил изображение фон.
.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>
может быть, это может помочь, это не совсем фон, но вы получите идею:
<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>
довольно уверен, что это никогда не будет видно весь путь сюда. Но если ваша проблема была такой же, как у меня, это было мое решение:
.imaged-container{ background-image:url('<%= asset_path("landing-page.png") %> '); background-repeat: no-repeat; background-size: 100%; height: 65vw; }Я хотел, чтобы div в центре изображения, и это позволит мне этого.
есть чистое решение CSS, которое другие ответы пропустили.
свойство "content:" в основном используется для вставки текстового содержимого в элемент, но также может использоваться для вставки содержимого изображения.
.my-div:before { content: url("image.png"); }это приведет к тому, что div изменит свою высоту до фактического размера пикселя изображения. Чтобы изменить ширину тоже, добавьте:
.my-div { display: inline-block; }
вы можете сделать это на стороне сервера: измерив изображение, а затем установив размер div или загрузив изображение с помощью JS, прочитайте его атрибуты, а затем установите размер DIV.
и вот идея, поместите то же самое изображение внутри div в качестве тега IMG, но дайте ему видимость: скрытый + воспроизведение с относительной позицией+ дайте этому div изображение в качестве фона.
у меня была эта проблема, и я нашел ответ Хасанави, но я получил небольшую ошибку при отображении фонового изображения на широком экране - фоновое изображение не распространилось на всю ширину экрана.
Итак, вот мое решение-на основе кода Хасанави, но лучше... и это должно работать как на экстра-широких, так и на мобильных экранах.
/*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;свойство doas не очень хорошо вписывается в дополнительные широкие экраны, аbackground-size: cover;собственность не хорошо подходят на мобильных экранах, поэтому я использовал это@mediaатрибут, чтобы поиграть с размерами экрана и исправить эту проблему.
Как насчет этого :)
.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>
Если это одно предопределенное фоновое изображение, и вы хотите, чтобы div реагировал без искажения соотношения сторон фонового изображения, вы можете сначала вычислить соотношение сторон изображения, а затем создать div, который сохраняет его соотношение сторон, выполнив следующие действия:
скажем, вы хотите соотношение сторон 4/1 и ширина div составляет 32%:
div { width: 32%; padding-bottom: 8%; }Это связано с тем, что заполнение рассчитывается на основе ширины содержащий элемент.
может быть это может помочь, это не совсем фон, но вы получите простую идею
<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>
была эта проблема с CMS Umbraco, и в этом сценарии вы можете добавить изображение в div, используя что-то вроде этого для атрибута 'style' div:
style="background: url('@(image.mediaItem.Image.umbracoFile)') no-repeat scroll 0 0 transparent; height: @(image.mediaItem.Image.umbracoHeight)px"
Я некоторое время занимался этой проблемой и решил написать плагин jquery для решения этой проблемы. Этот плагин найдет все элементы с классом "show-bg" (или вы можете передать его свой собственный селектор) и вычислить их размеры фонового изображения. все, что вам нужно сделать, это включить этот код, отметьте нужные элементы С class="show
наслаждайтесь!
лучшее решение, которое я могу придумать, это указать вашу ширину и высоту в процентах . Это позволит вам получить размер экрана в зависимости размера вашего монитора. его более отзывчивый макет..
для примера. у вас есть
<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, поскольку это повлияет на довольно много вещей, когда вы находитесь выполнение кросс-браузерного тестирования.
надеюсь, что это помогает :)
на самом деле это довольно легко, когда вы знаете, как это сделать:
<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).
Если вы можете сделать изображение в Photoshop, где основной слой имеет непрозрачность 1 или около того и в основном прозрачен, поместите этот img в div, а затем сделайте реальную картину фоновым изображением. Затем установите непрозрачность img в 1 и добавьте размеры размера, которые вы хотите.
Это изображение сделано таким образом, и вы даже не можете перетащить невидимое изображение со страницы, которая является прохладной.
я решил это с помощью 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 для изменения размера окна, а затем вычислите свой герой div высота на основе соотношения сторон и обновить его. Это решение обычно оставляет дополнительный пиксель внизу из-за несовершенных вычислений с использованием соотношения сторон, поэтому мы добавляем -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); }убедиться, что он работает при загрузке страницы
вы должны выполнить вызов изменения размера выше, когда страница загружается, чтобы иметь размеры изображения, рассчитанные в начале. Если вы этого не сделаете, то герой div не будет настраиваться, пока вы не измените размер окна. Я настраиваю отдельный функция для того чтобы сделать регулировки размера. Вот полный код, который я использую.
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(); } });
Comments