モバイル WebKit ブラウザに CSS 背景の短縮形を追加

WebKit では今年、CSS background 短縮プロパティの動作を更新しました。この変更により、background 省略形プロパティは、省略形宣言で設定されていない場合、background-size をデフォルト値の auto auto にリセットします。この変更により、Chrome やその他の WebKit ブラウザがこの仕様に準拠し、Firefox、Opera、Internet Explorer の動作と一致するようになります。

Chrome for Android が WebKit の現在のバージョンに移行するのに伴い、この変更は Android にも展開されます。これは webkit に対する修正であるため、複数のブラウザでテストしたサイトは影響を受けません。

従来のやり方

// background-size is reset to auto auto by the background shorthand
.foo {
    background-size: 50px 40px;
    background: url(foo.png) no-repeat;
}

background 短縮プロパティにはサイズ プロパティが含まれていないため、background-size がデフォルト値の auto auto にリセットされます。

画像サイズを指定する正しい方法

// 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;
}

fooBbackgroundbackground-size を指定するには、最初に position(0%)を指定し、次にスラッシュ、次に background-size(50 px 40 ピクセル)を指定する必要があります。

既存のコードの修正

この問題を簡単に修正できる方法がいくつかあります。

  • background 省略形プロパティではなく background-image を使用します。
  • 最後に background-size を設定し、その要素に background を設定する他の CSS ルールよりも限定度を高くします。:hover ルールも忘れずにチェックしてください。
  • !important プロパティを background-size に適用します。
  • サイズ情報を background 短縮プロパティに移動します。

参考: 背景画像のオフセット

この変更に加え、背景内での画像の配置の柔軟性が向上しました。これまでは、左上隅からの相対的な画像の位置を指定できましたが、コンテナの端からのオフセットも指定できるようになりました。たとえば、background-position: right 5px bottom 5px; を設定すると、画像は右端から 5 ピクセル、下から 5 ピクセルに配置されます。JSBin のサンプルを確認する