iT邦幫忙

DAY 27
3

CSS沒有極限系列 第 23

CSS沒有極限 - pure CSS 專輯列表效果

本篇CSS效果發表於http://ashareaday.wcc.tw/#2013-10-12 (建議使用Chrome瀏覽器)
鐵人賽快要結束了,今明兩天會介紹純CSS可以做些什麼特別的效果。今天要介紹的是專輯相簿的效果,而明天是要介紹純CSS的自適應動態選單。

參考來源 : http://codepen.io/anon/pen/hixjL
建立html

<div class="cover">
  <div class="coverflow-list">
    <input type="checkbox" name="cover-item" id="cover-1">
    <div class="coverflow-item">
      <label for="cover-1">
      <figure class="album-cover">
        <img src="/images/mayday/001.jpg" alt="">
      </figure>
        <figcaption class="album-name">為愛而生</figcaption>
      </label>
    </div>
  </div>
</div>
<div class="controllor">
<label for="cover-1">遠端遙控器</label>
</div>

首先準備好需要的html,有些重點可以讓大家了解。
checkbox 中的id記得設定
id是唯一的
label中的for的值會對應到checkbox的id
label可以重複使用,for的值對應相同ID即可
設定基本樣式
這一部分只是先設定基本樣式,就不多闡述了。

.coverflow-item
  display: inline-block
  position: relative
  margin: 0 auto
  text-align: center
  .album-cover
    height: 150px
    width: 150px
    img
      opacity: 0.5
  .album-name
    text-align: center
    display: block
    color: #777
  label
    display: block

設定3D樣式
在先前的文章有依序介紹許多transform的樣式設定,如果仔細看其實都是前幾個章節介紹的。

.coverflow-list
  +perspective(900px) //設定3D景深距離
  +transform-style(preserve-3d)
  +perspective-origin(100% 30%) //3D透視的視點
  .coverflow-item
    +transition(all .3s ease) //transition動畫
    +transform(rotateY(45deg)) //y軸旋轉45度,這邊都是用中心點都軸心

套用checkbox效果
這步驟有兩個重點一個是checked(被選取)另一個則是+(相鄰),所以要進行變化的元素必須緊貼著checkbox元素。

input[type="checkbox"]
  display: none //隱藏checkbox
  &:checked //如果被選取時的效果
    &+.coverflow-item //如果被選取時 其他相鄰元件效果
      +transition(all .3s ease)
      +transform(rotateY(0.1deg))
      margin: 0 auto
      img
        opacity: 1
      .album-name
        color: #333

只要善用label中的for對應input的ID,無論多遠的距離的可以控制,接下來只要就是控制checkbox的相鄰物件狀態,就可以達到這樣的效果。

Demo

這一個部分是用html+CSS構成,而其中的重點是上面所介紹的label及checkbox,在本區雖然把checkbox換成了radio,但概念上是差不多的;另外一個重點則是Css selector中的~,他可以選取目前元素後方所有同層級的元素,讓這一個CD相簿有三種角度。

Html 原始碼
原始碼相當的長,我就只擷取部分作為範例。

<div class="test">
<div class="cover">
  <ul class="coverflow-list">
    <input type="radio" name="cover-item" id="cover-1">
    <li class="coverflow-item">
      <label for="cover-1">
        <figure class="album-cover">
          <img src="/images/mayday/001.jpg" alt="">
        </figure>
        <figcaption class="album-name">為愛而生</figcaption>
      </label>
    </li>
    ...略
  </ul>
</div>
  <div class="controllor">
    <label for="cover-1">1</label>
    <label for="cover-2">2</label>
    <label for="cover-3">3</label>
    <label for="cover-4">4</label>
    <label for="cover-5">5</label>
    <label for="cover-6">6</label>
  </div>
</div>

如果有少Div結尾,請不要太在意,只是我沒copy到而已...
這一段html和上次比較不同的地方,就是把checkbox改成了radio,radio在用法上是屬於單選題,而checkbox是屬於多選題;只要input屬性name都是相同的,都算是一個群組,而這一個群組就只能一個被選擇。

Sass

.coverflow-item
  display: inline-block
  position: relative
  margin: 0 auto
  text-align: center
  margin: 0 -45px
  background-color: white
  .album-cover
    height: 150px
    width: 150px
    -webkit-box-reflect: below 22px -webkit-linear-gradient(rgba(255,255,255,0)85%, white 150%)
    box-reflect: below 22px linear-gradient(rgba(255,255,255,0) 85%, white 150%)
    //專輯反射
    img
      opacity: 0.5
  .album-name
    text-align: center
    display: block
    color: #777
  label   
    display: block
    
.coverflow-list
  +perspective(900px)
  +transform-style(preserve-3d)
  +perspective-origin(100% 30%)
  .coverflow-item
    +transition(all .3s ease)
    +transform(rotateY(45deg))
input[type="radio"]
  display: none
  &:checked
    &+.coverflow-item
      +transition(all .3s ease)
      +transform(rotateY(0.1deg))
      margin: 0 auto
      img
        opacity: 1
      .album-name
        color: #555
      &~.coverflow-item
        +transform(rotateY(-45deg))
      //重點語法 將被選取的Radio後方全部都反方向轉45度
.controllor
  margin-top: 40px
  label
    cursor: pointer
    color: #999
    padding: 8px
    border: 1px solid #ccc
    background-color: #fafafa
    +transition(all .3s)
    &:hover
      color: #555
      border: 1px solid #555

這一部分可以著重的重點就是放在CSS selector的~語法,再被選取的radio後方,進行反向Y軸旋轉的動作。


上一篇
CSS沒有極限 - CSS transform-3D的透視(perspective)
下一篇
CSS沒有極限 - CSS only responsive navigation
系列文
CSS沒有極限41

尚未有邦友留言

立即登入留言