こんにちは、フローです。
今回は、前回書いたデザイン要素のCSSの解説を書いていきたいと思います。
前回の記事はこちらです。
目次
CSS要素の解説
まずは前回のCSS全体を見ていきましょう。
header {
height: 200px;
background-color: #333;
display: flex;
align-items: center;
}
.header-text {
font-size: 48px;
color: white;
margin: 0 auto;
position: relative;
}
.header-text:before {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0) 100%);
z-index: 2;
pointer-events: none;
}
.header-text:after {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: linear-gradient(to right, #333 0%, rgba(255,255,255,0) 50%, #333 100%);
z-index: 1;
pointer-events: none;
animation: text-slide 4s linear infinite;
}
@keyframes text-slide {
0% {
transform: translateX(0);
opacity: 1;
}
50% {
transform: translateX(50px);
opacity: 0.5;
}
100% {
transform: translateX(0);
opacity: 1;
}
}
.header-text:hover:after {
animation-play-state: paused;
opacity: 0;
transition: opacity 0.5s ease-out;
}
これですね。
この内容を、各要素ごとに見ていきましょう。
header
header {
height: 200px;
background-color: #333;
display: flex;
align-items: center;
}
.header
要素は、アニメーションを適用するコンテナーであり、
高さを200pxに設定し、背景色を黒に設定します。
また、display
プロパティをflex
に設定し、子要素を縦方向に中央揃えにします。
header-text
.header-text {
font-size: 48px;
color: white;
margin: 0 auto;
position: relative;
}
.header-text
は、アニメーションを適用するテキスト要素です。
フォントサイズを48pxに設定し、白色にします。また、
margin
プロパティを0 auto
に設定し、水平方向に中央揃えにします。
最後に、position
プロパティをrelative
に設定し、
その後に表示されるbefore
およびafter
要素に対して、
相対的な位置を指定するために使用されます。
header-text:before
.header-text:before {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: linear-gradient(to right, rgba(255,255,255,0) 0%,rgba(255,255,255,1) 50%,rgba(255,255,255,0) 100%);
z-index: 2;
pointer-events: none;
}
.header-text:before
は、
テキストの前面に重ねるpseudo
要素であり、
アニメーションのフェード効果を作成するために使用されます。
content
プロパティに空の文字列が設定され、
position
プロパティがabsolute
に設定され、
親要素に対して相対的に配置されます。
width
およびheight
プロパティは、100%に設定され、
親要素のサイズに合わせて大きさが変更されます。
background
プロパティは、グラデーションを定義し、
to right
に設定することで、左から右に向かってグラデーションが適用されます。
rgba(255,255,255,0)
は透明な白を表し、
グラデーションの始まりと終わりの位置で使用されます。
z-index
プロパティを設定し、テキストの前面に配置されます。
また、pointer-events
プロパティをnone
に設定して、
クリックやその他のマウスイベントに反応しないようにします。
header-text:after
.header-text:after {
content: "";
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background: linear-gradient(to right, #333 0%, rgba(255,255,255,0) 50%, #333 100%);
z-index: 1;
pointer-events: none;
animation: text-slide 4s linear infinite;
}
.header-text:after
は、
テキストの後面に重ねるpseudo
要素であり、
テキストのスライドアニメーションを作成するために使用されます。
この要素には、content
プロパティに空の文字列が設定され、
position
プロパティがabsolute
に設定され、親要素に対して相対的に配置されます。
width
およびheight
プロパティは、100%に設定され、
親要素のサイズに合わせて大きさが変更されます。
background
プロパティは、グラデーションを定義し、
#333
から始まり、途中で透明になり、
再び#333
に戻ることで、テキストの後ろに影を作ります。
この要素にz-index
プロパティを設定し、
.header-text:before
よりも背面に配置されます。
また、pointer-events
プロパティをnone
に設定して、
この要素はクリックやその他のマウスイベントに反応しないようにします。
最後に、animation
プロパティにtext-slide
という名前のアニメーションを設定し、4秒間線形に移動し続けます。
@keyframes
@keyframes text-slide {
0% {
transform: translateX(0);
opacity: 1;
}
50% {
transform: translateX(50px);
opacity: 0.5;
}
100% {
transform: translateX(0);
opacity: 1;
}
}
@keyframes
ルールは、アニメーションの動作を定義します。
text-slide
はアニメーションの名前で、
3つのkeyframes
が定義されています。
0%
はアニメーションの最初の状態を表し、100%
は最後の状態を表します。
50%
は、アニメーションの中間状態を表します。
transform
プロパティは、テキストを水平方向に移動するために使用され、
translateX
関数を使用して、水平方向の距離を指定します。
opacity
プロパティは、テキストの透明度を指定し、
0から1の範囲で設定できます。
これにより、テキストがフェードイン/アウトするような効果が得られます。
0%
と100%
のopacity
プロパティは、常に1であり、
テキストが常に表示されるようにします。
50%
のopacity
プロパティは、0.5に設定され、テキストが半透明になります。
header-text:hover:after
.header-text:hover:after {
animation-play-state: paused;
opacity: 0;
transition: opacity 0.5s ease-out;
}
.header-text:hover:after
は、
ホバーイベントが発生したときに、アニメーションを停止し、
フェードアウト効果を作成するために使用されます。
この要素には、
animation-play-state
プロパティが設定され、
paused
に設定され、アニメーションを停止します。
また、opacity
プロパティが設定され、
0に設定され、テキストを徐々にフェードアウトさせます。
最後に、transition
プロパティが設定され、
0.5秒かけて徐々にフェードアウトするように設定されます。
ease-out
は、アニメーションがゆっくりと開始し、終了時に速くなるように設定されます。
まとめ
以上が、このCSSコードの要素の説明です。
このコードは、アニメーションとグラデーションを組み合わせて、
サイトのヘッダーに注目を集めるデザインを実現しています。
しかし、見た目は面白いかもしれませんが、
デザイン設計は、自分がやりたい事をやるのではなく、見てくれる人に合わせる事が大切です。
色々なデザインやコードを楽しみましょう!
レッツチャレンジ!
最近のコメント