考え、感じる、Web制作。

Web制作の学習や情報についての記事が中心です。

css3 第6回

css3 疑似セレクタその2

css3の疑似セレクタについては以前、nth-childについて学習した。今回はセレクタに対しコンテンツを挿入できる::beforeと::afterについて学習する。また、要素の1文字目や1列目を対象にするセレクタについても学習する。
f:id:ys_nim_9:20141127000300j:plain

セレクタの前に挿入

<p id="mae">(1)前に文字を表示</p>

サンプル(1)の赤文字部は、htmlに書かれていない文字が表示している。css3ではセレクタ名に続けて::beforeと書くと、セレクタの前に文字や画像を挿入することができる。この方法での記述はブラウザから見るhtmlソースに反映されない。つまり、SEOには全く寄与しない。

#mae::before{
  content:'赤文字はcssで追記した ';
  color:red;
}

セレクタの後ろに挿入

<p id="ushiro">(2)後ろの画像はcssで追加した</p>

サンプル画像の(2)は、htmlに書かれていない画像が表示されている。画像をドラッグしても掴むことができないため、背景画像のようにも思える。しかし実際は、cssで::afterという疑似セレクタを用い表示している。

#ushiro::after{
  content:url(photo.jpg);
}

要素の最初の文字を対象にする

<p id="saisho">(3)先頭の文字を青く大きく。
<br>小カッコ付数値は1文字扱い。
<br>br区切りの2行目以降は無効。</p>

従来、文章の最初の文字だけ色を変えたい場合、spanタグを用いcssを記述する必要があった。css3では::first-letterという疑似セレクタを用いることで、テキストはそのままに先頭文字を対象にできる。サンプル画像の(3)では、文字の色に加えサイズも大きくした。

#saisho::first-letter{
  color:blue;
  font-size:200%;
}

要素の先頭行を対象にする

<p id="back">(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。(4)1行目を緑に。<br>(4)1行目を緑に(br区切り)</p>

サンプル画像(4)のように、要素の先頭行を対象にする疑似セレクタが::first-lineだ。注意すへき点として、ブラウザ上での先頭行を対象にしている、ということである。サンプル画像ではwidthにより改行された2行目以降の文字にはcssが影響していない。htmlではbrで区切られるまでは1行扱いと感じられるが、この疑似セレクタは実際の表示に準じている。

#back::first-line{
  background-color:#4b7;
}

cssだけで吹き出しを描く

サンプル画像の(5)以降は、cssだけで吹き出しを描くテクニックについて述べる。

  <p>(5)borderで三角形を作る</p>
  <div id="fukidashi1"></div>

  <p>(6)1つを残し透明に</p>
  <div id="fukidashi2"></div>

  <p>(7)通常のboxと組み合わせる</p>
  <div id="fukidashi3">吹き出し</div>

  <p>(8)横向きもできる</p>
  <div id="fukidashi4">吹き出し</div>
borderで三角形を

コンテンツのないboxを作り、widthを0にする。するとborderだけで(5)のような4つの三角形で構成された矩形を描くことができる。

#fukidashi1{
  width:0px;
  border-top:solid 50px #4b7;
  border-right:solid 50px #74b;
  border-bottom:solid 50px #b74;
  border-left:solid 50px #bc1;
  text-align:center;
}
三角形を1つだけに

次に、必要な三角形を残し、それ以外を透明にする。
背景色と同じにする手段は、背景が単色塗の場合にしか使えない。このため、ここではborder-colorにtransparentを指定することで透明にしている。

#fukidashi2{
  width:0px;
  border:solid #4b7;
  border-color:#4b7 transparent transparent;
  border-width:50px;
}
通常のboxと組み合わせる

三角形の位置を調整し、通常のboxに対し吹き出しらしく見える位置に配置する。ここで先に学習した::afterが登場する。::afterで空のcontentを配置し、そのborderとして三角形を描く。配置手段としては、positionを用いる。

#fukidashi3{
  background:#4b7;
  width:200px;
  height:140px;
  line-height:140px;
  text-align:center;
  position:relative;
}
#fukidashi3::after{
  content:'';
  width:0px;
  border:solid #4b7;
  border-color:#4b7 transparent transparent;
  border-width:50px;
  position:absolute;
  top:120px;
  left:20px;
}
三角形を横に付ける

先の例ではborder-topを使ったが、この位置を変えれば横向きの吹き出しを作ることも可能だ。

#fukidashi4{
  background:#74b;
  width:200px;
  height:140px;
  line-height:140px;
  text-align:center;
  position:relative;
  border-radius:30px 30px;
  color:white;
}

#fukidashi4::after{
  content:'';
  width:0px;
  border:solid #74b;
  border-color:transparent transparent transparent #74b;
  border-width:20px;
  position:absolute;
  top:40px;
  left:200px;
}