web制作のしおり

日々の学習をアウトプットします。

53.疑似クラスとは違う?疑似要素。 ~指定した要素の「内容」にスタイル適用したり、要素を生成して差し込んだり~

え、疑似クラスと疑似要素違うの?

擬似クラスを調べた時に初めて知りました。

 

擬似クラスは、指定した要素の状態に対してスタイルを適用するもの。

それに対して、疑似要素はどんなものでしょうか。

 

では、早速やっていきましょう。

 

疑似要素とは

「指定した要素「内」の特定部分にスタイルを適用したり、指定した要素の前後に新たに要素を生成したりするものです。」

どんな種類があるのか。

  • ::after
  • ::backdrop Experimental
  • ::before
  • ::cue
  • ::cue-region
  • ::file-selector-button
  • ::grammar-error Experimental
  • ::marker Experimental
  • ::part() Experimental
  • ::placeholder Experimental
  • ::selection
  • ::slotted()
  • ::spelling-error Experimental
  • ::target-text Experimental

多い…。

とはいえ、調べたところ実務で主に使うのは殆どbeforeとafterのようですね。

なので今回はこの2つについて重点的に確認していきます。

因みに、疑似クラスはコロンが1つ、疑似要素はコロンが2つです、念のため。

::beforeと::after

これはセレクタで指定した要素の「内容」の直前または直後に、要素を生成し、生成した要素にスタイルを適用します。

また、生成した要素の「内容」に関してもCSSへ記述できてしまう。

疑似要素を初めて知った時の私は

「え、これ、やばくない?」という語彙力皆無の感無量状態でした。

 

例えば、

HTML

<div>

  <div><a class ="test" href="#">これはテスト</a></div>

</div>

 

CSS

.test::before{

~適用する内容~

}

 

とすれば、

<div>

  <div><a class ="test" href="#">これはテスト</a></div>

</div>

の位置に::beforeで要素が生成されます。また、の位置は::afterを指定した場合に要素が生成される位置です。

 

::beforeは指定した要素の開始タグの直後、コンテンツの直前に差し込まれるイメージです。

::afterはコンテンツの直後、終了タグの直前に差し込まれるイメージです。

 

そして、

::beforeや::afterでは

疑似要素が追加されるますが、この要素は基本インライン要素(spanやstrongなどと同じ)です。改行されることはなく、横並びで配置されます。

また、contentプロパティを設定することで、生成された疑似要素に対して内容を追加することもできます。

 

先ほどのCSS

.test::before{

content : "ここがbefore";

}

と記述すると、の位置に::beforeで要素が生成され、「ここがbefore」というテキストが記述されます。

その結果、最終的にブラウザでは

 

ここがbeforeこれはテスト

 

というテキストが表示されるのです。

 

そして、ここからが真骨頂。

なんと、この疑似要素

displayプロパティも変えられます。

というか基本的には要素だから驚くこともないですね。

ただ、displayプロパティが変えられると何がすごいかといえば。

 

高さ、幅の指定が可能になったり、

positionプロパティと組み合わせて位置を移動させたり、

自由度が格段に上がります。

そう、デザインの幅も広がるのです。

 

例えば、::afterを使って

 

.test{

position : relative;

}

 

.test::after{

content : "";

display : block;

width:100%;

height : 3px;

position:absolute;

top : 100%;

left : 0;

background : #ff0000;

}

 

みたいにすれば、positionプロパティを調整することで、

自分の好きな位置にアンダーバーを作成して配置することだって可能です。

使い方次第で、様々なことができそうですね。

 

 

今日のまとめ

  • 疑似要素は要素の内容に関してのスタイル指定や、要素の生成が可能
  • ::before、::afterで生成される要素はインライン要素
  • 生成された要素に対して、contentプロパティで内容を追記できる。
  • 生成された要素に対して、スタイル適用もできる。

 

本日は疑似要素についてでした。

疑似クラス、疑似要素どちらも似ていますね。

 

現在はデザインカンプからの、コーディングに力をいれています。

主に、カンプを見た時にHTMLの構成を検討して決定する力を養いたいのです。

ここがスタートですよね。

 

では、また。