Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSS】CSS模写 再び!【格子模様】

 どうも!LSSです!!

 

 今日は、以前にやった、

に続いて、またしても さじ(id:conasaji)さん出題のお題?に挑戦してみました!

f:id:little_strange:20200608213426p:plain

小田原城の寄木細工

 

↑上がさじさんがイラレで描かれた画像、下がそれをCSSで模写してみたものです。
(今回、色はツールを使って盗みました。なのに文字の色が違うような^^;;;)

元記事は↓こちら!

 

 

コード

<div style="width: 320px; height: 65px; font-size: 29px; color: #ffe9a5; text-align: center; text-shadow: 2px 2px 3px gray; font-weight: bold; background-image: linear-gradient(90deg,#cd9f0e 50%,#70570e 50%),linear-gradient(90deg,#70570e 50%,#cd9f0e 50%); background-size: 80px 20px,80px 20px; background-position: 0% 25px,0% 45px; background-repeat: repeat-x;">小田原城の寄木細工</div>

 

コード解説

の前に考え方から

格子模様、どうやったら表現できるんだろう?

と、まず、

f:id:little_strange:20200608220114p:plain

この一行分について考えてみると、

background-image: linear-gradient(90deg,#cd9f0e 50%,#70570e 50%);
というコードで、こんな風になる

を、横に繰り返し並べる事でいけそうです。

 

色を入れ替えると、もう一行分も作れますね。

 

background-size と background-positionというプロパティ

「そもそもbackground-imageは画像を扱うプロパティであり、linear-gradientはグラデーションのルールを記述する事で画像の代わりとしているもの」
と考えないと、なかなか理解するのが難しかったです^^;

 

background-sizeは「画像のサイズ」、background-positionは「画像の配置位置」

 

今回のコードで、

background-size: 80px 20px,80px 20px;
background-position: 0% 25px,0% 45px;
としていますが、いったん途中にあるカンマ以降を切り捨ててみると、
background-size: 80px 20px;
background-position: 0% 25px;
となります。

 

background-sizeは「画像のサイズ」なので、backgroun-imageで指定したこれを「ひとつの画像」とみなした時に「横80px、縦20px」のサイズの画像として扱います。

 

backgroun-positionは「画像の配置位置」で、「0% 25px」と指定する事で「0%(横位置は左端から)、縦位置は上から25pxの位置」に配置する、という指定になります。
(つまり、上25pxはあけておく、という事ですね)

 

そして、background-repeat: repeat-x;

 repeat-xは「横方向に繰り返す」という意味ですが、もっと言うと「横方向には繰り返すが、縦方向には繰り返さない」という意味でもあります。
縦方向に繰り返さない、としておかないと、positionの指定であけたところまで結局繰り返しで描かれてしまい、結構悩まされました^^;;;;;

 

ここからコード解説!

<div style="

width: 320px; height: 65px;
font-size: 29px;
color: #ffe9a5;
text-align: center;
text-shadow: 2px 2px 3px gray;
font-weight: bold;

background-image:
   linear-gradient(90deg,#cd9f0e 50%,#70570e 50%)
   , linear-gradient(90deg,#70570e 50%,#cd9f0e 50%);
background-size:
   80px 20px
 , 80px 20px;
background-position:
   0% 25px
 , 0% 45px;
background-repeat: repeat-x;

">
小田原城の寄木細工
</div>

意味が分かりやすいように、改行+字下げを入れました。

 

width: 320px; height: 65px;
font-size: 29px;
color: #ffe9a5;
text-align: center;
text-shadow: 2px 2px 3px gray;
font-weight: bold;

この部分は今回の主題「格子模様」以外の部分の指定です。

「全体の幅は320px、高さは65px。
 文字サイズは29px、
 文字色は#ffe9a5。
 文字は中央寄せ。
 影は文字の右2px、下2pxずらした位置に3px幅でぼかした 灰色(gray)で落とす。
 文字の太さは太め(bold)」

という指定になります。

 

 

background-image:
   linear-gradient(90deg,#cd9f0e 50%,#70570e 50%)
   , linear-gradient(90deg,#70570e 50%,#cd9f0e 50%);

背景の画像イメージ(となるグラデ)を2種類、用意します。
カンマで区切る事で、複数種類指定する事ができます。 

  

background-size:
   80px 20px
 , 80px 20px;

1つめの画像、2つめの画像(といってもlinear-gradientによる仮想イメージですが)のサイズをそれぞれ指定しています。

 

background-position:
   0% 25px
 , 0% 45px; 

1つめの画像、2つめの画像の描画開始位置(画像の左上角をあてる位置) を指定しています。
横位置はどちらも0%ですが、縦位置を「1つめは上から25px、2つめは上から45px」の位置にずらしています。


画像サイズを「高さ20px」と指定しているので、

上から0px~24pxまでは空き、25px~44pxは1つめの画像用の場所、45px~64pxは2つめの画像用の場所

と割り当てる指定、って事になります。

 

background-repeat: repeat-x;

で、それを「横に繰り返す(縦には繰り返さない)」とする事で、

小田原城の寄木細工

こんな風に描画されるCSSの完成です^^
(サイズ感が分かりやすいように枠線つけました)

 

 

もうひとつのお題 

沖縄のシーサー

 

色と数値をちょこっと変えただけのコード

<div style="width: 320px; height: 65px; font-size: 29px; color: yellow; text-align: center; text-shadow: 1px 1px 2px green; background-image: linear-gradient(90deg,#ff2727 50%,#ffb121 50%),linear-gradient(90deg,#ffb121 50%,#ff2727 50%); background-size: 80px 20px,80px 20px; background-position: 0% 25px,0% 45px; background-repeat: repeat-x;">沖縄のシーサー</div>

 

 

やってみて凄く勉強になりました!

今まで「マーカー」って「上から下に向かうlinear-gradient」で基本、作っていましたが、今回「右に向かう」もので作る必要性に迫られました。

 

「右に向かう」で作るマーカー、っていうだけで十分ひとつの記事ネタになると思いましたが、それをすっとばしたのが今回の記事ですw

 

CSSでマーカー(蛍光ペン、という表現も含め)のやり方の解説サイトは多数ありますが、ほとんどが「上から下のlinear-gradient」パターン(そっちのほうが簡易だからですね)

 

が、世の中には「右に向かうマーカー」を使用したサイト・ブログも多数見かけますね。

 

…って思ってたら、そもそもLSSのブログも、h3見出しになっているのは
「右に向かって透明化していく赤いマーカー」
だった!という(はてなブログのテーマそのまま)オチでした^^;;;;;

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^