画像単体表示時に各ブラウザが適用するスタイル
公開:
ブラウザで画像ファイルを単体で開いたとき、ブラウザによって表示の仕方が違っていたのが気になったので、画像表示ページのCSSを調べてみました。 Chrome 20.0.1115.1 dev-mとSafari 5.1.5で調査。 スタイルは各要素に Firefox 12.0とAurora 14.0a2 (2012-05-01)で調査。 また、 が指定されています。 スタイルはresource://gre/res/TopLevelImageDocument.cssに記述されていますが、必要に応じて画像に Aurora 14.0a2 (2012-05-01)ではもう1つCSSが読み込まれています。 このData URI画像ですが、背景色をあわせるとこんな感じの88×88のPNG画像です。ノイズっぽいあれですね。 この画像の中央配置方法については「Firefoxで使われている上下左右中央配置のスタイルシート」という記事を書きましたので、よろしければどうぞ。 Opera 11.62とOpera Next 12.00 betaで調査。 基本となるCSSファイルと まずは基本のCSSファイルの中身から。 次に 背景は完全な白ではないんですねー。というかまさかのHSL指定。 画像の中央配置ですが、 Internet Explorer 9.0で調査。 特にスタイルは指定されていませんでした。
なかなか面白かったですし、何かの参考になるかもしれません。Google Chrome & Safari
style
属性で直接指定されます。body {
margin: 0px;
}
img {
-webkit-user-select: none;
cursor : -webkit-zoom-in; /* 縮小表示時 */
}
Firefox
head
要素内に<meta name="viewport" content="width=device-width; height=device-height;">
style
属性でcursor: -moz-zoom-in
, cursor: -moz-zoom-out
が直接指定されます。/* Firefox 12 */
@media not print {
body {
background-color: #222;
margin : 0;
}
img {
color : #eee;
text-align: center;
position : absolute;
margin : auto;
top : 0;
right : 0;
bottom : 0;
left : 0;
}
}
/* Aurora 14.0a2 (2012-05-01) */
@media not print {
/* background-colorプロパティが削除されている */
body {
margin: 0;
}
/* colorプロパティが削除されている */
img {
text-align: center;
position : absolute;
margin : auto;
top : 0;
right : 0;
bottom : 0;
left : 0;
}
}
/* ここは同じ */
@media print {
img {
display: block;
}
}
これはchrome://global/skin/TopLevelImageDocument.cssです。
スキンでカスタムできるようにするための変更なんでしょうかね。@media not print {
body {
background: #222 url(data:image/png;base64,...);
}
img {
color: #eee;
}
}
めっちゃ拡大すれば見えると思いますwOpera
中身はたぶんどっちも一緒。style
要素でスタイル指定をしています。
CSSファイルはopera:style/image.cssにあります。style
要素ですが、media
属性に(max-width: 画像本来の幅[px]), (max-height: 画像本来の高さ[px])
が指定されます。html {
background-color: hsl(0, 0%, 98%);
display : table;
width : 100%;
height : 100%;
}
img {
display: block;
margin : auto;
}
body {
margin : 0;
padding : 8px;
display : table-cell;
vertical-align: middle;
}
@media projection, tv, handheld {
html {
background-color: black;
}
body {
background-color: hsl(0, 0%, 39%);
}
img {
background-color: hsl(0, 0%, 98%);
}
}
style
要素内の指定。多分画像の大きさで変更とかはないと思います。body.contain {
position: absolute;
margin : 0;
top : 0;
left : 0;
bottom : 0;
right : 0;
}
body.contain > img {
width : 100%;
height : 100%;
-o-object-fit: contain;
cursor : zoom-in;
}
body.zoom > img {
cursor: zoom-out;
}
デバイスによって背景色を変えているのが特徴的です。body
を表示領域全てを覆うようにして、その上でdisplay: table-cell
とvertical-align: middle
で垂直方向のセンタリングを、img
要素にdisplay: block
とmargin: auto
で水平方向へのセンタリングを行っているようです。body
要素のcontain
クラス名は、画像が全表示状態のときに使われます。小さい画像や縮小表示時ですね。
また、object-fit
プロパティを使って画像の表示上の大きさを調整しています。
このプロパティの仕様は「CSS Image Values and Replaced Content Module Level 3 – 5.5. Sizing Objects: the ‘object-fit’ property」にあります。Internet Explorer
ただし画像が収まりきらないときは他のブラウザと同じように縮小表示され、カーソルもズームイン・ズームアウト用のものが表示されます。
ですがブラウザの調査ツールではどこで指定されているのか分かりませんでした……。
残念ながらCSSとかJSではどうにもできなさそうです。