もう一つのCSSリセット


View it on GitHub
CSSのリセットは何ですか?
その最も簡単な形で、CSS ResetはどんなブラウザーがあなたのHTML要素に適用されるかもしれないどんな不必要なデフォルトスタイリングも取り除くのに用いられるスタイルシートです.多くの人々-私自身が含まれて-彼らのプロジェクトの間の一貫性と継続性のいくつかのフォームがあるので、彼らのプロジェクトに優先デフォルトスタイリングを追加するためにCSSセットを使用するように選択します.
ブラウザーが彼らのデフォルトスタイルを減らして、彼らをもう一つと並んで持ってきた間、CSSリセットはあなたに一握りの利益をまだ提供することができます.私たちはCSSのリセットに沿って移動するように、それらにもっと掘りますが、まず、リセット全体を見てみましょう.今日のブログは少し長いが、私と固執されます.
ノート
このCSSのリセットは、私のユースケースのためのチェリーピックプロパティのコングロマリットですAndy Bell's CSS Reset , Josh Commeau’s CSS Reset , そしていくつかのプロパティKent C. Dodds' website .

リセット全体


View it on GitHub
/*
  This CSS Reset is a conglomerate of Andy Bell's, Josh Commeau, and some properties I found from Kent C. Dodds' website.
*/

/*
  Andy's Custom CSS Reset
  https://piccalil.li/blog/a-modern-css-reset/
*/

/*
  Josh's Custom CSS Reset
  https://www.joshwcomeau.com/css/custom-css-reset/
*/

/*
  Kent C. Dodds
  https://kentcdodds.com/
*/

/*-----Universal Styles-----*/
*,
*::before,
*::after {
  box-sizing: border-box;
}

* {
  margin: 0;
  padding: 0;
}

/*-----Core Styles-----*/
html {
  text-size-adjust: none;
  -moz-text-size-adjust: none;
  -webkit-text-size-adjust: none;
}

html:focus-within {
  scroll-behavior: smooth;
}

html,
body {
  height: 100%;
  margin-left: 0.5rem;
  margin-right: 0.5rem;
}

body {
  display: flex;
  flex-direction: column;
  line-height: 1.5;
  margin: 0 auto;
  max-width: 1440px;
  text-rendering: optimizeSpeed;
  -webkit-font-smoothing: antialiased;
}

main {
  display: flex;
  flex-direction: column;
  margin: 0 auto;
}

footer {
  border-top: 1px solid black;
  margin-top: 1.5rem;
  padding-top: 3rem;
  padding-bottom: 1.5rem;
}

body > footer {
  position: sticky;
  top: 100vh;
}

