今回はCSSだけで作るスライダーアニメーションを3つご紹介いたします。
filterプロパティの応用、transform:translateの移動エフェクトとskewの傾斜エフェクトとopacityで変化前後のスタイルを調整しtransitionで滑らかにスライドするアニメーションになります。htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。
こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。
この記事の信頼性(ゆうけんブログの筆者はこんな人)
- 現役Webデザイナーが執筆
- 最高月収7桁超のフリーランス
- 完全未経験から独学でWeb制作スキルを習得
- Twitterフォロワー数2,000人超(→@twinzvlog_yk)
- Web制作のメンター経験多数
- 認定ランサー(ランサーズ最高ランク)
この記事をご覧になっているということは、Webエンジニアとして就職または独立したいと考えているかと思います。
そんな方のために現役Webエンジニアの筆者が事前に知っておくべき知識を記事にまとめたので、後で「知っておけばよかった…」となる前に読んでおきましょう!
もうしんどい。Webエンジニアの勉強に疲れたら辞めてもいい。
「大学生プログラミング稼げない」はウソです。3つの致命的な真実
未経験からWeb系エンジニアやめとけ!7つの現実
【真実】プログラミングできない辞めたい..は解決できる。
未経験からプログラマーになったけど辞めたい「5つの本音」
1. クリックで右方向から傾きながらスライドしてくるアニメーション【translateX&skewZ】
動きは下の画像のような感じになります
コードを見る
<div class="container">
<div class="around-slider">
<ul class="slider">
<li>
<input type="radio" id="image1" name="image" checked>
<label for="image1"></label>
<img src="https://images.unsplash.com/photo-1531913764164-f85c52e6e654?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1266&q=80" alt="image 1" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image2" name="image">
<label for="image2"></label>
<img src="https://images.unsplash.com/photo-1549834185-bd9f078a5dfe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80" alt="image 2" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image3" name="image">
<label for="image3"></label>
<img src="https://images.unsplash.com/photo-1542209784-f9702e6ade53?ixlib=rb-1.2.1&auto=format&fit=crop&w=2120&q=80" alt="image 3" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image4" name="image">
<label for="image4"></label>
<img src="https://images.unsplash.com/photo-1523895665936-7bfe172b757d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80" alt="image 4" style="width: 25em;height: 18.75em">
</li>
</ul>
</div>
</div>
.container {
/* flexboxでcontainerの中身をど真ん中に設置 */
display: flex;
justify-content: center;
align-items: center;
}
/* 額縁外側 */
.around-slider {
background-color: #572500;
width: 28em;
height: 23em;
display: block;
top: 30%;
position: absolute;
border-radius: .2em;
/* 額縁外の影 */
box-shadow: 0 3px 10px 5px rgba(0,0,0,0.4);
}
.slider {
display: block;
/* スライダーの額縁内の位置指定 */
top: 4%;
left: 3.5%;
background-color: #fff;
height: 21em;
width: 26em;
padding: 0;
margin: 0;
position: absolute;
/* .sliderに収まらない要素を隠すように指定 */
overflow: hidden;
border: 20px solid rgb(255, 211, 179);
/* 内側の影を指定 */
box-shadow: 0 2px 1px hsla(0,0%,0%,.4),
0 -1px 1px 2px hsla(0,0%,0%,.5);
}
/* スライダー*/
.slider li {
list-style:none;
position: absolute;
}
.slider input {
display: none;
}
/* スライダーナビゲーションボタン */
.slider label {
background-color: #000000;
border-radius: 100%;
cursor: pointer;
display: block;
height: 1.0em;
width: 1.0em;
/* ボタンの位置を指定 */
left: 12em;
bottom: .5em;
position: absolute;
/* hover後にボタンが現れる速度を調整 */
transition: .25s;
z-index: 100;
box-shadow: 0px 1px 5px 1px #fff;
}
.slider input:checked + label {
/* クリックしたときのボタンの色を指定 */
background-color: #fff;
}
.slider:hover li:nth-child(1) label {
/* 1つ目のボタンの位置を指定 */
left: 9.5em;
}
.slider:hover li:nth-child(2) label {
/* 2つ目のボタンの位置を指定 */
left: 11em;
}
.slider:hover li:nth-child(3) label {
/* 3つ目のボタンの位置を指定 */
left: 12.5em;
}
.slider:hover li:nth-child(4) label {
/* 4つ目のボタンの位置を指定 */
left: 14em;
}
/* 額内の写真 */
.slider img {
opacity: 0;
/* アニメーションの速度調整 */
transition: 1.5s;
filter: brightness(0%) saturate(0%) contrast(0%);
/* 変化前の明るさ・彩度・コントラストの指定 */
transform:translateX(300px) skew(30deg);
/* X軸の移動距離と傾斜角度を指定 */
}
.slider li input:checked ~ img {
/* ボタンで選択後のスタイル指定 */
opacity: 1;
z-index: 10;
filter: brightness(110%) saturate(210%) contrast(115%);
/* 変化後の明るさ・彩度・コントラストの指定 */
transform:translateX(0px) skew(0deg);
/* X軸の移動距離と傾斜角度を指定 */
}
\初心者でも安心なサポート体制&高単価案件/
月収50万円以上のフリーランス案件を探してみる >>
2. クリックで上から傾きながらスライドしてくるアニメーション【translateY&skewX】
動きは下の画像のような感じになります
コードを見る
<div class="container">
<div class="around-slider">
<ul class="slider">
<li>
<input type="radio" id="image1" name="image" checked>
<label for="image1"></label>
<img src="https://images.unsplash.com/photo-1531913764164-f85c52e6e654?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1266&q=80" alt="image 1" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image2" name="image">
<label for="image2"></label>
<img src="https://images.unsplash.com/photo-1549834185-bd9f078a5dfe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80" alt="image 2" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image3" name="image">
<label for="image3"></label>
<img src="https://images.unsplash.com/photo-1542209784-f9702e6ade53?ixlib=rb-1.2.1&auto=format&fit=crop&w=2120&q=80" alt="image 3" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image4" name="image">
<label for="image4"></label>
<img src="https://images.unsplash.com/photo-1523895665936-7bfe172b757d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80" alt="image 4" style="width: 25em;height: 18.75em">
</li>
</ul>
</div>
</div>
.container {
/* flexboxでcontainerの中身をど真ん中に設置 */
display: flex;
justify-content: center;
align-items: center;
}
/* 額縁外側 */
.around-slider {
background-color: #572500;
width: 28em;
height: 23em;
display: block;
top: 30%;
position: absolute;
border-radius: .2em;
/* 額縁外の影 */
box-shadow: 0 3px 10px 5px rgba(0,0,0,0.4);
}
.slider {
display: block;
/* スライダーの額縁内の位置指定 */
top: 4%;
left: 3.5%;
background-color: #fff;
height: 21em;
width: 26em;
padding: 0;
margin: 0;
position: absolute;
/* .sliderに収まらない要素を隠すように指定 */
overflow: hidden;
border: 20px solid rgb(255, 211, 179);
/* 内側の影を指定 */
box-shadow: 0 2px 1px hsla(0,0%,0%,.4),
0 -1px 1px 2px hsla(0,0%,0%,.5);
}
/* スライダー*/
.slider li {
list-style:none;
position: absolute;
}
.slider input {
display: none;
}
/* スライダーナビゲーションボタン */
.slider label {
background-color: #000000;
border-radius: 100%;
cursor: pointer;
display: block;
height: 1.0em;
width: 1.0em;
/* ボタンの位置を指定 */
left: 12em;
bottom: .5em;
position: absolute;
/* hover後にボタンが現れる速度を調整 */
transition: .25s;
z-index: 100;
box-shadow: 0px 1px 5px 1px #fff;
}
.slider input:checked + label {
/* クリックしたときのボタンの色を指定 */
background-color: #fff;
}
.slider:hover li:nth-child(1) label {
/* 1つ目のボタンの位置を指定 */
left: 9.5em;
}
.slider:hover li:nth-child(2) label {
/* 2つ目のボタンの位置を指定 */
left: 11em;
}
.slider:hover li:nth-child(3) label {
/* 3つ目のボタンの位置を指定 */
left: 12.5em;
}
.slider:hover li:nth-child(4) label {
/* 4つ目のボタンの位置を指定 */
left: 14em;
}
/* 額内の写真 */
.slider img {
opacity: 0;
/* アニメーションの速度調整 */
transition: 1.5s;
filter: brightness(0%) saturate(0%) contrast(0%);
/* 変化前の明るさ・彩度・コントラストの指定 */
transform:translateY(-300px) skewX(50deg);
/* Y軸の移動距離とX軸の傾斜角度を指定 */
}
.slider li input:checked ~ img {
/* ボタンで選択後のスタイル指定 */
opacity: 1;
z-index: 10;
filter: brightness(110%) saturate(210%) contrast(115%);
/* 変化後の明るさ・彩度・コントラストの指定 */
transform:translateY(0px) skewX(0deg);
/* Y軸の移動距離とX軸の傾斜角度を指定 */
}
\初心者でも安心なサポート体制&高単価案件/
月収50万円以上のフリーランス案件を探してみる >>
3. クリックで斜め上から傾きながらスライドしてくるアニメーション【translateXY&skewX】
動きは下の画像のような感じになります
コードを見る
<div class="container">
<div class="around-slider">
<ul class="slider">
<li>
<input type="radio" id="image1" name="image" checked>
<label for="image1"></label>
<img src="https://images.unsplash.com/photo-1531913764164-f85c52e6e654?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1266&q=80" alt="image 1" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image2" name="image">
<label for="image2"></label>
<img src="https://images.unsplash.com/photo-1549834185-bd9f078a5dfe?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=1650&q=80" alt="image 2" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image3" name="image">
<label for="image3"></label>
<img src="https://images.unsplash.com/photo-1542209784-f9702e6ade53?ixlib=rb-1.2.1&auto=format&fit=crop&w=2120&q=80" alt="image 3" style="width: 25em;height: 18.75em">
</li>
<li>
<input type="radio" id="image4" name="image">
<label for="image4"></label>
<img src="https://images.unsplash.com/photo-1523895665936-7bfe172b757d?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=2850&q=80" alt="image 4" style="width: 25em;height: 18.75em">
</li>
</ul>
</div>
</div>
.container {
/* flexboxでcontainerの中身をど真ん中に設置 */
display: flex;
justify-content: center;
align-items: center;
}
/* 額縁外側 */
.around-slider {
background-color: #572500;
width: 28em;
height: 23em;
display: block;
top: 30%;
position: absolute;
border-radius: .2em;
/* 額縁外の影 */
box-shadow: 0 3px 10px 5px rgba(0,0,0,0.4);
}
.slider {
display: block;
/* スライダーの額縁内の位置指定 */
top: 4%;
left: 3.5%;
background-color: #fff;
height: 21em;
width: 26em;
padding: 0;
margin: 0;
position: absolute;
/* .sliderに収まらない要素を隠すように指定 */
overflow: hidden;
border: 20px solid rgb(255, 211, 179);
/* 内側の影を指定 */
box-shadow: 0 2px 1px hsla(0,0%,0%,.4),
0 -1px 1px 2px hsla(0,0%,0%,.5);
}
/* スライダー*/
.slider li {
list-style:none;
position: absolute;
}
.slider input {
display: none;
}
/* スライダーナビゲーションボタン */
.slider label {
background-color: #000000;
border-radius: 100%;
cursor: pointer;
display: block;
height: 1.0em;
width: 1.0em;
/* ボタンの位置を指定 */
left: 12em;
bottom: .5em;
position: absolute;
/* hover後にボタンが現れる速度を調整 */
transition: .25s;
z-index: 100;
box-shadow: 0px 1px 5px 1px #fff;
}
.slider input:checked + label {
/* クリックしたときのボタンの色を指定 */
background-color: #fff;
}
.slider:hover li:nth-child(1) label {
/* 1つ目のボタンの位置を指定 */
left: 9.5em;
}
.slider:hover li:nth-child(2) label {
/* 2つ目のボタンの位置を指定 */
left: 11em;
}
.slider:hover li:nth-child(3) label {
/* 3つ目のボタンの位置を指定 */
left: 12.5em;
}
.slider:hover li:nth-child(4) label {
/* 4つ目のボタンの位置を指定 */
left: 14em;
}
/* 額内の写真 */
.slider img {
opacity: 0;
/* アニメーションの速度調整 */
transition: 1.5s;
filter: brightness(0%) saturate(0%) contrast(0%);
/* 変化前の明るさ・彩度・コントラストの指定 */
transform:translate(-300px,-300px) skewX(50deg);
/* XY軸の移動距離とX軸の傾斜角度を指定 */
}
.slider li input:checked ~ img {
/* ボタンで選択後のスタイル指定 */
opacity: 1;
z-index: 10;
filter: brightness(110%) saturate(210%) contrast(115%);
/* 変化後の明るさ・彩度・コントラストの指定 */
transform:translate(0px,0px) skewX(0deg);
/* XY軸の移動距離とX軸の傾斜角度を指定 */
}
\初心者でも安心なサポート体制&高単価案件/
月収50万円以上のフリーランス案件を探してみる >>
『絶対にリモートワーク!』という方におすすめの求人サイトをご紹介!
クラウドテック
この講座のポイント
対象
Webデザイナー・エンジニア・グラフィックデザイナー・PM・マーケター・ライター
公式サイト
クラウドテック公式ページ
特徴
- クラウドソーシング企業大手のクラウドワークスが運営する求人サイト
- 実務未経験者OK
- 登録社数14万社
- フリーランスや副業案件がケタ違いに多い
- 報酬額や勤務地・職種など希望が通りやすい
- Web制作・コーディングの高単価案件が多い
- リモートワーク案件数は業界トップクラス
- 最短3日で案件獲得できる
現役Webデザイナーの筆者がイチオシの求人サイト!フリーランス向けWeb制作案件なら確実に業界トップクラス!営業かけずに案件に困らなくなる近道と言えます。しかも、完全無料です。
ふたご
\ エンジニア・Webデザイナーの実務未経験OK・リモート案件数トップクラスの求人サイト /無料登録をして案件を見てみる >>
もっと詳しく知りたい方は
>> クラウドテックの評判は?未経験OK?口コミ・メリット公開をご覧ください。
まとめ
HTMLとCSSを使うと今回紹介したようなことも簡単にできてしまうんです。
『CSSアニメーションやエフェクトだけではなくWebサイトをゼロから作って稼いでいきたい』
『3ヶ月くらいで最低でも月10万円は稼ぎたい』
『営業とかやったことないけどWeb制作だけで稼いでいきたい』
こんな方のためにWeb制作で月80万超稼ぐ筆者が自身の経験を踏まえて【失敗しない】Webデザイナー(Web制作)独学ロードマップを執筆しました。
少額の投資で3ヶ月後には月10〜30万稼げるよう設計してあります。
(学習教材やAdobeなど最低限のコストはかかります)
ロードマップの構成
- Web制作に特化した『確実に身に付く』学習方法
- Web制作会社が喰いつく理想的なポートフォリオの作成手順
- 返信率10%以上!Web制作会社へのメール営業
有料公開も考えましたが「Webデザイナー(Web制作)はまだまだ稼げることを証明したい!」という思いが強く、期間限定で無料公開をすることにしました。
2021年半ばまでは無料公開する予定ではありますが前倒しすることもあり得ますのでご興味ある方はお早めにどうぞ!