画像を使わずCSSだけで任意の間隔の破線を描く
cssで破線を使おうと思ったらdotted
とdashed
の2種類しか用意されていないので、それ以外の間隔の破線を使用したい場合にはあらかじめ白黒のgif画像を用意して、背景に繰り返して使用する事が多いです。
しかしCSS3のlinear-gradientを使用すれば任意の間隔の破線を描画する事が可能です。
CSS3を使用するので対応ブラウザがちょっと狭くなりますが1、画像を用意するのとくらべて線分や間隔の調整も容易になりますし、Retinaディスプレイにも対応する事を考えたら(奇数の破線を使用する場合など)2種類の画像を用意する手間が省けますのでCSSで描画する方が楽チンです。
手順
やり方は下記の4つの指定をすれば良いだけです。
- 破線の部分は
background-image
を使用して背景画像として描画します - 縞模様は
linear-gradient
を使用してグラデーションの濃淡で表現します color-stops
を使用して線分と間隔の開始と終了の位置をそれぞれ設定します- 最後に縞模様1ブロック分を
background-size
で区切ります
SassとCompassを使用するとこんな感じで4行で指定できます。
color-stopsの部分を調整すれば破線の間隔を変更する事が可能です。px指定も勿論可能です。
破線の場合は色をつける部分とつけない部分の2色なのでcolor-stops
の指定がそんなに面倒では無いです。線分の終了位置と余白の開始位置を同じに設定すれば境目はグラデーションにならずに綺麗に描画されます。間隔の部分は透過させるのでtransparent
で区切っておきます。
Mixin作った
Sassを使っているので、使い回しがきくようにMixinにしておきました。
呼び出す時には+dotted(色, 線分, 間隔, 高さ)
で呼び出すだけなので簡単に使用できます。
斜線もできそう
repeating-linear-gradient
を使用すると斜線もできるようなので、ちょっと試してみました。
錯視みたいですね。
辛うじて表示できているように見えますが、入力している値によってはたまにズレが出てしまいます・・・
-
linear-gradientを使用するので古いIEでは表示ができません。対応していないブラウザ用には
background
で普通に背景色を指定しておくと良いかと思います。 ↩
Fri, 28 Feb 2014
Markup