/*-----Element Styles-----*/
ul[role='list'],
ol[role='list'] {
  list-style: none;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

h1,
h2,
h3 {
  line-height: 1.15;
}

small {
  font-size: 80%;
}

b,
strong {
  font-weight: bolder;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}

a:not([class]) {
  text-decoration-skip-ink: auto;
}

a:is([class]) {
  text-decoration: none;
}

input,
button,
textarea,
select {
  font: inherit;
}

button {
  background: none;
  border: none;
  cursor: pointer;
}

/*-----Browser Inconsistancy Fixes-----*/
button,
input,
[type='button'],
[type='reset'],
[type='submit'] {
  -webkit-appearance: button;
}

[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

::-webkit-search-decoration {
  -webkit-appearance: none;
}

::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

:-moz-focusring {
  outline: 1px dotted ButtonText;
}

/*-----Media Queries-----*/
@media (prefers-reduced-motion: reduce) {
  html:focus-within {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}

第1部:ユニバーサルスタイル


*,
*::before,
*::after {
  box-sizing: border-box;
}

/* Remove default margin */
* {
  margin: 0;
  padding: 0;
}
あなたがこれらの2つのスタイルを含むのを選ぶだけであるならば、あなたは成功のためにセットされます.これは、サイズの要素を容易にし、ユニバーサルセレクタを利用してすべてのマージンとパディングをすべての要素に削除します.* .

パート2 :デフォルトのボディスタイル


html {
  text-size-adjust: none;
  -moz-text-size-adjust: none;
  -webkit-text-size-adjust: none;
}

html:focus-within {
  scroll-behavior: smooth;
}

html,
body {
  height: 100%;
}

body {
  display: flex;
  flex-direction: column;
  line-height: 1.5;
  margin: 0 auto;
  max-width: 1440px;
    padding: 0 1rem;
  text-rendering: optimizeSpeed;
  -webkit-font-smoothing: antialiased;
}

main {
  display: flex;
  flex-direction: column;
  margin: 0 auto;
}

footer {
  margin-top: var(size-5);
  padding-top: var(size-8);
  border-top: var(border-size-1) solid var(bg-tertiary);
  padding-bottom: var(size-5);
}

body > footer {
  position: sticky;
  top: 100vh;
}
この部分は少し長いので、さらにそれを壊しましょう.
html {
  text-size-adjust: none;
  -moz-text-size-adjust: none;
  -webkit-text-size-adjust: none;
}

html:focus-within {
  scroll-behavior: smooth;
}

html,
body {
  height: 100%;
}
最初に、我々はセットtext-size-adjust そして、それに付随するブラウザーは、Noneに接頭辞をつけます.Appleが最初のiPhoneをリリースしたとき、サイトを表示するときにデバイスを回転させると、テキストのサイズが表示されやすくするために大きくなります.これは、敏感なウェブサイトの前に意味を作りました;しかし、それは古風で不要です.それが言われると、アップルはまだそれを起こります.text-size-adjust 発生しないようにする.
次はhtml:focus-within - これは、CSSトリックに関してこの記事で指摘された問題なしでスムーズなスクロールを可能にします.私はあなたにread and understand 使用方法html { scroll-behavior: smooth;} は現在推奨されていない.
最後にheight: 100%; 我々に<html> and <body> タグは、我々のページ上の要素の割合ベースの高さを使用することができます.私はいつも、これはあなたが期待するように動作しませんでしたJosh explains , 要素の高さは子供に基づいて計算されます
私は使用しないvh モバイルサイトでは、すべてのブラウザが異なると頻繁に表示/非表示要素は、ユーザーがスクロールしている方向に基づいてこのようにvh 予期しない効果を引き起こす可能性があります.
body {
  display: flex;
  flex-direction: column;
  line-height: 1.5;
  margin: 0 auto;
  max-width: 1440px;
    padding: 0 1rem;
  text-rendering: optimizeSpeed;
  -webkit-font-smoothing: antialiased;
}

main {
  display: flex;
  flex-direction: column;
  margin: 0 auto;
}

footer {
  margin-top: var(size-5);
  padding-top: var(size-8);
  border-top: var(border-size-1) solid var(bg-tertiary);
  padding-bottom: var(size-5);
}

body > footer {
  position: sticky;
  top: 100vh;
}
この部分は私にとって少し不思議です我々は、再び部分によってこの下の部分を壊します.いくつかの再利用されたスタイル、例えばdisplay: flex; - なぜなら、私のリセットでは、何か問題を解決する必要があるのならば、簡単にネスティングしたり切り詰めたりするのが好きではないからです.
body {
  display: flex;
  flex-direction: column;
  line-height: 1.5;
  margin: 0 auto;
  max-width: 1440px;
    padding: 0 1rem;
  text-rendering: optimizeSpeed;
  -webkit-font-smoothing: antialiased;
}
私がモバイル最初のアプローチから働くので、私が最も奨励するように、私はメタレベルからコラムに私の内容を作りますdisplay: flex; and flex-direction: column; . これはどのようにページが一般的にレンダリングされますが、私は過去のいくつかの奇妙なことに遭遇し、それがどのように私が期待するように確認するために2行のコードを追加することを好む.
次に、好みのデフォルト値を追加します.line-height: 1.5; - より良い読書体験とアクセシビリティのために推奨される基本的なデフォルト.これは大きなフォントと見出しには不要です.margin: 0 auto; - ページ上のすべての可視コンテンツを中心にします.これは次のスタイルを考慮するときに必要です.max-width: 1440px - 私は、1440 pxのページ幅が私のためによく働くとわかります.しかし、人々が大規模な超ワイドディスプレイを楽しむのと同じくらい、私はヘッダーナビゲーションを34にまたがることが役に立つとは思いません.padding: 0 1rem; - これは、携帯電話のブラウジングに最適な体の左側と右側にパディングを追加します.さもなければ、内容とスクリーンが終わるところの間にスペースがないでしょう.text-rendering: optimizeSpeed; - ブラウザは、テキストを描画するときに読みやすさと幾何学的な精度をレンダリング速度を強調します.それはkerningとligatureを無効にします.-webkit-font-smoothing: antialiased; - これ以上の説明はできないJosh ; しかし、MacOSを実行しているコンピュータだけにそれを知っています.

第3部:内部要素スタイル


/*-----Element Styles-----*/
ul[role='list'],
ol[role='list'] {
  list-style: none;
}

img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

h1,
h2,
h3 {
  line-height: 1.15;
}

small {
  font-size: 80%;
}

b,
strong {
  font-weight: bolder;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}

a:not([class]) {
  text-decoration-skip-ink: auto;
}

a:is([class]) {
  text-decoration: none;
}

input,
button,
textarea,
select {
  font: inherit;
}

button {
  background: none;
  border: none;
  cursor: pointer;
}

アクセシビリティの改善とスタイリングの改善


ul[role='list'],
ol[role='list'] {
  list-style: none;
}
これはlist-style 任意でol or ul の属性でrole=‘list' . CSSがリストのセマンティクスとA 11 Yを削除しなければ、この規則は必要ないでしょうlist-style 削除された、我々は少なくともこのルールを適用するソリューションがあります.あなたはスコットオハラの記事でこれについてもっと読むことができます“Fixing” Lists .

画像の操作の改善


img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}
この規則は比較的簡単です-ブロック要素として任意の画像をレンダリングし、その設定によってコンテナの外側に壊れるその能力を削除しますmax-width 100 %.

ベースラインのテキストスタイル


p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

h1,
h2,
h3 {
  line-height: 1.15;
}
最初のルールでは、ブラウザがハイフンを挿入するのではなく、単語の行を壊すことを推奨します.としてMDN . これは私の意見ではなく、典型的な選択です.
上の2番目のルールはline-height 見出し要素の<h1> , <h2> , and <h3> . としてMDN , 主なパラグラフコンテンツだけがline-height 1.5 .まだアクセシビリティを維持している間、見出しはわずかに小さいかもしれませんline-height フォントサイズが大きくなると、より多くの空白が生成されるため、あまりにも遠く離れているヘッダラインにつながる可能性があります.

好ましいスタイル


small {
  font-size: 80%;
}

b,
strong {
  font-weight: bolder;
}

sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}

a:not([class]) {
  text-decoration-skip-ink: auto;
}

a:is([class]) {
  text-decoration: none;
}

input,
button,
textarea,
select {
  font: inherit;
}

button {
  background: none;
  border: none;
  cursor: pointer;
}
上記の規則は、どんなブラウザーの矛盾も遠ざける好ましいスタイルです.彼らが比較的簡単であるので、我々はこれらを速く通り抜けます.
small { 
    font-size: 80%;
}
集合font-size HTML内の任意のテキスト<small> その要素の正規サイズの80 %にタグを付けます.たとえば、我々があるならば<p> 通常のサイズのタグ1rem or 16px , the <small> サイズは0.8rem , or 12.8px .
b, strong { 
    font-weight: bolder; 
}
古いマイクロソフトエッジ(クロムベースの前に)とサファリレンダリング<b> and <strong> 他のブラウザとは異なり、この規則は標準的な大胆さを設定しますfont-weight ) これらのタグにラップされたテキストを表示します.
sub,
sup {
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub {
  bottom: -0.25em;
}
sup {
  top: -0.5em;
}
防止<sub> and <sup> 影響する要素line-height すべてのブラウザで.
a:not([class]) {
  text-decoration-skip-ink: auto;
}

a:is([class]) {
  text-decoration: none;
}
最初の規則はデフォルトスタイルを割り当てるtext-decoration: underline; ) に<a> クラスなしで.第二の規則text-decoration: none;<a> クラスで.これは、あなたが望むスタイリングを得るためにこれらの規則を繰り返す必要があるかもしれない回数を減らすことに非常に便利です.
重要なことは、これらのルールを使用して、それらを最大限に活用を覚えてkeep your code DRY ) - デフォルトのスタイルを維持したいアンカータグにクラスを適用することはありません.
input,
button,
textarea,
select {
  font: inherit;
}
この規則は<input> , <button> , <texture> , and <select> 親要素と同じフォントを使用するか、継承する要素.デフォルトでは、これらは異なるフォントを使用します.
button {
  background: none;
  border: none;
  cursor: pointer;
}
以上がデフォルトbackground and border ボタンを押すと、カーソルが👆🏻 あなたがそれをクリックするとき、何かを提案することは起こります.

