знаете хорошую CSS-технику для полноэкранного фонового изображения?

Я искал в Интернете и пробовал разные способы сделать это, но не смог найти ни одного метода, который работает для меня. я бы хотел, чтобы фоновое изображение моего веб-сайта располагалось по центру, занимало весь экран браузера и работало с адаптивным дизайном.

есть ли простая техника, кроме обложки CSS3/background-size:? это просто не сработало для меня ВСЕ (не знаю, почему ...).


person manh2244    schedule 24.03.2013    source источник
comment
Пожалуйста, включите вашу лучшую попытку и почему она не работает.   -  person MikeSmithDev    schedule 25.03.2013
comment
Вы хотите избежать тегов img?   -  person Aaron    schedule 25.03.2013
comment
вот ссылка на то, что я разместил некоторое время назад. это объясняет, что происходит с текущей техникой, которую я использую... stackoverflow.com/questions/15604771/   -  person manh2244    schedule 25.03.2013
comment
у меня нет причин избегать тегов img, поэтому не стесняйтесь предлагать что-то!   -  person manh2244    schedule 25.03.2013
comment
этот ответ работает для вас? stackoverflow.com/questions/ 15594116/   -  person Offbeatmammal    schedule 25.03.2013
comment
нет, когда я пытаюсь это сделать, я просто получаю белый фон. использую самую последнюю версию Chrome, поэтому не знаю, почему она не работает...   -  person manh2244    schedule 25.03.2013
comment
на самом деле, мне удалось отобразить изображение, оно просто обрезано сверху и снизу, как я уже делал раньше.   -  person manh2244    schedule 25.03.2013


Ответы (4)


Если вы не возражаете против использования HTML в дополнение к CSS, вы можете имитировать поведение background-size: cover с помощью тега img.

HTML:

<body>
    <div id="image-matte">
        <img src="..."/>
    </div>

    ... Page content below ...

</body>

CSS:

#image-matte {
    position: fixed;
    top: 0%;
    left: -50%;
    width: 200%;
    height: 200%;
}

#image-matte img {
    display: block;
    margin: auto;
    min-height: 50%;
    min-width: 50%;
}

/* Covers the image to prevent pointer interaction */
#image-matte:after {
    content: '';
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}

РЕДАКТИРОВАТЬ: Чтобы получить фоновое изображение с вертикальным и горизонтальным центрированием, вам нужно создать отношение таблица/таблица-ячейка между div-оболочкой и внутренним div, который содержит само изображение... HTML и CSS будут выглядеть так:

HTML:

<div id="image-matte">
    <div>
        <img src="..."/>
    </div>
</div>

CSS:

#image-matte {
    position: fixed;
    display: table;
    top: -50%;
    left: -50%;
    width: 200%;
    height: 200%;
    text-align: center;
}
#image-matte div {
    vertical-align: middle;
    display: table-cell;
}
#image-matte img {
    position: relative;
    text-align: center;
    min-height: 50%;
    min-width: 50%;
}

/* Covers the image to prevent pointer interaction */
#image-matte:after {
    content: '';
    display: block;
    position: absolute;
    top: 0;
    right: 0;
    bottom: 0;
    left: 0;
}

Рабочий пример: http://jsfiddle.net/qkpvb/

person Aaron    schedule 24.03.2013
comment
это ближе к тому, чего я пытаюсь достичь. изображение по-прежнему было сдвинуто на 50% влево (левая половина была вне поля зрения), а пустое пространство занимало правую половину экрана. я исправил это, удалив абсолютное позиционирование, но хочу ли я этого делать? после внесения этого изменения верхняя часть была исправлена, но нижняя часть изображения все еще обрезалась... - person manh2244; 25.03.2013
comment
ой, у меня была пара мошеннических свойств ширины и высоты CSS. Я отредактировал свой ответ, чтобы удалить их. - person Aaron; 25.03.2013
comment
ааа... спасибо за обновление и за исправление. я так близко. изображение теперь хорошо сидит, за исключением того, что некоторые туфли обрезаются в самом низу. я поиграл с некоторыми различными вариантами, используя инструмент отладки, но пока ничего не сработало. в настоящее время используется изображение размером 1100x800 пикселей, но есть и другие размеры. это проблема разрешения? - person manh2244; 25.03.2013
comment
Это связано с тем, что верхняя часть изображения выровнена по верхней части области просмотра. Чтобы получить ДЕЙСТВИТЕЛЬНО центрированное изображение, вам нужно использовать display: table и vertical-align: middle. Позвольте мне создать jsfiddle, демонстрирующий это поведение. - person Aaron; 25.03.2013
comment
Ясно... пытался применить их к изображению, но это не сработало. Затем я попытался применить их к div #image-matte, на всякий случай, если вы имели в виду это, что также не сработало. тогда я подумал, что должен просто подождать, пока вы создадите jsfiddle... - person manh2244; 25.03.2013
comment
еще ближе... верх и низ все еще немного обрезаны, но не так сильно, как раньше. это почти так, как если бы все, что теперь нужно, это уменьшить масштаб окна просмотра, чтобы было видно все изображение. тем не менее, он определенно центрирован по вертикали и горизонтали. - person manh2244; 25.03.2013

РЕАЛЬНАЯ ДЕМО

body{
  background:url(img.jpg) center center fixed;
  background-size:cover; // CSS3 *
}

Примечание. CSS3. Для других старых браузеров сделайте его максимально уродливым! ;)

person Roko C. Buljan    schedule 25.03.2013

Чтобы хорошо работать во всех браузерах, я бы предложил это решение с использованием jQuery:

HTML

<img src='./templates/lights3.jpg' alt="bg" id="bg"/>

CSS

#bg { 
    position: fixed; 
    top: 0; 
    left: 0;
    z-index: -5000; // Yes I always overdo ^^ (that's not very clean)
}

.bgwidth { 
    width: 100%;
}

.bgheight { 
    height: 100%;
}

JQUERY

$(window).load(function() {    
var theWindow        = $(window),
    $bg              = $("#bg"),
    aspectRatio      = $bg.width() / $bg.height();              
function resizeBg() {
    if ( (theWindow.width() / theWindow.height()) < aspectRatio ) {
        $bg
            .removeClass()
            .addClass('bgheight');
    } else {
        $bg
            .removeClass()
            .addClass('bgwidth');
    }           
}                           
theWindow.resize(resizeBg).trigger("resize");
});

Это решение будет отзывчивым и изменит размер вашего фонового изображения относительно размера окна браузера.

person Djouuuuh    schedule 26.03.2013
comment
Активирован ли JS в вашем мобильном браузере? - person Djouuuuh; 13.06.2013
comment
да, я нашел решение ... плагин jquery под названием Supersize. на самом деле это плагин для слайд-шоу с полным фоном, но у него есть уменьшенная опция, которую можно использовать только в качестве полноэкранного растягивателя фонового изображения. Работает во всех браузерах, которые я пробовал, включая мобильные. - person CI_Guy; 14.06.2013

Попробуйте добавить этот тег html внутри тега или CSS в ссылку:

<img src="img/beach.jpg" 

style="width:100%;height:100%;position:absolute;top:0;left:0;z-index:-5000;">

http://thewebthought.blogspot.com/2010/10/css-making-background-image-fit-any.htmlg

person Tony Wu    schedule 25.09.2014