這段時間比較忙,很久沒在這里分享一些漂亮的HTML5和CSS3資源了,今天起的早,看到一款很不錯的CSS3 3D菜單,覺得非常上眼,就將它分享給大家,順便來分析一下實現的源碼。下面是效果圖:
看了效果圖是不是覺得它是一副麻將,對,第一眼我也認為是用CSS3寫的麻將特效,結果我錯了,它只是長得比較像而已。
另外,你也可以在這里直接查看菜單的DEMO演示。
接下來再分析一下實現這款3D菜單的源代碼。
代碼主要由HTML和CSS3組成,應該說還是比較簡單的。
首先是HTML代碼:
<ul> <li> <a class='list-item' href=''> <i class='icon-reorder'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-th-large'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-bar-chart'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-tasks'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-bell'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-archive'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-comment'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-sitemap'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-thumbs-up'></i> </a> </li> <li> <a class='list-item' href=''> <i class='icon-tumblr'></i> </a> </li> </ul>
這里用了標准的ul li列表來構建菜單的HTML框架,層次非常清晰。
接下來重點是CSS代碼,如何用CSS3的特性來實現菜單的側躺和陰影效果,從來讓其看起來呈3D的狀態。
ul { position: relative; -webkit-transform: rotate(-35deg) skew(20deg, 5deg); -moz-transform: rotate(-35deg) skew(20deg, 5deg); -ms-transform: rotate(-35deg) skew(20deg, 5deg); -o-transform: rotate(-35deg) skew(20deg, 5deg); transform: rotate(-35deg) skew(20deg, 5deg); }
上面的這幾行代碼很關鍵,我們也可以看出用了CSS3的transform屬性的rotate()實現菜單整體旋轉一定角度,然后用skew()讓菜單傾斜一個角度,這樣菜單就開始有3D立體的感覺了。
接下來是每一個菜單項的樣式:
.list-item { background: #000000; color: #575757; text-align: center; height: 2.5em; width: 4em; vertical-align: middle; line-height: 2.5em; border-bottom: 1px solid #060606; position: relative; display: block; text-decoration: none; -webkit-box-shadow: -2em 1.5em 0 #e1e1e1; -moz-box-shadow: -2em 1.5em 0 #e1e1e1; box-shadow: -2em 1.5em 0 #e1e1e1; -webkit-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; -moz-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; -o-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; } .list-item:hover { background: #ff6e42; color: #fffcfb; top: -0.5em; left: 0.5em; -webkit-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; -moz-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; -o-transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; transition: top 0.25s linear, left 0.25s linear, background 0.1s linear, color 0.1s linear; -webkit-box-shadow: -2em 2em 0 #e1e1e1; -moz-box-shadow: -2em 2em 0 #e1e1e1; box-shadow: -2em 2em 0 #e1e1e1; } .list-item:hover:before, .list-item:hover:after { -webkit-transition: all 0.25s linear; -moz-transition: all 0.25s linear; -o-transition: all 0.25s linear; transition: all 0.25s linear; } .list-item:hover:before { background: #b65234; width: 1em; top: 0.5em; left: -1em; } .list-item:hover:after { background: #b65234; width: 1em; bottom: -2.5em; left: 1em; height: 4em; } .list-item:before, .list-item:after { -webkit-transition: all 0.25s linear; -moz-transition: all 0.25s linear; -o-transition: all 0.25s linear; transition: all 0.25s linear; } .list-item:after { content: ""; position: absolute; height: 4em; background: #181818; width: 0.5em; bottom: -2.25em; left: 1.5em; -webkit-transform: rotate(90deg) skew(0deg, 45deg); -moz-transform: rotate(90deg) skew(0deg, 45deg); -ms-transform: rotate(90deg) skew(0deg, 45deg); -o-transform: rotate(90deg) skew(0deg, 45deg); transform: rotate(90deg) skew(0deg, 45deg); } .list-item:before { content: ""; position: absolute; height: 2.5em; background: #121212; width: 0.5em; top: 0.215em; left: -0.45em; -webkit-transform: skewY(-45deg); -moz-transform: skewY(-45deg); -ms-transform: skewY(-45deg); -o-transform: skewY(-45deg); transform: skewY(-45deg); }
我們可以看到用了shadow實現每一個菜單項都有投影,至此,整個菜單的3D效果就已經渲染完了。
另外就是鼠標滑過菜單項的效果,利用了CSS3的動畫特性讓菜單項背景色漸變,形成凸起的效果。
整個實現就是這樣了,你可以下載源代碼,下載地址>>