パート4 :ブラウザの矛盾を修正する


/*-----Browser Inconsistancy Fixes-----*/
/* Correct the inability to style clickable types in iOS and Safari */
button,
input,
[type='button'],
[type='reset'],
[type='submit'] {
  -webkit-appearance: button;
}

/*
1. Correct the odd appearance in Chrome and Safari.
2. Correct the outline style in Safari.
*/
[type='search'] {
  -webkit-appearance: textfield; /* 1 */
  outline-offset: -2px; /* 2 */
}

/* Remove the inner padding in Chrome and Safari on macOS */
::-webkit-search-decoration {
  -webkit-appearance: none;
}

/* Correct the cursor style of increment and decrement buttons in Safari */
::-webkit-inner-spin-button,
::-webkit-outer-spin-button {
  height: auto;
}

/*
1. Correct the inability to style clickable types in iOS and Safari.
2. Change font properties to 'inherit' in Safari.
*/
::-webkit-file-upload-button {
  -webkit-appearance: button; /* 1 */
  font: inherit; /* 2 */
}

/* Remove the inner border and padding in Firefox */
::-moz-focus-inner {
  border-style: none;
  padding: 0;
}

/* Restore the focus styles unset by the previous rule */
:-moz-focusring {
  outline: 1px dotted ButtonText;
}
上のCSS規則はKent C. Dodds’ 新しいサイトと考え、「彼が彼らを得たならば、彼らは理由のためにそこにいます」と、私が私のCSSリセットにそれらを投げると思いました.彼らはすべての“修正”ブラウザのスタイリング、“正しい”または別のブラウザを他のユーザーと一致するように何かを行う.これらのほとんどはiOSとMacOSのサファリに適用されます.
各ルールについての詳細を学ぶために上記のコードのコメントをお読みください.

