題目地址css
利用 CSS animation 製做一個炫酷的 Sliderhtml
首先頁面包含三種東西git
而後具體實現思路是你點擊每一個label而後出現對應的圖片github
首先是對界面進行佈局瀏覽器
<div class="page"> <div class="slider"> <input id="img1" name="img" type="radio" class="view" checked> <input id="img2" name="img" type="radio" class="view"> <input id="img3" name="img" type="radio" class="view"> <input id="img4" name="img" type="radio" class="view"> <input id="img5" name="img" type="radio" class="view"> <label for="img1" class="img1"></label> <label for="img2" class="img2"></label> <label for="img3" class="img3"></label> <label for="img4" class="img4"></label> <label for="img5" class="img5"></label> <div class="image"> <img src="001.jpg"> <img src="002.jpg"> <img src="003.jpg"> <img src="004.jpg"> <img src="005.jpg"> </div> </div> </div>
* { margin: 0; padding: 0; } html, body { height: 100%; width: 100%; overflow: hidden; } .page { height: 100%; width: 100%; background-color: yellow; } .slider { height: 100%; width: 100%; display: flex; justify-content: center; align-items: flex-end; } .image img { height: 100%; width: 100%; position: fixed; left:0; top: 0; } label { width: 15%; height: 130px; background-color: red; margin-bottom: 50px; margin-left: 10px; margin-right: 10px; filter: brightness(0.8); cursor: pointer; z-index: 10; } /*去除單選框*/ .view{ display: none; }
佈局沒什麼要說的,主要是注意一下幾點ide
label.img1 { background-image: url("001.jpg"); background-size: 100% 100%; } label.img2 { } label.img3 { } label.img4 { } label.img5 { }
很簡單就是做爲背景圖片添加到label上面post
label:hover{ filter: brightness(1); }
開始重點了首先寫keyframes,這個根據excel表來寫就能夠了,篇幅太大,我只展現一個動畫
@keyframes img1 { from { left: -500px; } to { left: 0; } } @keyframes img2 { } @keyframes img3 { } @keyframes img4 { } @keyframes img5 { }
而後就是加checked效果,就是選擇了後就產生動畫
.view:nth-child(1):checked ~ .image img:nth-child(1) { animation: img1 .5s ease-out; display:block; opacity: 1; z-index: 4; } .view:nth-child(2):checked ~ .image img:nth-child(2) { } .view:nth-child(3):checked ~ .image img:nth-child(3) { } .view:nth-child(4):checked ~ .image img:nth-child(4) { } .view:nth-child(5):checked ~ .image img:nth-child(5) { }
就是點擊了這個找到他兄弟節點image而後他的對應個數的子元素來添加動畫 而後大概的效果就出來了
完成上面的後你就有了一個基本的實現了,可是在你玩的時候你會發現一個bug點擊一個新的label而後背景立刻變成最後一張圖而後在這張圖的基礎上出現新的圖片。按道理以前的那張圖應該保留而後出現新的圖片。因此還要加上
.view:not(:checked) ~ .image img{ animation: oncheck 1s linear; } @keyframes oncheck { 0% { opacity: 1; z-index: 3; } 100% { opacity: 1; z-index: 3; } }
在最開始本身動手寫的時候是用的div,而後div沒有點擊這個效果只有hover,因此之作了一個很是粗糙的。 而後交了做業後看到好多同窗是用的js來實現的,感受js實現是比較簡單,而後通常均可以寫出來的。 而後看了不少的做業後發現有位大佬採用單選框的特性來寫,打開了個人新世界,而後我就參考大佬的完成了做業。 附上個人代碼地址 代碼 附上個人效果地址 效果