Установить размер на фоновое изображение с помощью CSS? - PullRequest
378 голосов
/ 27 августа 2009

Можно ли установить размер фонового изображения с помощью CSS?

Я хочу сделать что-то вроде:

background: url('bg.gif') top repeat-y;
background-size: 490px;

Но, кажется, совершенно неправильно так делать ...

Ответы [ 18 ]

610 голосов
/ 27 августа 2009

CSS2

Если вам нужно увеличить изображение, вы должны отредактировать само изображение в редакторе изображений.

Если вы используете тег img, вы можете изменить размер, но это не даст желаемого результата, если вам нужно, чтобы изображение было фоном для какого-то другого контента (и оно не будет повторяться, как вы, кажется, хотите) ...

CSS3 раскрыть полномочия

Это можно сделать в CSS3 с помощью background-size.

Все современные браузеры поддерживают это, поэтому, если вам не требуется поддержка старых браузеров, это способ сделать это.
Поддерживаемые браузеры:
Mozilla Firefox 4.0+ (Gecko 2.0+), Microsoft Internet Explorer 9.0+, Opera 10.0+, Safari 4.1+ (webkit 532) и Chrome 3.0+.

.stretch{
/* Will stretch to specified width/height */
  background-size: 200px 150px;
}
.stretch-content{
/* Will stretch to width/height of element */
  background-size: 100% 100%;
}

.resize-width{
/* width: 150px, height: auto to retain aspect ratio */
  background-size: 150px Auto;
}
.resize-height{
/* height: 150px, width: auto to retain aspect ratio */
  background-size: Auto 150px;
}
.resize-fill-and-clip{ 
  /* Resize to fill and retain aspect ratio.
     Will cause clipping if aspect ratio of box is different from image. */ 
  background-size: cover;
}
.resize-best-fit{
/* Resize to best fit and retain aspect ratio.
   Will cause gap if aspect ratio of box is different from image. */ 
  background-size: contain;
}

В частности, мне нравятся значения cover и contain, которые дают нам новую силу контроля, которой у нас не было раньше.

Круглый

Вы также можете использовать background-size: round, которые имеют значение в сочетании с повтором:

.resize-best-fit-in-repeat{
/* Resize to best fit in a whole number of times in x-direction */ 
  background-size: round auto; /* Height: auto is to keep aspect ratio */
  background-repeat: repeat;
}

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


Дополнительные примечания
Если вам нужен статический размер пикселя, все равно разумно физически изменить размер фактического изображения. Это необходимо как для повышения качества изменения размера (учитывая, что программное обеспечение для обработки изображений работает лучше, чем для браузеров), так и для экономии полосы пропускания, если исходное изображение больше, чем то, что отображается.

330 голосов
/ 09 декабря 2010

Это поддерживает только CSS 3,

background-size: 200px 50px;

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

23 голосов
/ 27 августа 2009

Если ваши пользователи используют только Opera 9.5+, Safari 3+, Internet Explorer 9+ и Firefox 3.6+, тогда ответ - да. В противном случае, нет.

Свойство background-size является частью CSS 3, но оно не будет работать в большинстве браузеров.

Для ваших целей просто увеличьте фактическое изображение.

18 голосов
/ 27 августа 2009

Не возможно . Фон всегда будет настолько большим, насколько это возможно, но вы можете остановить его повторение с помощью background-repeat.

background-repeat: no-repeat;

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

В-третьих, вы можете контролировать, где начинается фоновое изображение. По умолчанию это верхний левый угол поля, но вы можете управлять этим с помощью background-position, например:

background-position: center top;

или, возможно,

background-position: 20px -14px;

Отрицательное позиционирование часто используется с CSS-спрайтами .

12 голосов
/ 15 марта 2012

Не слишком сложно, если вы не боитесь углубиться в подробности:)

Есть один забытый аргумент:

background-size: contain;

Это не растянет background-image, как с cover. Он будет растягиваться, пока более длинная сторона не достигнет ширины или высоты внешнего контейнера и, следовательно, сохранит изображение.

Редактировать: Есть также -webkit-background-size и -moz-background-size.

Свойство background-size поддерживается в IE9 +, Firefox 4+, Opera, Chrome и Safari 5+.

- Источник: W3 Schools

3 голосов
/ 03 января 2012

размер фона: 200px 50px измените его на 100% 100%, и он будет масштабироваться в соответствии с потребностями тега содержимого, например ul li или div ... пробовал

3 голосов
/ 11 января 2012

В поддержку ответа, который дал @tetra, я хочу указать, что если изображение является SVG, то изменение размера действительного изображения не требуется.

Поскольку файл SVG представляет собой просто XML, вы можете указать любой размер, который вы хотите, чтобы он отображался в XML.

Однако, если вы используете одно и то же изображение SVG в разных местах и ​​хотите, чтобы оно было разных размеров, тогда использование background-size очень полезно. В любом случае SVG-файлы по размеру меньше растровых изображений, и их изменение на лету с помощью CSS может быть очень полезным без каких-либо затрат на производительность, о которых я знаю, и, конечно, без потери качества.

Вот краткий пример:

<div class="hasBackgroundImage">content</div>

.hasBackgroundImage
{
    background: transparent url('/image/background.svg') no-repeat 10px 5px;
    background-size: 1.4em;
}

(Примечание: это работает для меня в OS X 10.7 с Firefox 8, Safari 5.1 и Chrome 16.0.912.63)

3 голосов
/ 25 июля 2012

Вы можете полностью с CSS3:

body {
    background-image: url(images/bg-body.png); 
    background-size: 100%; /* size the background image at 100% like any responsive img tag */
    background-position: top center;
    background-repeat:no-repeat;
 }

При этом размер фонового изображения будет увеличен до 100% ширины элемента body, а затем будет соответственно изменен размер фона при изменении размеров элемента body для меньших разрешений.

Вот пример: http://www.sccc.premiumdw.com/examples/resize-background-images-with-css/

2 голосов
/ 15 февраля 2011

Вы можете использовать два <div> элемента:

  • Один - это контейнер (это тот, который вы изначально хотели фоновое изображение для отображения)

  • Второй содержится внутри. Вы устанавливаете его размер в размере фоновое изображение (или размер, который вы хотите отображать).

Содержащийся div затем устанавливается в положение absolute. Таким образом, он не мешает нормальному потоку предметов в содержащем div.

Позволяет эффективно использовать спрайт-изображения.

2 голосов
/ 14 февраля 2011

Просто вложенные div для совместимости с различными браузерами

   
      <div>
         <div style="background: url('bg.gif') top repeat-y;min-width:490px;">
            Put content here
         </div>
      </div>
   
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...