ヘッダに画像を指定するのを止めて、CSS3だけでヘアライン調(メタル調)を再現してみました。違和感なく再現できた気がするのでやり方を紹介します。
参考サイト
「ヘアライン CSS」で検索すると上位に表示される日本語サイトが紹介している「Brushed Metal」を参考にします。
Brushed Metal – Repeating background gradients
http://simurai.com/lab/2011/08/21/brushed-metal
CSSテスト1 参考サイトを真似する
「Brushed Metal」のCSSを抜粋するとこんな感じ。
.metal.linear {
width: 100px;
height: 80px;
margin-bottom:10px;
border-radius: .5em;
background-image: -webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 6%, hsla(0,0%,100%, .1) 7.5%),
-webkit-repeating-linear-gradient(left, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 4%, hsla(0,0%, 0%,.03) 4.5%),
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2%, hsla(0,0%,100%,.15) 2.2%),
linear-gradient(180deg, hsl(0,0%,78%) 0%,
hsl(0,0%,90%) 47%,
hsl(0,0%,78%) 53%,
hsl(0,0%,70%) 100%);
}
これをブラウザに解釈させるとこうなります。
CSSテスト2 CSSそのままに枠を広げる
次にこのCSSを幅いっぱいの枠に反映させるとどうなるか。ヘアライン風の縦縞は3種類の縦縞-webkit-repeating-linear-gradientの幅をパーセントで指定することでランダム感を出しているのですが、一つの縞が太すぎて違和感ありまくりです。
metal2のCSS.box{
width:100%;
height:100px;
border:1px solid;
margin-bottom:10px;}
.metal2 {
background-image:
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 6%, hsla(0,0%,100%, .1) 7.5%),
-webkit-repeating-linear-gradient(left, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 4%, hsla(0,0%, 0%,.03) 4.5%),
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2%, hsla(0,0%,100%,.15) 2.2%),
linear-gradient(180deg, hsl(0,0%,78%) 0%,
hsl(0,0%,90%) 47%,
hsl(0,0%,78%) 53%,
hsl(0,0%,70%) 100%);
}
CSSテスト3 -webkit-repeating-linear-gradientの幅を%からpxに
縦縞の太さを%からpxに変更することで縦縞の違和感が気にならなくなりました。
metal3のCSS.metal3 {
background-image:
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 6px, hsla(0,0%,100%, .1) 7.5px),
-webkit-repeating-linear-gradient(left, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 4px, hsla(0,0%, 0%,.03) 4.5px),
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1.2px, hsla(0,0%,100%,.15) 2.2px),
linear-gradient(180deg, hsl(0,0%,78%) 0%,
hsl(0,0%,90%) 47%,
hsl(0,0%,78%) 53%,
hsl(0,0%,70%) 100%);
}
CSSテスト4 -webkit-repeating-linear-gradientの幅を整数化
-webkit-repeating-linear-gradientの幅が1.5pxなど小数点がついていても意味がないので整数化します。CSSテスト3よりも縦縞が細くなって本物っぽくなってきました。
metal4のCSS.metal4 {
background-image:
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 5px, hsla(0,0%,100%, .1) 7px),
-webkit-repeating-linear-gradient(left, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 3px, hsla(0,0%, 0%,.03) 4px),
-webkit-repeating-linear-gradient(left, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1px, hsla(0,0%,100%,.15) 2px),
linear-gradient(180deg, hsl(0,0%,78%) 0%,
hsl(0,0%,90%) 47%,
hsl(0,0%,78%) 53%,
hsl(0,0%,70%) 100%);
}
CSSテスト5 ベンダープレフィックスを取り除く
元の記事は2011年のもの。この頃はベンダープレフィックス付きの-webkit-repeating-linear-gradientでないと実現できなかったようですが、今は標準化されているのでベンダープレフィックスを取り除いたrepeating-linear-gradientに変更します。
またこの時「left」は「to right」に値を置き換える必要があります。
metal5のCSS.metal5 {
background-image:
repeating-linear-gradient(to right, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 5px, hsla(0,0%,100%, .1) 7px),
repeating-linear-gradient(to right, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 3px, hsla(0,0%, 0%,.03) 4px),
repeating-linear-gradient(to right, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1px, hsla(0,0%,100%,.15) 2px),
linear-gradient(180deg, hsl(0,0%,78%) 0%,
hsl(0,0%,90%) 47%,
hsl(0,0%,78%) 53%,
hsl(0,0%,70%) 100%);
}
CSSテスト6 自然に見せるための試行錯誤
グラデーションが水平だとわざとらしいので、適当に角度をつけて中心を右寄りにずらします。修正するのはlinear-gradient関数。180degを好みの数値に変更することで角度を調整でき、中心のオフセットはhsl()の後のパーセントの値を変更します。
metal6のCSS.metal6 {
background-image:
repeating-linear-gradient(to right, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 5px, hsla(0,0%,100%, .1) 7px),
repeating-linear-gradient(to right, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 3px, hsla(0,0%, 0%,.03) 4px),
repeating-linear-gradient(to right, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1px, hsla(0,0%,100%,.15) 2px),
linear-gradient(350deg, hsl(0,0%,78%) 0%,
hsl(0,0%,90%) 37%,
hsl(0,0%,78%) 76%,
hsl(0,0%,70%) 100%);}
}
CSSテスト7 真鍮風に変更する
linear-gradientに色相と彩度を追加することで、他の金属風にすることもできます。
metal7のCSS.metal7 {
background-image:
repeating-linear-gradient(to right, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 5px, hsla(0,0%,100%, .1) 7px),
repeating-linear-gradient(to right, hsla(0,0%, 0%,0) 0%, hsla(0,0%, 0%,0) 3px, hsla(0,0%, 0%,.03) 4px),
repeating-linear-gradient(to right, hsla(0,0%,100%,0) 0%, hsla(0,0%,100%,0) 1px, hsla(0,0%,100%,.15) 2px),
linear-gradient(350deg, hsl(60,60%,78%) 0%,
hsl(60,60%,90%) 37%,
hsl(60,60%,78%) 76%,
hsl(60,60%,70%) 100%);}
}