フォントマッチングに関して一般的な部分は section 12 で説明したが,ここではとくに補足する必要のある部分を解説する。
font-weight 属性は normal,bold,bolder,lighter と,100 から 900 までの 100 刻みの数値をキーワードとする。これが現実のフォントフェイスとどう関わっているかを知る必要がある。
フォントには,同じフォント名を持っていてもその変体が存在するものがある。たとえば同じ Arial でも通常のもの,ボールド,イタリックなどである。このなかで font-weight 属性は文字の太さが異なる変体を選択する役割を負う。
まず,復習しておくと,nomal,bold はそれぞれ 400,700 と同じである。なぜ数値を使うかというと,複数のフォントの間で太さを表す語句に客観的な一貫性が見られないからである。欧文フォントでは,Regular,Medium,Normal,Book などが標準の太さなのだが,使われ方がフォントによって微妙に違っていたりすることもある。和文でも中細とか特太とか極太とか何ともいろいろである。
太さと数値の対応づけはこれという決定的なものはなく,おおよそ次のようになるとしかいえない。
注意したいのは太さの変体が 9 つを超えたらもちろん,9 つ以下でも関連づけられない変体があることである。たとえば,Nomal,Bold と Bold より太い変体が 3 つある場合,Nomal は 400,Bold は 700 に関連づけられる。そして,Bold より太い変体は順に 800,900 と関連づけられ,いちばん太いものははみ出してしまい関連づけされない。ちなみにこの場合,100 から 300,それと 500 は 400 と同じ,600 は 700 と同じになる。
和文に関しては,ある環境に太さの異なる複数の変体があること,ましてや 9 つもあることは少ない。和文でのポイントは,関連づけられなかった数値がいかに埋められるかということである。
次に考えるのは,キーワード bolder,lighter のふるまいである。前にも述べたようにこのキーワードは継承された font-weight 属性の値を 100 増やすあるいは減らすものではない。
これらのキーワードは現在よりより太い(より細い)関連づけられた変体に変えるものである。たとえば,現在 400 で関連づけられているのが 300,400,700,800 の場合,bolder によって 700 に,lighter によって 300 になる。この場合,関連づけられていず,埋められた 600 は 700 と同じ太さになってはいるが,bolder で 600 にならず,直接関連づけられた 700 になることに注意したい。もしそれ以上太い(細い)ものがない場合は単に値を 100 大きく(小さく)するが,900(100)を超えてしまうときはそのままになる。
font-weight 属性の継承は数値で行われる。したがって,同じ bolder を指定したときでも,結果の値が異なり,継承される値が異なることがある。
たとえば,太さ 300,400,500,700 が関連づけられている場合(フォント A)と,同じく 400,700 が関連づけられている場合(フォント B)で,現在 400 の font-weight に bolder を指定するとどうなるか。A は 500,B は 700 に font-weight は設定される。そして,それぞれその値で継承される。同じ指定なのに,継承される値が異なってしまうのである。もし,継承されたあとで font-family 属性を指定したりすると,話はますます複雑になる。太さ 400,500,700 が関連づけられたフォント C に変えるとどうなるか。A から継承された場合には 500 の変体が,B からの場合は 700 の変体が使われる。bolder を指定して font-family を C に変えたという同じ操作でも,ここまで結果が異なるのである。
このように,フォントに関しては環境に左右される部分が多いので,一意な結果は保証されない。フォントの指定はそれだけ熟慮が必要である。事実,font-weight 属性で保証されるのは,値が大きく(小さく)なると少なくとも文字が細く(太く)ならないことだけである。