公開日時:2022.06.24
【初心者向け】疑似要素で線やボタンをアニメーションさせてみよう!
こんにちは!
ドラムやりすぎで左肘が痛いGlobal Web Designの福田です(笑)
みなさんはWeb制作でマウスオーバーしたときに
「aタグにボーダーをアニメーションさせたい!」
「ボタンをアニメーションさせたい!」
というときありませんか?
今回はそんな方に向けて、疑似要素の使い方と線やボタンのアニメーションの実装をご紹介します!
目次
疑似要素
ボーダーやボタンのアニメーションをするときに必ず使うのが疑似要素です。
疑似要素とは、要素の一部に対してスタイルを適用できる指定方法です。
HTMLの要素を疑似的にCSSで設定するので、HTMLを書き足すことなく装飾を適用できます。
ここでは線やボタンのアニメーションによく使う疑似要素
- before
- after
をご紹介します。
before
「before」は選択した要素の前にコンテンツを追加します。
<p>こんにちは</p>
p::before{
content: 'みなさん';
color: red;
}
ブラウザで見ると
「::before」を使って、pタグの「こんちには」の前に「みなさん」をCSSで追加できました。
「content」にテキストなどを指定するときは「”」(シングルクォーテーション)「””」(ダブルクォーテーション)で囲みます。
また「font-size」や「color」などのプロパティは追加したコンテンツに適用されます。
after
「after」は選択した要素の後ろにコンテンツを追加します。
<p>こんにちは</p>
p::after{
content: 'よろしくお願いします。';
color: blue;
font-size: 20px;
}
ブラウザで見ると
「::after」を使って、pタグの「こんちには」の後ろに「よろしくお願いします。」をCSSで追加できました。
「after」も「before」と同様に「font-size」や「color」などのプロパティは追加したコンテンツに適用されます。
「after」「before」共にかならず「content」の設定が必要になります。
「content」がないとHTMLに描画されません。
<p>こんにちは</p>
p::before{
}
p::after{
}
「content」がない場合
検証ツールで見てみると、「before」「after」の追加がされていません。
CSSを
p::before{
content: '';
}
p::after{
content: '';
}
にすると
「before」「after」が追加されていますね!
「before」「after」は必ず「content」を付けることを覚えておきましょう!
ボーダーのアニメーション
ここからは先ほどご紹介した疑似要素を使って、ボーダーをアニメーションさせていきます。
今回はaタグの下に線を入れて、そのaタグにマウスオーバーしたときに線をアニメーションさせていきます。
線を下に引ける「border-bottom」プロパティがありますが、アニメーションさせることができないので疑似クラスで線を作ってアニメーションさせていきます。
疑似要素で線をつくる
<a class="border">線をアニメーション</a>
.border{
color: blue;
padding-bottom: 5px;
position: relative; /*::afterにabsoluteをかけるので設定*/
}
.border::after{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 1px; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
bottom: 0; /* 線の位置 */
left: 0; /* 線の位置 */
}
ブラウザで見てみると
疑似要素の「after」でaタグに線を引くことができました。
線をアニメーションさせるためのCSSを追記
次に線をアニメーションさせるためのCSSを追記します。
.border{
color: blue;
padding-bottom: 5px;
position: relative; /*::afterにabsoluteをかけるので設定*/
}
.border::after{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 1px; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
bottom: 0; /* 線の位置 */
left: 0; /* 線の位置 */
/* 追記 */
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
ブラウザで見てみると
線を消すことができました。
線は「transform: scale(0,1);」で消すことができます。
「transform: scale()」は要素の大きさを変えたいときにつかいます。
「transform: scale(X軸,Y軸);」と設定できるので、「transform: scale(0,1);」で横幅を0にしています。
「transform-origin」は要素の座標変換(transform)のときの原点を設定します。
今回は線を左から右にアニメーションさせたいので、「transform-origin: left top;」としています。
「transition: .5s;」はマウスオーバーした時の線が出てくる時間になります。
マウスオーバーをさせる疑似クラス「hover」を使うので、「hover」で定義したCSSまで0.5秒かけてアニメーションさせます。
疑似クラスhoverを使って線を出す
最後にカーソルが要素にマウスオーバーしたときの疑似クラス「hover」を使って線を出します。
CSSに追記します。
.border{
color: blue;
padding-bottom: 5px;
position: relative; /*::afterにabsoluteをかけるので設定*/
}
.border::after{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 1px; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
bottom: 0; /* 線の位置 */
left: 0; /* 線の位置 */
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
/* 追記 */
.border:hover::after{
transform: scale(1,1); /* 線のx軸の長さを1 */
}
ブラウザで見ると
線をアニメーションさせることができました。
疑似要素と疑似クラスはあわせて使うことができます。
「.border:hover::after」と書くことで「.border」を「:hover」したときの「::after」の指定ができます。
「transform: scale(1,1);」で横幅0だった線を「scale(1,1)」にすることで線を出しています。
ボタンのアニメーション
ボタンのアニメーションも線のアニメーションとほぼ変わらずに実装できます。
CSSで変化前のボタンを実装
まずは変化前のボタンを実装します。
<a class="button">ボタンをアニメーション</a>
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
transition: .5s;
}
ブラウザで見てみると、
マウスオーバーする前のボタンを実装できました。
beforeを使ってマウスオーバー後のボタンを実装
次にbeforeを使ってマウスオーバー後のボタンを実装します。
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
transition: .5s;
/* 追記 */
z-index: 10;
}
/* 追記 */
.button::before{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 100%; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
top: 0; /* 線の位置 */
left: 0; /* 線の位置 */
z-index: -1;
}
ブラウザで見ると
「before」で要素が青く塗りつぶされました。
線のアニメーションと同様にボタンのアニメーションのCSSを追記します。
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
z-index: 10;
transition: .5s;
}
.button::before{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 100%; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
top: 0; /* 線の位置 */
left: 0; /* 線の位置 */
z-index: -1;
/* 追記 */
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
ブラウザで見ると
線のときと同様に、「before」を青色の部分を「transform: scale(0,1)」で非表示にできました。
疑似クラスhoverを使ってボタンを完成
最後に疑似クラス「hover」を使ってボタンのアニメーションを実装していきます。
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
z-index: 10;
transition: .5s;
}
.button::before{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 100%; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
top: 0; /* 線の位置 */
left: 0; /* 線の位置 */
z-index: -1;
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
/* 追記 */
.button:hover{
color: #fff; /* マウスオーバーしたときのaタグの色 */
}
.button:hover::before{
transform: scale(1,1);
}
ブラウザで見ると
aタグの上にそのまま「before」の要素が重なると、文字が見えなくなってしまうため、「.button:hover」で文字の色を白にしています。
完成はこちらになります。
See the Pen
css 疑似要素 by Fukuda Yuzuru (@fukuda-yuzuru)
on CodePen.
まとめ
いかがでしたでしょうか?
今回は疑似要素を使って、線とボタンのアニメーションを実装しました。
aタグやボタンなど押せる部分はユーザーにわかりやすいように、「hover」を使って
「ここはクリックできますよ!」
とすることが多くなります。
疑似要素などを使うことで、アニメーションさせてあげることによってWebサイトに動きが出て、ユーザーも使いやすくなります。
疑似要素や疑似クラスはいろいろな部分で使われるので、今回の記事をキッカケに覚えていただると嬉しいです!
こんにちは!
ドラムやりすぎで左肘が痛いGlobal Web Designの福田です(笑)
みなさんはWeb制作でマウスオーバーしたときに
「aタグにボーダーをアニメーションさせたい!」
「ボタンをアニメーションさせたい!」
というときありませんか?
今回はそんな方に向けて、疑似要素の使い方と線やボタンのアニメーションの実装をご紹介します!
目次
疑似要素
ボーダーやボタンのアニメーションをするときに必ず使うのが疑似要素です。
疑似要素とは、要素の一部に対してスタイルを適用できる指定方法です。
HTMLの要素を疑似的にCSSで設定するので、HTMLを書き足すことなく装飾を適用できます。
ここでは線やボタンのアニメーションによく使う疑似要素
- before
- after
をご紹介します。
before
「before」は選択した要素の前にコンテンツを追加します。
<p>こんにちは</p>
p::before{
content: 'みなさん';
color: red;
}
ブラウザで見ると
「::before」を使って、pタグの「こんちには」の前に「みなさん」をCSSで追加できました。
「content」にテキストなどを指定するときは「”」(シングルクォーテーション)「””」(ダブルクォーテーション)で囲みます。
また「font-size」や「color」などのプロパティは追加したコンテンツに適用されます。
after
「after」は選択した要素の後ろにコンテンツを追加します。
<p>こんにちは</p>
p::after{
content: 'よろしくお願いします。';
color: blue;
font-size: 20px;
}
ブラウザで見ると
「::after」を使って、pタグの「こんちには」の後ろに「よろしくお願いします。」をCSSで追加できました。
「after」も「before」と同様に「font-size」や「color」などのプロパティは追加したコンテンツに適用されます。
「after」「before」共にかならず「content」の設定が必要になります。
「content」がないとHTMLに描画されません。
<p>こんにちは</p>
p::before{
}
p::after{
}
「content」がない場合
検証ツールで見てみると、「before」「after」の追加がされていません。
CSSを
p::before{
content: '';
}
p::after{
content: '';
}
にすると
「before」「after」が追加されていますね!
「before」「after」は必ず「content」を付けることを覚えておきましょう!
ボーダーのアニメーション
ここからは先ほどご紹介した疑似要素を使って、ボーダーをアニメーションさせていきます。
今回はaタグの下に線を入れて、そのaタグにマウスオーバーしたときに線をアニメーションさせていきます。
線を下に引ける「border-bottom」プロパティがありますが、アニメーションさせることができないので疑似クラスで線を作ってアニメーションさせていきます。
疑似要素で線をつくる
<a class="border">線をアニメーション</a>
.border{
color: blue;
padding-bottom: 5px;
position: relative; /*::afterにabsoluteをかけるので設定*/
}
.border::after{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 1px; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
bottom: 0; /* 線の位置 */
left: 0; /* 線の位置 */
}
ブラウザで見てみると
疑似要素の「after」でaタグに線を引くことができました。
線をアニメーションさせるためのCSSを追記
次に線をアニメーションさせるためのCSSを追記します。
.border{
color: blue;
padding-bottom: 5px;
position: relative; /*::afterにabsoluteをかけるので設定*/
}
.border::after{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 1px; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
bottom: 0; /* 線の位置 */
left: 0; /* 線の位置 */
/* 追記 */
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
ブラウザで見てみると
線を消すことができました。
線は「transform: scale(0,1);」で消すことができます。
「transform: scale()」は要素の大きさを変えたいときにつかいます。
「transform: scale(X軸,Y軸);」と設定できるので、「transform: scale(0,1);」で横幅を0にしています。
「transform-origin」は要素の座標変換(transform)のときの原点を設定します。
今回は線を左から右にアニメーションさせたいので、「transform-origin: left top;」としています。
「transition: .5s;」はマウスオーバーした時の線が出てくる時間になります。
マウスオーバーをさせる疑似クラス「hover」を使うので、「hover」で定義したCSSまで0.5秒かけてアニメーションさせます。
疑似クラスhoverを使って線を出す
最後にカーソルが要素にマウスオーバーしたときの疑似クラス「hover」を使って線を出します。
CSSに追記します。
.border{
color: blue;
padding-bottom: 5px;
position: relative; /*::afterにabsoluteをかけるので設定*/
}
.border::after{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 1px; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
bottom: 0; /* 線の位置 */
left: 0; /* 線の位置 */
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
/* 追記 */
.border:hover::after{
transform: scale(1,1); /* 線のx軸の長さを1 */
}
ブラウザで見ると
線をアニメーションさせることができました。
疑似要素と疑似クラスはあわせて使うことができます。
「.border:hover::after」と書くことで「.border」を「:hover」したときの「::after」の指定ができます。
「transform: scale(1,1);」で横幅0だった線を「scale(1,1)」にすることで線を出しています。
ボタンのアニメーション
ボタンのアニメーションも線のアニメーションとほぼ変わらずに実装できます。
CSSで変化前のボタンを実装
まずは変化前のボタンを実装します。
<a class="button">ボタンをアニメーション</a>
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
transition: .5s;
}
ブラウザで見てみると、
マウスオーバーする前のボタンを実装できました。
beforeを使ってマウスオーバー後のボタンを実装
次にbeforeを使ってマウスオーバー後のボタンを実装します。
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
transition: .5s;
/* 追記 */
z-index: 10;
}
/* 追記 */
.button::before{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 100%; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
top: 0; /* 線の位置 */
left: 0; /* 線の位置 */
z-index: -1;
}
ブラウザで見ると
「before」で要素が青く塗りつぶされました。
線のアニメーションと同様にボタンのアニメーションのCSSを追記します。
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
z-index: 10;
transition: .5s;
}
.button::before{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 100%; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
top: 0; /* 線の位置 */
left: 0; /* 線の位置 */
z-index: -1;
/* 追記 */
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
ブラウザで見ると
線のときと同様に、「before」を青色の部分を「transform: scale(0,1)」で非表示にできました。
疑似クラスhoverを使ってボタンを完成
最後に疑似クラス「hover」を使ってボタンのアニメーションを実装していきます。
.button{
color: blue;
width: 300px;
height: 60px;
line-height: 60px;
border: solid 1px blue;
display: inline-block;
text-align: center;
position: relative;
z-index: 10;
transition: .5s;
}
.button::before{
content: ''; /* コンテンツを追加 */
width: 100%; /* 線の幅 */
height: 100%; /* 線の高さ */
background-color: blue; /* 線の色 */
position: absolute; /* position: relative;からの線の絶対位置 */
top: 0; /* 線の位置 */
left: 0; /* 線の位置 */
z-index: -1;
transform: scale(0,1); /* 線のx軸の長さを0 */
transition: .5s; /* 要素の変形する時間*/
transform-origin: left top; /* 要素の座標の原点を設定*/
}
/* 追記 */
.button:hover{
color: #fff; /* マウスオーバーしたときのaタグの色 */
}
.button:hover::before{
transform: scale(1,1);
}
ブラウザで見ると
aタグの上にそのまま「before」の要素が重なると、文字が見えなくなってしまうため、「.button:hover」で文字の色を白にしています。
完成はこちらになります。
See the Pen css 疑似要素 by Fukuda Yuzuru (@fukuda-yuzuru) on CodePen.
まとめ
いかがでしたでしょうか?
今回は疑似要素を使って、線とボタンのアニメーションを実装しました。
aタグやボタンなど押せる部分はユーザーにわかりやすいように、「hover」を使って
「ここはクリックできますよ!」
とすることが多くなります。
疑似要素などを使うことで、アニメーションさせてあげることによってWebサイトに動きが出て、ユーザーも使いやすくなります。
疑似要素や疑似クラスはいろいろな部分で使われるので、今回の記事をキッカケに覚えていただると嬉しいです!