AI(ChatGPT)を使って半自動で月5万稼ぐ?
実際にやってみて結果・・ >>

filterとtransform:scaleでリアルな絵画デザインのCSSスライダーアニメーション3選

今回はCSSだけで作るスライダーアニメーションを3つご紹介します。filterプロパティの応用transform:scaleの伸縮エフェクトとopacityで変化前後のスタイルを調整しtransitionで滑らかにスライドするアニメーションになります。
htmlとcssだけしか使っていません。
コードの説明や実際の動きも詳しくまとめてみたので自由にお使いください。

こちらのデザイン・コードはすべて完全オリジナルなのでコピペ大歓迎です。

 

1. クリックで横幅が伸び縮みしながらスライドするアニメーション【filter&transform:scaleX】

動きは下の画像のような感じになります

コードを見る
<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:scaleX(0);
  /* 伸縮率を指定 */
}
.slider li input:checked ~ img {
  /* ボタンで選択後のスタイル指定 */
  opacity: 1;
  z-index: 10;
  filter: brightness(110%) saturate(210%) contrast(115%);
  /* 変化後の明るさ・彩度・コントラストの指定 */
  transform:scaleX(1);
  /* 伸縮率を指定 */
}
ここがポイント!
  1. flexboxでcontainerの中身をど真ん中に設置
  2. .around-sliderで外側の額縁・.sliderで内側の額縁を指定
  3. スライダーのナビゲーションボタンを設置しボタンを押すと画像がスライドするように指定する
  4. .slider imgの変化前にopacityで不透明度、filter: brightness() saturate() contrast()で明るさ・彩度・コントラストを各々調整(filterの使い方については【filter完全網羅】hoverでボタンが動き出す!filterを網羅できるCSSボタンアニメーション15選)
  5. .slider imgの変化後も同じく調整
  6. hoverするとtransform:scaleで背景画像が横に伸び縮みしながらスライドするマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  7. transitionプロパティを指定して開始から終了までの自然なアニメーションを実現

 

2. クリックで縦幅が伸び縮みしながらスライドするアニメーション【filter&transform:scaleY】

動きは下の画像のような感じになります

コードを見る
<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:scaleY(0);
  /* 伸縮率を指定 */
}
.slider li input:checked ~ img {
  /* ボタンで選択後のスタイル指定 */
  opacity: 1;
  z-index: 10;
  filter: brightness(110%) saturate(210%) contrast(115%);
  /* 変化後の明るさ・彩度・コントラストの指定 */
  transform:scaleY(1);
  /* 伸縮率を指定 */
}
ここがポイント!
  1. flexboxでcontainerの中身をど真ん中に設置
  2. .around-sliderで外側の額縁・.sliderで内側の額縁を指定
  3. スライダーのナビゲーションボタンを設置しボタンを押すと画像がスライドするように指定する
  4. .slider imgの変化前にopacityで不透明度、filter: brightness() saturate() contrast()で明るさ・彩度・コントラストを各々調整(filterの使い方については【filter完全網羅】hoverでボタンが動き出す!filterを網羅できるCSSボタンアニメーション15選)
  5. .slider imgの変化後も同じく調整
  6. hoverするとtransform:scaleで背景画像が縦に伸び縮みしながらスライドするマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  7. transitionプロパティを指定して開始から終了までの自然なアニメーションを実現

 

3. クリックで思いっきり伸び縮みしながらスライドするアニメーション【filter&transform:scaleXY】

動きは下の画像のような感じになります

コードを見る
<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:scale(0,0);
  /* 伸縮率を指定 */
}
.slider li input:checked ~ img {
  /* ボタンで選択後のスタイル指定 */
  opacity: 1;
  z-index: 10;
  filter: brightness(110%) saturate(210%) contrast(115%);
  /* 変化後の明るさ・彩度・コントラストの指定 */
  transform:scale(1,1);
  /* 伸縮率を指定 */
}
ここがポイント!
  1. flexboxでcontainerの中身をど真ん中に設置
  2. .around-sliderで外側の額縁・.sliderで内側の額縁を指定
  3. スライダーのナビゲーションボタンを設置しボタンを押すと画像がスライドするように指定する
  4. .slider imgの変化前にopacityで不透明度、filter: brightness() saturate() contrast()で明るさ・彩度・コントラストを各々調整(filterの使い方については【filter完全網羅】hoverでボタンが動き出す!filterを網羅できるCSSボタンアニメーション15選)
  5. .slider imgの変化後も同じく調整
  6. hoverするとtransform:scaleで背景画像が思いっきり伸び縮みしながらスライドするマテリアルデザイン(transformの使い方については【transform完全網羅】hoverで動き出す!transformを網羅できるCSSボタンアニメーション16選)
  7. transitionプロパティを指定して開始から終了までの自然なアニメーションを実現

【初心者向け】失敗しないプログラミングTIPS

そもそもWebデザインの基礎がわからない。。
そんなあなたには『Udemy』

ふたご


でもなあ、独学だと心配だしプログラミングスクールで学びたい!。かといってお金はかけたくないし。。
そんなあなたにはProEngineer

ふたご

完全無料で一人前のエンジニアになれるプログラミングスクール【ProEngineer】
  1. プログラミング学習&サポートが無料!
  2. 誰もが知っている超優良企業への就職サポート付き!
  3. 学習言語:Java、PHP、HTML、CSSなど

 

   話だけ聞いてみる