CSSスキルをプロにするためのヒント集。
他の素晴らしいリストについては、 @sindresorhusの素晴らしいリストの厳選されたリストをチェックしてください。
box-sizing
unsetすべてのプロパティをリセットする代わりに使用する
:not()ナビゲーションで境界線を適用/適用解除するために使用します
line-heightに追加
body
:focusフォーム要素に設定
nth-child
max-height純粋なCSSスライダーに使用
remグローバルサイジングに使用します。
emローカルサイジングに使用
:rootフレキシブルタイプに使用
font-sizeより良いモバイル体験のためにフォーム要素に設定
display: none間隔として使用される改行に設定
:empty空のHTML要素を非表示にするために使用
CSSリセットは、スタイリング要素のスレートをきれいにして、さまざまなブラウザー間でスタイルの一貫性を強化するのに役立ちます。NormalizeなどのCSSリセットライブラリを使用できます。、または、より単純化されたリセットアプローチを使用できます。
*,
*::before,
*::after {
box-sizing: border-box;
margin: 0;
padding: 0;
}
これで、要素の余白とパディングが削除され
box-sizing、CSSボックスモデルを使用してレイアウトを管理できるようになります。
注:以下の継承box-sizing
のヒントに従う場合は
box-sizing、CSSリセットにプロパティを含めないことを選択できます。
box-sizing
box-sizingから継承しましょう
html:
html {
box-sizing: border-box;
}
*,
*::before,
*::after {
box-sizing: inherit;
}
これにより、
box-sizing他の動作を活用するプラグインや他のコンポーネントを簡単に変更できます。
unsetすべてのプロパティをリセットする代わりに使用する
要素のプロパティをリセットする場合、個々のプロパティをリセットする必要はありません。
button {
background: none;
border: none;
color: inherit;
font: inherit;
outline: none;
padding: 0;
}
all省略形を使用して、要素のすべてのプロパティを指定できます。値をに設定すると
unset、要素のプロパティが初期値に変更されます。
button {
all: unset;
}
注:
allおよび
unset省略形はIE11ではサポートされていません。
:not()ナビゲーションで境界線を適用/適用解除するために使用します
ボーダーを置く代わりに...
/* add border */
.nav li {
border-right: 1px solid #666;
}
...そして最後の要素からそれを外します...
/* remove border */
.nav li:last-child {
border-right: none;
}
...
:not()疑似クラスを使用して、必要な要素にのみ適用します。
.nav li:not(:last-child) {
border-right: 1px solid #666;
}
ここでは、CSSセレクターは人間が説明するように読み取られます。
フォントをリモートでフェッチする前に、フォントがローカルにインストールされているかどうかを確認できます。これもパフォーマンスのヒントです。
@font-face {
font-family: "Dank Mono";
src:
/* Full name */
local("Dank Mono"),
/* Postscript name */
local("Dank Mono"),
/* Otherwise, download it! */
url("//...a.server/fonts/DankMono.woff");
}
code {
font-family: "Dank Mono", system-ui-monospace;
}
このヒントとデモを共有してくれたAdamArgyleへのH/T 。
line-heightに追加
body
line-heightそれぞれ
<p>に
<h*>、、などを追加する必要はありません。別々に。代わりに、次の場所に追加して
bodyください。
body {
line-height: 1.5;
}
このようにして、テキスト要素は
body簡単に継承できます。
:focusフォーム要素に設定
目の見えるキーボードユーザーは、キーボードイベントがページのどこに行くかを決定するためにフォーカスに依存しています。フォーム要素に焦点を合わせて目立たせ、一貫性を持たせてから、ブラウザのデフォルトの実装を作成します。
a:focus,
button:focus,
input:focus,
select:focus,
textarea:focus {
box-shadow: none;
outline: #000 dotted 2px;
outline-offset: .05em;
}
いいえ、それは黒魔術ではありません。要素を垂直方向に中央揃えできます。あなたはフレックスボックスでこれを行うことができます...
html,
body {
height: 100%;
margin: 0;
}
body {
-webkit-align-items: center;
-ms-flex-align: center;
align-items: center;
display: -webkit-flex;
display: flex;
}
...そしてCSSグリッドでも:
body {
display: grid;
height: 100vh;
margin: 0;
place-items: center center;
}
他の何かを中央に配置したいですか?垂直、水平...何か、いつでも、どこでも?CSS-Tricksには、そのすべてを実行するための優れた記事があります。
注: IE11のflexboxでバグのある動作に注意してください。
リストアイテムを実際のコンマ区切りのリストのように見せます。
ul > li:not(:last-child)::after {
content: ",";
}
:not()疑似クラスを使用すると、最後の項目にコンマは追加されません。
注:このヒントは、アクセシビリティ、特にスクリーンリーダーには理想的ではない場合があります。また、ブラウザからのコピー/貼り付けは、CSSで生成されたコンテンツでは機能しません。注意して続行してください。
nth-child
CSSでネガティブ
nth-childを使用して、項目1からnを選択します。
li {
display: none;
}
/* select items 1 through 3 and display them */
li:nth-child(-n+3) {
display: block;
}
または、使用:not()
について少し学習したので、次を試してください。
/* select all items except the first 3 and display them */
li:not(:nth-child(-n+3)) {
display: block;
}
アイコンにSVGを使用しない理由はありません。
.logo {
background: url("logo.svg");
}
SVGはすべての解像度タイプに対応し、IE9までのすべてのブラウザーでサポートされています。.png、.jpg、または.gif-jif-whatevファイルを破棄します。
注:視力のあるユーザー向けのSVGアイコンのみのボタンがあり、SVGの読み込みに失敗した場合、これはアクセシビリティを維持するのに役立ちます。
.no-svg .icon-only::after {
content: attr(aria-label);
}
奇妙な名前かもしれませんが、ユニバーサルセレクター(
*)を隣接する兄弟セレクター()と一緒に使用すると
+、強力なCSS機能を提供できます。
* + * {
margin-top: 1.5em;
}
この例では、他の要素に続くドキュメントのフロー内のすべての要素がを受け取り
margin-top: 1.5emます。
「ロボトミー化されたフクロウ」セレクターの詳細については、AListApartのHeydonPickeringの投稿を参照してください。
max-height純粋なCSSスライダーに使用
max-heightオーバーフローを非表示にして、 CSSのみのスライダーを実装します。
.slider {
max-height: 200px;
overflow-y: hidden;
width: 300px;
}
.slider:hover {
max-height: 600px;
overflow-y: scroll;
}
要素は
max-heightホバー時に値に展開され、オーバーフローの結果としてスライダーが表示されます。
テーブルは扱いにくい場合があります。
table-layout: fixedセルを同じ幅に保つためにを使用してみてください。
.calendar {
table-layout: fixed;
}
痛みのないテーブルレイアウト。
列ガターを操作する場合、flexboxのプロパティを使用して
nth-、、、
first-およびハックを取り除くことができます。
last-child
space-between
.list {
display: flex;
justify-content: space-between;
}
.list .person {
flex-basis: 23%;
}
これで、列の側溝は常に等間隔で表示されます。
<a>要素にテキスト値がないが、
href属性にリンクがある場合にリンクを表示します。
a[href^="http"]:empty::before {
content: attr(href);
}
それはかなり便利です。
「デフォルト」リンクのスタイルを追加します。
a[href]:not([class]) {
color: #008000;
text-decoration: underline;
}
これで、通常は属性を持たないCMSを介して挿入されたリンクは
class、カスケードに一般的に影響を与えることなく区別できるようになります。
固有の比率でボックスを作成するには、divに上部または下部のパディングを適用するだけです。
.container {
height: 0;
padding-bottom: 20%;
position: relative;
}
.container div {
border: 2px dashed #ddd;
height: 100%;
left: 0;
position: absolute;
top: 0;
width: 100%;
}
パディングに20%を使用すると、ボックスの高さが幅の20%に等しくなります。ビューポートの幅に関係なく、子divはアスペクト比(100%/ 20%= 5:1)を維持します。
少しのCSSを使用して、壊れた画像をより美しく見せます。
img {
display: block;
font-family: sans-serif;
font-weight: 300;
height: auto;
line-height: 2;
position: relative;
text-align: center;
width: 100%;
}
Now add pseudo-elements rules to display a user message and URL reference of the broken image:
img::before {
content: "We're sorry, the image below is broken :(";
display: block;
margin-bottom: 10px;
}
img::after {
content: "(url: " attr(src) ")";
display: block;
font-size: 12px;
}
Learn more about styling for this pattern in Ire Aderinokun's original post.
remfor Global Sizing; Use
emfor Local Sizing
After setting the base font size at the root (
html { font-size: 100%; }), set the font size for textual elements to
em:
h2 {
font-size: 2em;
}
p {
font-size: 1em;
}
Then set the font-size for modules to
rem:
article {
font-size: 1.25rem;
}
aside .module {
font-size: .9rem;
}
Now each module becomes compartmentalized and easier to style, more maintainable, and flexible.
This is a great trick for a custom user stylesheet. Avoid overloading a user with sound from a video that autoplays when the page is loaded. If the sound isn't muted, don't show the video:
video[autoplay]:not([muted]) {
display: none;
}
:not()
繰り返しになりますが、疑似クラスの使用を利用しています。
:rootフレキシブルタイプに使用
レスポンシブレイアウトのタイプフォントサイズは、各ビューポートで調整できる必要があります。次を使用して、ビューポートの高さと幅に基づいてフォントサイズを計算できます
:root。
:root {
font-size: calc(1vw + 1vh + .5vmin);
}
root emこれで、次のように計算された値に基づいて単位を利用できます
:root。
body {
font: 1rem/1.6 sans-serif;
}
font-sizeより良いモバイル体験のためにフォーム要素に設定
ドロップダウンがタップされたときにモバイルブラウザ(iOS Safariなど)がHTMLフォーム要素を拡大しないようにするには、セレクタルールに次の項目を追加します。
<select>
font-size
input[type="text"],
input[type="number"],
select,
textarea {
font-size: 16px;
}
ポインタイベントを使用すると、マウスが触れている要素とどのように相互作用するかを指定できます。たとえば、ボタンのデフォルトのポインタイベントを無効にするには、次のようにします。
.button-disabled {
opacity: .5;
pointer-events: none;
}
とても簡単です。
display: none間隔として使用される改行に設定
ハリーロバーツが指摘したように、これは、CMSユーザーが間隔に余分な改行を使用するのを防ぐのに役立ちます。
br + br {
display: none;
}
:empty空のHTML要素を非表示にするために使用
空のHTML要素がある場合、つまり、コンテンツがCMSによってまだ設定されていないか、動的に挿入されていない場合(たとえば、
<p class="error-message"></p>)、レイアウトに不要なスペースが作成されている場合は、
:empty疑似クラスを使用してレイアウト上の要素を非表示にします。
:empty {
display: none;
}
注:空白のある要素は空とは見なされないことに注意してください。例:
<p class="error-message"> </p>。
Chrome、Firefox、Safari、Opera、Edge、IE11の現在のバージョン。
注:翻訳されたヒントの増え続けるリストを維持するために利用できる時間が少なくなりました。新しいヒントを追加するには、それを12以上の翻訳に含める必要があります。そのため、翻訳されたREADMEファイルには、メインのREADMEファイルに記載されているすべてのヒントが含まれていない場合があります。