Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSS】自動フォトギャラリー【3枚限定】

 どうも!LSSです!!

 

【つまづき】CSS、animationとradial-gradientの組み合わせ【実験段階】では、うっかりbackground-positionの%指定のクセを忘れて難儀してしまいました^^;

 

が、それはそれで面白い動きだったので、その失敗バージョンを元に何か作れないかな?と思いついたのが今回のネタになります。

 

 

自動フォトギャラリー

 

 

 

コード

<style>
@keyframes photoboxa{
0%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 0%,0% 50%,0% 100%;}
10%{background-size:90% 90%,10% 10%,10% 10%;background-position:100% 100%,0% 50%,0% 100%;}
23%{background-size:90% 90%,10% 10%,10% 10%;background-position:100% 100%,0% 0%,0% 50%;}
33%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 100%,0% 0%,0% 50%;}
43%{background-size:10% 10%,90% 90%,10% 10%;background-position:0% 100%,100% 100%,0% 50%;}
56%{background-size:10% 10%,90% 90%,10% 10%;background-position:0% 50%,100% 100%,0% 0%;}
66%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 50%,0% 100%,0% 0%;}
76%{background-size:10% 10%,10% 10%,90% 90%;background-position:0% 50%,0% 100%,100% 100%;}
89%{background-size:10% 10%,10% 10%,90% 90%;background-position:0% 0%,0% 50%,100% 100%;}
100%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 0%,0% 50%,0% 100%;}}
.photobox{
width:300px;height:300px;
background-color:#000000;
background-image:
url(一枚目の画像URL)
,
url(二枚目の画像URL)
,
url(三枚目の画像URL)
;
animation:photoboxa 15s linear infinite;
background-repeat:no-repeat;
}
</style>
<div class="photobox"> </div>

 

※上記コードをコピペして、赤太字部分を画像URLにそれぞれ置き換えると使用できます。

 

 

ただし、ちょっと難点が…

難点その1 縦横比

このコードでは、写真の縦横比が考慮されておらず、どんな写真でも縦横が同じ長さの「正方形」になってしまいます。

縦横比は枠自体の幅・高さに比例する事になり、コード中でいうと、

width:300px;height:300px;

の部分。ここで枠のサイズを指定しています。

例えば横3:縦2の写真を3枚、この自動フォトギャラリーで使用する場合、

width:300px;height:200px;

のように書き換える事で、横3:縦2の枠に横3:縦2の比率で画像が表示される事になるので、潰れずに済みます^^

 

難点その2 汎用性

時間経過ごとの3枚の画像のサイズ・位置をkeyframesで設定しています。

コード中でいうところの、

@keyframes photoboxa{
0%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 0%,0% 50%,0% 100%;}
10%{background-size:90% 90%,10% 10%,10% 10%;background-position:100% 100%,0% 50%,0% 100%;}
23%{background-size:90% 90%,10% 10%,10% 10%;background-position:100% 100%,0% 0%,0% 50%;}
33%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 100%,0% 0%,0% 50%;}
43%{background-size:10% 10%,90% 90%,10% 10%;background-position:0% 100%,100% 100%,0% 50%;}
56%{background-size:10% 10%,90% 90%,10% 10%;background-position:0% 50%,100% 100%,0% 0%;}
66%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 50%,0% 100%,0% 0%;}
76%{background-size:10% 10%,10% 10%,90% 90%;background-position:0% 50%,0% 100%,100% 100%;}
89%{background-size:10% 10%,10% 10%,90% 90%;background-position:0% 0%,0% 50%,100% 100%;}
100%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 0%,0% 50%,0% 100%;}}

の部分がそれに当たるのですが、では例えば「写真を4枚にしたい・5枚にしたい」と思った場合、この長くてややこしいコードを作り直す事になり…汎用性には難点があると言わざるを得ません^^;

 

 

一応、その「ややこしい」keyframesの内容について説明

0%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 0%,0% 50%,0% 100%;}

みたいなのが大量に並んでいます。

 

ちょっと説明のために色分けすると、

0%{background-size:10% 10%,10% 10%,10% 10%;background-position:0% 0%,0% 50%,0% 100%;}

このうち、最初の0%は「アニメーションの経過時間」をあらわしています。

0%という事は「アニメーション時間として指定した時間のうち0%が経過した時点」つまり開始時点の状態をここで指定している事になります。

 

background-size:10% 10%,10% 10%,10% 10%;

は「3枚の画像それぞれの大きさ」を指定しています。

3枚分の横サイズ・縦サイズを(枠の大きさに対する)%指定で指定したもの…をカンマ区切りで並べています。

10%…はつまり10分の1で、これが「左に小さく並んでいる時の大きさ」となります。

 

background-position:0% 0%,0% 50%,0% 100%;

は「3枚の画像それぞれの配置位置」を指定しています。

これも横位置・縦位置を指定したものをカンマ区切りで並べています。

この場合、3枚とも横位置は0%(つまり左端)を指定しており、縦位置は 0%(上端) 50%(上下中央) 100%(下端)を指定しているんですね。

 

こうして指定した3枚の画像のサイズ・位置を、「アニメーション経過時間」ごとに数値を変えたものをたくさん並べているのが、この長ったらしいコードという事になります。

ちなみに「右下に移動して大きくなった状態」は、「サイズが90% 90%、配置位置が100% 100%」となっています。

 

 

まぁ…やはりややこしいので、「3枚限定」と思っておいたほうが良いかもですね^^;

 

もうちょっと扱いやすいフォトギャラリーはこちら↓

【CSS/JavaScript】多角形フォトギャラリー改訂版 - Little Strange Software

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^