schedule2022.10.23

【CSS】リセットCSSの考え方

CSS

WEBサイトを表示するブラウザはそれぞれ基礎のCSSプロパティの値が設定されています。そのためCSSを書いて複数のブラウザでチェックするとレイアウトのズレが発生します。このズレを無くすために必要なのがリセットCSSです。

リセットCSSとは

特別なCSSがあるわけではありません。CSSを書き始める前に全てのタグの値を初期化させてしまおうというのがリセットCSSです。先述したように各ブラウザは初期CSSが設定されています。そのままだと各ブラウザ毎にCSSの記述をしなければならないので始めに初期化させます。

一度CSSを当てたものを再度CSSで上書きしていくことになるのでレンダリングの2度手間と思うかもしれませんが、どのみち各ブラウザをデザイン通りにCSSを当てようとすると同じようなことをするので始めにリセットした方が簡素にCSSを書けます。

リセットCSSの例

これは僕が実際に使っているリセットCSSです。毎回この記述をCSSファイルの先頭にコピペしています。

html,body,div,span,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,abbr,address,cite,code,del,dfn,em,img,ins,kbd,q,samp,small,strong,sub,sup,var,b,i,dl,dt,dd,ol,ul,li,fieldset,form,label,legend,table,caption,tbody,tfoot,thead,tr,th,td,article,aside,dialog,figure,footer,header,hgroup,menu,nav,section,time,mark,audio,video{margin:0;padding:0;border:0;outline:0;font-size:100%;vertical-align:baseline;background:transparent;}
body{line-height:1;}
article,aside,dialog,figure,footer,header,hgroup,nav,section{display:block;}
ul,ol{list-style:none}
blockquote,q{quotes:none;}
blockquote:before,blockquote:after,q:before,q:after{content:'';content:none;}
a{margin:0;padding:0;border:0;font-size:100%;vertical-align:baseline;background:transparent;}
ins{color:#000;text-decoration:none;}
mark{background-color:#ff9;color:#000;font-weight:bold;}
del{text-decoration:line-through;}
abbr[title],dfn[title]{border-bottom:1px dotted #000;cursor:help;}
table{border-collapse:collapse;border-spacing:0}
hr{display:block;height:1px;border:0;border-top:1px solid #cccccc;margin:1em 0;padding:0;}
input,select{vertical-align:middle;}
img{vertical-align:middle;}
*:focus{outline:none;}

リセットCSSの有り無しを見てみる

まずはリセットCSSを利用していないHTMLサンプルを見てみましょう。

See the Pen
リセットCSS無し
by pecoegg (@pecoegg)
on CodePen.dark

ある程度読めるようになっていますね。

ではリセットCSSを当ててみます。

See the Pen
リセットCSSあり
by pecoegg (@pecoegg)
on CodePen.dark

非常に読みにくくなりますが文字サイズが同じだったり、行間等が消えていますね。

リセットCSSを当てて、まずこの状態にしてからCSSを書いていくとかなりの精度で各ブラウザのページの見た目が同じになります。

代表的なリセットCSSは配布されている

このリセットCSSはかなり昔からあります。それぞれ多少特徴が変わるので気をつけてください。僕はかなり古いHTML5 Doctor CSS Resetを多少いじって今も使っています。割と最近なのはNormalize.cssになりますが痒いところに届かないリセットCSSな気がします。

Normalize.css

See the Pen
Normalize.css
by pecoegg (@pecoegg)
on CodePen.dark

https://github.com/necolas/normalize.css/blob/master/normalize.css

HTML5 Doctor CSS Reset

See the Pen
HTML5 Doctor CSS Reset
by pecoegg (@pecoegg)
on CodePen.dark

http://html5doctor.com/html-5-reset-stylesheet/

Yahoo! (YUI 3) Reset CSS

See the Pen
Yahoo! (YUI 3) Reset CSS
by pecoegg (@pecoegg)
on CodePen.dark

https://clarle.github.io/yui3/yui/docs/cssreset/