No início deste ano, o WebKit atualizou o comportamento da propriedade abreviada background
do CSS. Com essa mudança, a propriedade abreviada background
redefinirá o background-size
para o valor padrão de auto auto
se ele não estiver definido na declaração abreviada. Essa alteração coloca o Chrome e outros navegadores WebKit em conformidade com a especificação e corresponde ao comportamento do Firefox, Opera e Internet Explorer.
Com o Google Chrome para Android avançando para as revisões atuais do WebKit, essa alteração está sendo lançada no Android. Como essa foi uma correção do webkit, os sites testados em vários navegadores provavelmente não foram afetados.
Maneira antiga de fazer as coisas
// background-size is reset to auto auto by the background shorthand
.foo {
background-size: 50px 40px;
background: url(foo.png) no-repeat;
}
A propriedade abreviada background
não contém nenhuma propriedade de tamanho e, portanto, redefinirá o background-size
para o valor padrão de auto auto
.
Maneira correta de especificar o tamanho da imagem
// background-size is specified after background
.fooA {
background: url(foo.png) no-repeat;
background-size: 50px 40px;
}
// background-size is specified inline after position
.fooB {
background: url(foo.png) 0% / 50px 40px no-repeat;
}
Em fooB
, a especificação de um background-size
na abreviação background
exige que o position
(0%) seja especificado primeiro, seguido por uma barra e depois background-size
(50 px 40 px).
Correções para o código existente
Existem várias opções para uma solução fácil para esse problema:
- Use
background-image
em vez da propriedade abreviadabackground
. - Defina a
background-size
por último, com uma especificidade maior do que qualquer outra regra de CSS que definebackground
nesse elemento. Não se esqueça de verificar as regras:hover
. - Aplique a propriedade
!important
abackground-size
. - Mova as informações de dimensionamento para a propriedade abreviada
background
.
Bônus: deslocamentos da imagem de plano de fundo
Além dessa mudança, agora há maior flexibilidade para posicionar a imagem em segundo plano. Antes, você só podia especificar a posição da imagem em relação ao canto superior esquerdo. Agora, é possível especificar um deslocamento das bordas do contêiner. Por exemplo, ao definir background-position: right 5px bottom 5px;
, a imagem será posicionada a 5 px da borda direita e a 5 px da parte de baixo. Confira esta amostra no JSBin