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 70

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;
}
html{
    height:100%;
    }
.bg-img {
    background: url(image.jpg) no-repeat center top; 
    background-size: cover; 
    height:100vh;     
}