【CSS】でカーテンを作る[jQuery不要]簡単ローディング
記事更新日:2022-01-30
ローディング画面でjQuery使いたくない。
【 Point 】
最近は、ローディング画面があるとウケが良い、という理由も多いらしい。
(= 本来の目的が関係ない場合もある)
それなら、CSSでカーテンを作ってみよう。
1. translateX で横移動する
まずは左側から。
箱を作って横移動させるだけで、カーテンっぽい。
@keyframes move-left {
100% {
transform: translateX(-100%);
}
}
// 0% は省略できる
【 Point 】
親要素に、overflow: hidden をつけて、はみ出した部分を非表示に。
背景が宇宙だから、青にした。
でも、色が単調すぎるよ。
2.背景色をグラデーションにする
radial-gradientで中心から外へのグラデーションに。
background: radial-gradient(ellipse at center,
#1b2735 40%,
#090a0f 100%);
丸みもほしいよ。
3.border-bottom-right-radiusで右下を丸くする
左下なら、border-bottom-left-radius。
border-bottom-right-radius: 100%;
劇場のカーテンって、横じゃなくて上にいくよね?
4.translateのYを追加して左上へ移動
Y方向の移動も追加できる。
@keyframes move-top-left {
100% {
transform: translate(-50%, -50%);
}
}
角度もほしい。
5.rotateで少し回転させる
回転しながら移動。
@keyframes open-curtain {
100% {
transform: translate(-50%, -50%) rotate(20deg);
}
}
やっぱり、色が暗いかな。
6.box-shadowを inset(内側)で入れる
黄色いbox-shadowを入れてメリハリをつけてみよう。
box-shadow: inset -40px 0 50px rgba(255, 255, 85, 0.2),
inset -90px 0 120px rgba(255, 255, 85, 0.2);
境界線もクッキリとさせたい。
7.border-right を追加する
左側ならborder-left。
色は、月と同じムラサキに。
border-right: 4px solid #660066;
ちょっと、のっぺり感がする。
8.疑似要素でグランジを追加する
フリー素材でグランジを見つけた。
.curtain-left {
&::before
position: absolute;
content: '';
width: 100%;
height: 100%;
top: 0;
left: 0;
background: url(グランジ画像のパス);
background-repeat: repeat;
background-position: center center;
border-bottom-right-radius: 100%;
opacity: 0.11;
}
}
【 Point 】
「グランジ画像 フリー素材」で検索すると、いろいろ出てくるので活用してみよう。
だいぶオシャレになった。
まとめ
仕上げはposition: fixed で。
右側は、逆の要領で。
最終形は、このサイトをリロードして確認を。
fixedが親要素・子要素どっちに必要かとか、
overflow: hiddenが効かないとか、
z-indexで重なり順を調整するとか、
ヘッダーがクリックできなくなるとか、
最終チェックは、少しやっかい。
.wrapper {
position: fixed;
display: flex;
top: 0;
left: 0;
overflow: hidden;
opacity: 0.8;
z-index: 1000;
}
.curtain-left {
position: fixed;
width: 60%;
height: 100vh;
top: 0;
left: 0;
background: radial-gradient(ellipse at center,
#1b2735 40%,
#090a0f 100%);
border-bottom-right-radius: 100%;
box-shadow: inset -40px 0 50px rgba(255, 255, 85, 0.2),
inset -90px 0 120px rgba(255, 255, 85, 0.2);
border-right: 4px solid #660066;
animation: open-curtain 4s ease-out forwards;
&::before
position: absolute;
content: '';
width: 100%;
height: 100%;
top: 0;
left: 0;
background: url(グランジ画像のパス);
background-repeat: repeat;
background-position: center center;
border-bottom-right-radius: 100%;
opacity: 0.11;
animation: open-curtain 4s ease-out forwards;
}
@keyframes open-curtain {
100% {
transform: translate(-50%, -50%) rotate(20deg);
}
}
2022-01-30
編集後記:
この記事の内容がベストではないかもしれません。