Растягивайте и масштабируйте изображение CSS в фоновом режиме - только с помощью CSS - PullRequest
805 голосов
/ 19 июля 2009

Я хочу, чтобы мое фоновое изображение растягивалось и масштабировалось в зависимости от размера области просмотра браузера.

Я видел несколько вопросов о переполнении стека, которые выполняют эту работу, например Растягивание и масштабирование фона CSS , например. Это хорошо работает, но я хочу разместить изображение, используя background, а не тег img.

В этот тег помещается тег img, а затем с помощью CSS мы отдаем дань тегу img.

width:100%; height:100%;

Это работает, но этот вопрос немного устарел и утверждает, что в CSS 3 изменение размера фонового изображения будет работать довольно хорошо. Я попробовал этот пример первый , но у меня не получилось.

Есть ли хороший способ сделать это с помощью объявления background-image?

Ответы [ 21 ]

10 голосов
/ 07 января 2017

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

{
background-size:contain;
background-repeat: no-repeat;
}
9 голосов
/ 02 мая 2012

Я использую это, и это работает со всеми браузерами:

<html>
    <head>
        <title>Stretched Background Image</title>
        <style type="text/css">
            /* Remove margins from the 'html' and 'body' tags, and ensure the page takes up full screen height. */
            html, body {height:100%; margin:0; padding:0;}

            /* Set the position and dimensions of the background image. */
            #page-background {position:fixed; top:0; left:0; width:100%; height:100%;}

            /* Specify the position and layering for the content that needs to appear in front of the background image. Must have a higher z-index value than the background image. Also add some padding to compensate for removing the margin from the 'html' and 'body' tags. */
            #content {position:relative; z-index:1; padding:10px;}
        </style>
        <!-- The above code doesn't work in Internet Explorer 6. To address this, we use a conditional comment to specify an alternative style sheet for IE 6. -->
        <!--[if IE 6]>
        <style type="text/css">
            html {overflow-y:hidden;}
            body {overflow-y:auto;}
            #page-background {position:absolute; z-index:-1;}
            #content {position:static;padding:10px;}
        </style>
        <![endif]-->
    </head>
    <body>
        <div id="page-background"><img src="http://www.quackit.com/pix/milford_sound/milford_sound.jpg" width="100%" height="100%" alt="Smile"></div>
        <div id="content">
            <h2>Stretch that Background Image!</h2>
            <p>This text appears in front of the background image. This is because we've used CSS to layer the content in front of the background image. The background image will stretch to fit your browser window. You can see the image grow and shrink as you resize your browser.</p>
            <p>Go on, try it - resize your browser!</p>
        </div>
    </body>
</html>
8 голосов
/ 06 июля 2011

Я согласен с изображением в абсолютном div с 100% шириной и высотой. Убедитесь, что вы установили 100% ширину и высоту для тела в CSS и установите поля и отступы на ноль. Другая проблема, с которой вы столкнетесь при использовании этого метода, заключается в том, что при выделении текста область выделения может иногда охватывать фоновое изображение, что, к сожалению, приводит к тому, что полная страница имеет выбранное состояние. Вы можете обойти это, используя правило CSS user-select:none, например:

<html>
    <head>
        <style type="text/css">

            html,body {
                height: 100%;
                width: 100%
                margin: none;
                padding: none;
            }

            #background {
                width: 100%;
                height: 100%;
                position: fixed;
                left: 0px;
                top: 0px;
                z-index: -99999;
                -webkit-user-select: none;
                -khtml-user-select: none;
                -moz-user-select: none;
                -o-user-select: none;
                user-select: none;
            }

            #background img {
                width: 100%;
                height: 100%;
            }

            #main{ z-index:10;}
        </style>
    </head>
    <body>
        <div id="main">
            content here
        </div>
        <div id="background"><img src="bg.jpg"></div>
    </body>
</html>

Опять же, Internet Explorer - плохой парень, потому что он не распознает опцию выбора пользователя - даже Internet Explorer 10 Preview не поддерживает ее, поэтому у вас есть возможность использовать JavaScript для запретить выбор фонового изображения (например, http://www.felgall.com/jstip35.htm) или использовать CSS 3 метод растягивания фона.

Кроме того, для SEO я бы поместил фоновое изображение внизу страницы, но если фоновое изображение загружается слишком долго (то есть изначально имеет белый фон), вы можете переместить в начало страницы.

8 голосов
/ 04 апреля 2010

Спасибо!

Но тогда это не работало для браузеров Google Chrome и Safari (растяжение работало, но высота изображений составляла всего 2 мм!) До тех пор, пока кто-то не сказал мне, что не хватает:

Попробуйте установить height:auto;min-height:100%;

Итак, измените это для вашей строки height:100%;:

#### #background {
    width: 100%; 
    height: 100%; 
    position: fixed; 
    left: 0px; 
    top: 0px; 
    z-index: -1;
}

.stretch {
    width:100%;
    height:auto;
    min-height:100%;
}

Непосредственно перед этим недавно добавленным кодом у меня это есть в моих Drupal Tendu темах style.css:

html, body {height: 100%;}

#page {фон: #ffffff; высота: авто! важно; высота: 100%; минимальная высота: 100%; положение: относительное;}

Затем я должен сделать новый блок в Drupal с картинкой, добавив class=stretch:

Простое копирование изображения с помощью редактора в этом блоке Drupal не работает; нужно изменить редактор на неформатированный текст.

7 голосов
/ 24 декабря 2010

Я хотел центрировать и масштабировать фоновое изображение, не растягивая его на всю страницу, и хотел, чтобы соотношение сторон сохранялось. Это сработало для меня, благодаря вариантам, предложенным в других ответах:

ВСТАВКА ИЗОБРАЖЕНИЯ: ------------------------

<div id="background">
    <img src="img.jpg" class="stretch" alt="" />
</div>

CSS ----------------------------------

html {
    height:100%;
}

#background {
    text-align: center;
    width: 100%; 
    height: 100%; 
    position: fixed;
    left: 0px; 
    top: 0px; 
    z-index: -1;
}

.stretch {
    margin: auto;
    height:100%;
}
4 голосов
/ 10 сентября 2013

Используйте плагин Backstretch . Можно даже сделать несколько слайдов изображений. Это также работает в контейнерах. Таким образом, например, можно было бы покрыть только часть фона фоновым изображением.

Поскольку даже я смог заставить его работать, это доказывает, что это простой в использовании плагин:).

3 голосов
/ 30 января 2019

Если вы хотите расположить содержимое по центру по горизонтали, используйте комбинацию, подобную этой ...

background-repeat: no-repeat; 
background-size: cover; 
background-position: center; 

Это будет красиво смотреться

2 голосов
/ 12 ноября 2018

Я использовал сочетание свойств background-X css для достижения идеального масштабирования фонового изображения.

background-size: cover;
background-repeat: no-repeat;
background-position: center;
background-attachment: fixed;

Это делает фон всегда покрывающим все окно браузера и остается центрированным при масштабировании.

1 голос
/ 19 ноября 2018

Используйте этот CSS:

background-size: 100% 100%

1 голос
/ 02 июля 2017

Вы можете использовать свойство border-image : yourimage для масштабирования изображения до границы. Даже если вы задаете фоновое изображение, изображение границы будет рисоваться поверх него.

Свойство border-image очень полезно, если ваша таблица стилей реализована где-то, что не поддерживает CSS3. Если вы используете Chrome Firefox, то я рекомендую само свойство background-size:cover.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...