第5部:アクセシビリティの向上


/*-----Media Queries-----*/
@media (prefers-reduced-motion: reduce) {
  html:focus-within {
    scroll-behavior: auto;
  }

  *,
  *::before,
  *::after {
    animation-duration: 0.01ms !important;
    animation-iteration-count: 1 !important;
    transition-duration: 0.01ms !important;
    scroll-behavior: auto !important;
  }
}
上記のメディアクエリーは、私がすべてのプロジェクトのために必要とする何かです.これは、Webサイト、モバイルアプリケーション、およびオペレーティングシステムを表示するときに縮小運動を好むユーザーを尊重するため、基本的には、ソフトウェアの任意の部分です.
一部の人々は、彼らが部分的に起因するソフトウェアのあまりに多くの運動を見るとき、酔いとめまいの経験的な発作を報告しましたvestibular disorders .

ラッピング


Phew、それはたくさんあった!
そこで、2つのよく知られた開発者のリセットの集合体であるCSSのリセットがあります.Andy Bell and Josh Comeau , そして、ケントC .ドッドからの若干の借りられたコードnew site .
私はケントのウェブサイトから使用されるコードの断片は、ブラウザの矛盾を修正するために多くのです(サファリのためにたくさん)、ジョシュのCSSのリセットは、ブラウザを容易にするには多くの焦点を当てて/ビルドするのに良い、アンディの同じようにし、いくつかの.
これは、CSSのリセットを行うには、単一の正しい方法がないことに注意することが重要ですが、なぜ2つの間に類似点を共有していることを確認することができますが、彼らは私たちが最後にわずかに異なることを達成することを十分に異なるです.これはもちろん、各開発者のスタイルを反映しているかもしれませんし、フレームワークやCSSライブラリなどの追加のツールがないかもしれません.
自由に感じるview the reset on GitHub そして、あなたのプロジェクトでそれを使用してください!またはあなたの好みに変更することがあります.私はリセットを更新すると、githubレポも更新されます.私は、これについてのあなたの考えを聞くのが好きです、それで、私の上で、または、私を通して私に手を差し伸べる自由に感じてくださいportfolio .
View it on GitHub