100% ширина фонового изображения с 'авто' высота
в настоящее время я работаю над мобильной целевой страницей для компании. Это действительно базовый макет, но под заголовком есть изображение продукта, которое всегда будет иметь ширину 100% (дизайн показывает, что он всегда идет от края до края). В зависимости от ширины экрана высота изображения, очевидно, будет регулироваться соответствующим образом. Я изначально сделал это с помощью img (с шириной CSS 100%), и он отлично работал, но я понял, что хотел бы использовать медиа-запросы для обслуживания разных изображений основываясь на разных разрешениях - скажем, маленькая, средняя и большая версии одного и того же изображения, например. Я знаю, что вы не можете изменить img src с помощью CSS, поэтому я решил, что должен использовать фон CSS для изображения, а не тег img В HTML.
Я не могу заставить это работать должным образом, поскольку div с фоновым изображением нуждается как в ширине, так и в высоте, чтобы показать фон. Я могу очевидно использовать 'width: 100%' но что я использую для высоты? Я могу поставить случайный фиксированная высота, как 150px, а затем я могу видеть верхнюю 150px изображения, но это не решение, поскольку нет фиксированной высоты. Я играл и обнаружил, что как только есть высота (проверенная с помощью 150px), я могу использовать 'background-size: 100%', чтобы правильно разместить изображение в div. Я могу использовать более поздний CSS3 для этого проекта, поскольку он нацелен исключительно на мобильный телефон.
Я добавил грубый пример ниже. Пожалуйста, извините встроенные стили, но я хотел дать основной пример, чтобы попытаться сделать мой вопрос немного яснее.
<div id="image-container">
<div id="image" style="background: url(image.jpg) no-repeat; width: 100%; height: 150px; background-size: 100%;"></div>
</div>
может быть, мне нужно дать контейнеру div процентную высоту на основе всей страницы или я смотрю на это совершенно неправильно?
кроме того, как вы думаете, CSS фоны являются лучшим способом сделать это? Возможно, есть техника, которая обслуживает различные теги img На основе ширины устройства/экрана. Общая идея заключается в том, что шаблон целевой страницы будет использоваться много раз с различными изображениями продукта, поэтому мне нужно убедиться, что я разрабатываю это как можно лучше.
Я извиняюсь, это немного многословно, но я взад и вперед от этого проекта к следующему, поэтому я хотел бы сделать эту маленькую вещь. Заранее спасибо за ваше время, это очень ценится. С уважением
8 ответов:
вместо
background-image
можно использоватьimg
непосредственно и чтобы получить изображение, чтобы распространить всю ширину окна просмотра попробуйте использоватьmax-width:100%;
и, пожалуйста, помните, не применяйте никаких прокладок или полей к вашему основному контейнеру div, поскольку они увеличат общую ширину контейнера. Используя это правило, вы можете иметь ширину изображения, равную ширине браузера, и высота также будет меняться в соответствии с соотношением сторон. Спасибо.редактировать: изменение изображения на разный размер окно
$(window).resize(function(){ var windowWidth = $(window).width(); var imgSrc = $('#image'); if(windowWidth <= 400){ imgSrc.attr('src','http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a'); } else if(windowWidth > 400){ imgSrc.attr('src','http://i.stack.imgur.com/oURrw.png'); } });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="image-container"> <img id="image" src="http://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-icon.png?v=c78bd457575a" alt=""/> </div>
таким образом, вы измените свое изображение в другом размере браузера.
Тим С. был гораздо ближе к" правильному " ответу, чем в настоящее время принятый. Если вы хотите иметь 100% ширину, фоновое изображение переменной высоты, выполненное с помощью CSS, вместо использования
cover
(что позволит изображению вытянуться с боков) илиcontain
(что не позволяет изображению расширяться вообще), просто установите CSS следующим образом:body { background-image: url(img.jpg); background-position: center top; background-size: 100% auto; }
это установит фоновое изображение на 100% ширины и позволит высоту переполнения. Теперь вы можете использовать медиа-запросы для обмена из этого изображения вместо того, чтобы полагаться на JavaScript.
EDIT: я только что понял (3 месяца спустя), что вы, вероятно, не хотите, чтобы изображение переполнялось; вы, похоже, хотите, чтобы элемент контейнера изменялся на основе его фонового изображения (чтобы сохранить его соотношение сторон), что, насколько я знаю, невозможно с CSS.
надеюсь, скоро вы сможете использовать новый тег srcset на
img
элемент. Если вы хотите использоватьimg
элементы теперь, в настоящее время принятый ответ, вероятно, лучше всего.тем не менее, вы можете создать отзывчивый элемент фонового изображения с постоянным соотношением сторон, используя исключительно CSS. Для этого вы устанавливаете
height
в 0 и установитеpadding-bottom
в процентах от собственной ширины элемента, например:.foo { height: 0; padding: 0; /* remove any pre-existing padding, just in case */ padding-bottom: 75%; /* for a 4:3 aspect ratio */ background-image: url(foo.png); background-position: center center; background-size: 100%; background-repeat: no-repeat; }
чтобы использовать различные пропорции, разделите высоту исходного изображения на его собственную ширину и умножьте на 100, чтобы получить процентное значение. Это работает, потому что процент заполнения всегда рассчитывается на основе ширины, даже если это вертикальная прокладка.
попробуй такое
html { background: url(image.jpg) no-repeat center center fixed; -webkit-background-size: cover; -moz-background-size: cover; -o-background-size: cover; background-size: cover; }
вы можете использовать свойство CSS
background-size
и установить его вcover
илиcontain
в зависимости от ваших предпочтений. Обложка будет полностью закрывать окно, в то время как contain сделает одну сторону подходящей для окна, таким образом, не покрывая всю страницу (если соотношение сторон экрана не равно изображению).обратите внимание, что это свойство CSS3. В старых браузерах, это свойство игнорируется. Кроме того, вы можете использовать javascript для изменения настроек CSS в зависимости от размера окна, но это не предпочтительно.
body { background-image: url(image.jpg); /* image */ background-position: center; /* center the image */ background-size: cover; /* cover the entire window */ }
просто используйте двухцветное фоновое изображение:
<div style="width:100%; background:url('images/bkgmid.png'); background-size: cover;"> content </div>
добавить css:
html,body{ height:100%; } .bg-img { background: url(image.jpg) no-repeat center top; background-size: cover; height:100%; }
а html это:
<div class="bg-mg"></div>
CSS: растягивание фонового изображения до 100% ширины и высоты экрана?
Это 2017 год, и теперь вы можете использовать object-fit имеющего достойную поддержку. Он работает так же, как div
background-size
но на самом элементе, и на любом элементе, включая изображения..your-img { max-width: 100%; max-height: 100%; object-fit: contain; }