韓国語版(한국어) Translation by 조은
(a.k.a. Matori / @ub_pnr)
株式会社シフトブレイン
日本語訳を見るときには、原文と一緒に見ることをお勧めします。
また、誤訳などを見つけたら翻訳者に連絡を取ってみるとよいでしょう。
property: value
property: value;
property: value;
{
property: value;
property: value;
}
selector-lists {
property: value;
property: value;
}
セレクターについては Selectors Level 3 を参照ください。
@ルールは、そのルールによって構文が異なります。
詳しくは個別の仕様を参照してください。
@charset "UTF-8";
@import url("...");
@keyframes foo {
from { property: value; }
to { property: value; }
}
他にも様々な@ルールがあります。
コメントは1種類のみです。
/* ここはコメントです。 */
/*
ここはコメントです。
*/
コメント記号から行末までをコメントとする
1行コメントはありませんので
// ここはコメントです。
# ここはコメントです。
こういうことはできません。
それぞれの仕様に載っているプロパティーの仕様表を見てみよう。
Name: プロパティー名
Value: 正規の値と構文
Initial: 初期値
Applies to: このプロパティーが適用される要素
Inherited: プロパティーが継承されるかどうか
Percentages: パーセンテージがどのように解釈されるか
Media: このプロパティーが適用されるメディアグループ
Computed value: 値がどのように計算されるか
Animatable: アニメーション可能かどうか
どの順番で書けばいいの?
border
ショートハンドプロパティー
border: 1px solid red;
border: red 1px solid;
border: solid red 1px;
box-shadow
プロパティー値の構文Drop Shadows: the ‘box-shadow’ property
box-shadow: none | <shadow> [ , <shadow> ]*
<shadow> = inset? && <length>{2,4} && <color>?
キーワードは仕様にある文字通りに記述します。/
や,
も同様です。
box-shadow: none | <shadow> [ , <shadow> ]*
<shadow> = inset? && <length>{2,4} && <color>?
<
と>
で囲まれているものはデータ型を表します。
box-shadow: none | <shadow> [ , <shadow> ]*
<shadow> = inset? && <length>{2,4} && <color>?
並置されている単語は、その順序を守って記述します。
counter-set: [ <custom-ident> <integer>? ]+ | none
&&
(ダブルアンパサンド)&&
は2つ以上の構成要素の区切りで、それらの全てを順不同で記述します。
<shadow> = inset? && <length>{2,4} && <color>?
||
(ダブルバー)||
は2つ以上の構成要素の区切りで、それらの1つ以上を順不同で記述します。
border: <line-width> || <line-style> || <color>
|
(シングルバー)|
は2つ以上の構成要素の区切りで、それらの1つを記述します。
box-shadow: none | <shadow> [ , <shadow> ]*
[
と]
[
と]
の組み合わせはグルーピングに使用されます。
box-shadow: none | <shadow> [ , <shadow> ]*
a b | c || d && e f
優先度順に見てみると……
[ a b ] | [ c || [ d && [ e f ]]]
[a b]
と[e f]
はその表記通りに記述。d
と[e f]
はどちらも必須で順不同。c
と[d && [e f]]
はc
のみ、[d && [e f]]
のみ、[a b]
と[c || [d && [e f]]]
はどちらか片方を記述。*
は、先行する型、単語、グループが0回以上出現することを示します。+
は、先行する型、単語、グループが1回以上出現することを示します。?
は、先行する型、単語、グループが任意であることを示します。{A}
は、先行する型、単語、グループがA回出現することを示します。{A,B}
は、先行する型、単語、グループが最低A回、最大B回出現することを示します。#
はコンマによって区切られる、先行する型、単語、グループが1回以上出現することを示します。!
は、そのグループが必須且つ、1つ以上の値を生成しなければならないことを示します。box-shadow
プロパティーの値は……box-shadow: none | <shadow> [ , <shadow> ]*
none
キーワード、またはコンマ区切りによって繰り返し可能な<shadow>
型、これらのどれかを指定できます。<shadow> = inset? && <length>{2,4} && <color>?
であるので……
inset
キーワード、2回以上4回以内繰り返される<length>
型、<color>
型の組み合わせとなります。inset
キーワード、<color>
型は任意ですが、2回以上4回以内繰り返される<length>
型と共に記述する必要があります。
また、繰り返される<length>
型がそれぞれ何を示すのかは直後に記載されています。
なお、現在の<shadow>
型の構文で表示がうまくいかない場合があります。
inset
が<length>{2,4}
と<color>
の間に入った場合です。
box-shadow: 1em 1em inset red;
box-shadow: red inset 1em 1em;
古い<shadow>
型の構文は次のようなものでしたので、
現在の仕様とも互換性のあるこちらに合わせておくと安全です。
<shadow> = inset? && [<length>{2,4} && <color>?]
border
ショートハンドプロパティー<line-width> || <line-style> || <color>
それぞれ順不同であるので、
border: 1px solid red;
border: red 1px solid;
border: solid red 1px;
仕様上はどの順番で書いても構いません。
各プロパティーに指定できる値の、様々な型について。
プロパティーごとに決められたキーワード。
margin-top: auto;
font-size: medium;
text-transform: uppercase;
先ほどのbox-shadow
でいうとnone
とinset
がそれにあたります。
全てのプロパティーに適用できるキーワード。
現在のところ、以下の3つがあります。
initial
: プロパティーの初期値を示します。inherit
: 親からそのプロパティーの算出値を継承します。unset
: そのプロパティーが継承されるかどうかに応じて、initial
またはinherit
になります。<custom-ident>
型
定義済みキーワードとして解釈されない、作者によるCSS識別子。
使用できる文字などの詳細は仕様をご確認ください。
counter-increment: my-counter;
animation-name: rotation360;
will-change: transform;
.foo { animation-name: none; }
@keyframes none {
to { opacity: 0; }
}
animation-name
の値は
<single-animation-name>#
<single-animation-name> = none | <custom-ident>
であるのでnone
は定義済みキーワードとなります。
よってこの指定は妥当ではありません。
解決例としては以下の様なものがあります。
.foo { animation-name: fade-out; }
@keyframes fade-out {
to { opacity: 0; }
}
<string>
型
<string>
は、二重引用符または一重引用符によって囲まれた文字列です。
.foo::before {
content: "before!";
}
.bar::after {
content: 'after!';
}
<url>
型リソースの所在を指定します。
<url> = url( <string> <url-modifier>* )
例
background-image: url("./kawaii-icon.png");
background-image: url("icons.svg#kawaii");
@import
の場合は関数式ではなく<string>
のみでの指定も可能です。
@import "./reset.css"
互換性を保つため、引用符なしでの指定も可能となっています。
background-image: url(./kawaii-icon.png);
ただし、これらの代替記法で<url-modifier>
は使用できません。
<integer>
型
整数。
1つ以上の10進数0
〜9
の数字の並びで、
数字の前に+
-
を付与することができます。
範囲は制限されることがあります。
z-index: 0;
order: -1;
counter-increment: my-counter 1;
<number>
型
実数。
<integer>
または0個以上の数字の後に.
と1つ以上の10進数字、
そして任意でe
またはE
および整数から構成される指数のこと。
範囲は制限されることがあります。
line-height: 1.6; /* 0以上 */
opacity: 0.2; /* 0.0 ~ 1.0 */
<percentage>
型
パーセンテージ。
<number>
とパーセント記号(%
)で構成されます。
パーセンテージは常に別の値に対して相対的となります。
パーセンテージが使用できるプロパティーは、
それが何を基準にするのか定義します。
font-size: 200%; /* 親のフォントサイズ */
padding-top: 50%; /* 包含ブロックの幅 */
<number>
の直後に単位がつくもの。
<percentage>
は含まれません。
<length>
型
長さ。
長さが0
のときは<length>
型は単位を省略でき、
構文としては<number>
と同じになります。
また、長さの範囲は制限されることがあります。
em
: この単位が使用される要素のfont-size
プロパティーの算出値。ex
: 利用可能な最初のフォントのxの高さ(x-height)。ch
: 描画に利用されているフォントの0(U+0030)のグリフの送り幅。rem
: ルート要素のfont-size
の算出値。rem
を除いてフォントに相対的な長さは使用される要素のフォント計量法を参照します。font-size
プロパティーに出現する場合は親要素のフォント計量法を参照します。font
プロパティーの初期値に対応するフォント計量法を参照します。margin: 1rem; /* ルートのフォントサイズ */
padding: 0.5ch; /* この要素のフォントサイズ */
font-size: 1.2em; /* 親のフォントサイズ */
rem
についてhtml
要素です。font-size
の初期値はmedium
です。vw
: 初期包含ブロックの幅の1%。vh
: 初期包含ブロックの高さの1%。vmin
: vw
とvh
の小さい方に等しくなります。vm
という単位でした。Internet Explorer 9 がvm
を使っています。vmax
: vw
とvh
の大きい方に等しくなります。overflow
の値がauto
の場合、スクロールバーは存在しないものと見なされます。html {width: 100vw; }
とhtml {width: 100%; }
は違う長さになります。cm
: センチメートル。1cm = (96/2.54)pxmm
: ミリメートル。1mm = (1/10)cmq
: クォーターミリメートル。1q = (1/40)cmin
: インチ。1in = 2.54cm = 96pxpc
: パイカ。1pc = 1/6inpt
: ポイント。1pt = 1/72in
単位はpx
のみ。
1px
は画面の1ドット。1px
平方区画は2x2=4ドットにあたります。1px
平方を覆うのに必要な画面ドット数は増加します。px
で書いておけば問題ないです。<angle>
型角度を表します。
deg
: 度数法。お馴染みのやつです。円の全周は360deg
。grad
: グラジアン。1直角を100とする単位で、円の全周は400grad
。rad
: 弧度法。円の全周は2πrad
。turn
: 回転数。円の全周は1turn
。数値が0
でも単位の省略はできません。
<time>
型時間を表します。
s
: 秒。ms
: ミリ秒。1000ms
は1s
と等しくなります。数値が0
でも単位の省略はできません。
<frequency>
型周波数を表します。
今のところ使い道がありません。
(現在、この型をサポートしているブラウザーは存在しません)
Hz
: ヘルツ。1秒あたりの周波数です。kHz
: キロヘルツ。1kHz
は1000Hz
と等しくなります。
CSS2における聴覚メディアグループのpitch
プロパティーで使用できたので、Opera Prestoにはサポートしているバージョンがありました。(現在のOperaはPrestoではなくBlinkです)
<resolution>
型解像度を表し、メディアクエリーなどに用いられます。
dpi
: インチあたりのドット数。dpcm
: センチメートルあたりのドット数。dppx
: px
単位あたりのドット数。ここまでCSS Values and Units Module Level 3(ED)を元に見てきましたが、他のモジュールで定義されている型もあります。
<color>
型CSS Color Module Level 3で定義されています。
transparent
キーワード。currentColor
キーワード。rgb()
とrgba()
関数。hsl()
とhsla()
関数CSS Color Module Level 4ではもうちょっと増えそうです。
<image>
<position>
<ratio>
<blend-mode>
<counter>
<gradient>
<shape>
<timing-function>
……などがあります(他にもあります)。
calc()
<length>
, <frequency>
, <angle>
, <time>
, <number>
, <integer>
が利用できる箇所で使用できます。+
と減算-
の記号の前後には空白が必要です。.foo {
width: calc(100% - 20px);
font-size: calc(16px + 0.1vw);
margin-left: calc((50% + 10vh) / 2 );
}
attr()
要素の属性値を参照します。
attr( <attr-name> <type-or-unit>? [ , <attr-fallback> ]? )
という構文ですが、現在のブラウザーではattr(<attr-name>)
という基本形のみ、使用箇所はcontent
プロパティーという形式がサポートされています。
仕様の上では要素の属性値に指定された長さや色といった様々なCSSの型を指定した上で属性値を参照し、プロパティーの値として使用できることになっています(あとから削除されるかもしれませんが)。
現在の仕様がフルサポートされた場合は、
こういうことができることになっています。
<div data-z="7">...</div>
---
div { z-index: attr(data-z integer); }
今のところ、実際は次のような感じでしか使えません。
<div data-t="FOO!">...</div>
---
div::before { content: attr(data-t); }
toggle()
実装しているブラウザーが今のところ存在しません。
ul {
list-style-type: toggle(disc, circle, square, box);
}
これは次のようになることになっています。
ul { list-style-type: disc; }
ul ul { list-style-type: circle; }
ul ul ul { list-style-type: square; }
ul ul ul ul { list-style-type: box; }
ul ul ul ul ul { list-style-type: disc; }
ul ul ul ul ul ul { list-style-type: circle; }
...
別のモジュールで定義された、型特有の関数があります。
いろいろと紹介しましたが、一度に覚えなくても様々なプロパティーの仕様を見ていれば次第に覚えていけると思います。
これらを知らなくてもCSSは書けますが、仕様を見るときを含め、実際にぶつかっている問題解決の手助けになることもあります。
今回は大雑把に紹介しましたが、より詳しくは実際に仕様をご覧ください。
眺めるだけでも結構楽しいですよ。