background-size в сокращенном свойстве background (CSS3)


112

Я пытаюсь смешать свойства background-imageи background-sizeсвойства в сокращенной backgroundсобственности. Согласно документации W3C, он background-size должен стоять после background-positionсвойства, разделенного косой чертой ( /).

Пример W3C:

p { background: url("chess.png") 40% / 10em gray
       round fixed border-box; } 

эквивалентно:

p {
    background-color: gray;
    background-position: 40% 50%;
    background-size: 10em 10em;
    background-repeat: round round;
    background-clip: border-box;
    background-origin: border-box;
    background-attachment: fixed;
    background-image: url(chess.png) }

MDN говорит то же самое. Я также нашел эту и эту статью о сокращенном свойстве фона CSS3, объясняющем это.

Но это не работает! Также неясно, как сделать сокращенное backgroundсвойство, когда background-sizeи background-positionиметь два разных значения для background-position-xи / background-position-yили одно и то же для background-size. Непонятно, как происходит косая черта ( /)? Этот пример не работает в моем Chrome 15.

Пример, который я пытался сократить, - это код CSS:

div {  
    background: url(http://www.placedog.com/125/125) 
        0 0 /  150px 100px 
        repeat no-repeat 
        fixed border-box padding-box blue;      
    height: 300px;
    width:360px;    
    border: 10px dashed magenta;  
}

Более чистый пример

Это работает ( JSFiddle )

 body{
        background-image:url(http://www.google.com/intl/en_com/images/srpr/logo3w.png);
        background-position:200px 100px;
        background-size:600px 400px;
        background-repeat:no-repeat;
    }

Это не работает ( jsfiddle )

body{
    background:url(http://www.google.com/intl/en_com/images/srpr/logo3w.png) 200px 100px/600px 400px no-repeat;
}

Это тоже не работает ( jsfiddle )

body{
    background:url(http://www.google.com/intl/en_com/images/srpr/logo3w.png) 200px/400px 100px/600px no-repeat;
}

3
Остерегайтесь Safari, не поддерживающего сокращение размера фона! Safari не поддерживает это! Разместите размер фона отдельно от фона, чтобы Safari не подавился им!
Джефф

Ответы:


63
  1. Ваш jsfiddle использует background-imageвместоbackground
  2. Кажется, это случай «пока не поддерживается этим браузером».

Это работает в Opera: http://jsfiddle.net/ZNsbU/5/
Но это не работает в FF5 и IE8. (ура для устаревших браузеров: D)

Код:

body {
  background:url(http://www.google.com/intl/en_com/images/srpr/logo3w.png) 400px 200px / 600px 400px no-repeat;
}

Сделать это можно так:

body {
    background:url(http://www.google.com/intl/en_com/images/srpr/logo3w.png) 400px 400px no-repeat;
    background-size:20px 20px
}

Что работает в FF5 и Opera, но не в IE8.


Как вы думаете, проблема не в поддержке браузера?
Kraz

1
Мне просто интересно, какова правильная спецификация для CSS3 background?
Mohsen

Это то, что определил W3C, точно так же, как вы в своем вопросе или в моем примере кода. Просто это пока реализовано не во всех браузерах.
Kraz

Это не работает в Chrome Canary. Не могу поверить, что это еще не реализовано.
Mohsen

Выбрано в качестве ответа для этой части: Похоже, это случай «пока не поддерживается этим браузером».
Mohsen

14

Вы можете сделать как

 body{
        background:url('equote.png'),url('equote.png');
        background-size:400px 100px,50px 50px;
    }

Это то, что мне помогло больше всего; Я не знал, что вы можете разделить объявления размера фона запятой, по одной для каждого URL-адреса над ним.
Натаниэль Флик,

9

Просто примечание для справки: я пытался сделать так:

background: url('../images/sprite.png') -312px -234px / 355px auto no-repeat;

но браузеры iPhone Safari не отображали изображение должным образом с элементом фиксированной позиции. С нефиксированным не проверял, потому что ленивый. Мне пришлось переключить css на то, что показано ниже, стараясь поставить background-size после свойства background. Если вы сделаете это в обратном порядке, фон вернет размер фона к исходному размеру изображения. Так что обычно я бы избегал использования сокращений для установки размера фона.

background: url('../images/sprite.png') -312px -234px no-repeat;
background-size: 355px auto;

То же самое и в Android 4.1.2 Stock Browser
depoulo

1

попробуй вот так

body {
   background: #fff url("!--MIZO-PRO--!") no-repeat center 15px top 15px/100px;
     }


/* 100px is the background size */

-5

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

body { 
        background: url(images/bg.jpg) no-repeat center center fixed; 
        -webkit-background-size: cover;
        -moz-background-size: cover;
        -o-background-size: cover;
        background-size: cover;
}

1
Это не так. Мне не нужно использовать префикс поставщика, если я не хочу поддерживать старые браузеры
Mohsen

Этот префиксы поставщика все еще работают, и некоторые браузеры, возможно, только недавно отказались от него.
Moin Zaman
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.