酷炫的響應式導航欄


一直想做一個純css的導航欄,今天終於在百忙的工作中抽出一點時間來寫了一下。唉,,.......都是淚啊....

不說了,看下效果吧:

 

看着很炫酷哦,哈哈哈,接下來一步一步來實現它吧。。要有耐心哦。

看下dom元素怎么排列的,就是最普通的():

header.html:

 1 <!DOCTYPE html>
 2 <html>
 3 <head lang="en">
 4     <meta charset="UTF-8">
 5     <title>xxy so cool</title>
 6     <link href="css/header2.css" rel="stylesheet" type="text/css" />
 7 </head>
 8 <body>
 9 <div class="container" id="main" role="main">
10     <ul class="menu">
11         <li><a href="#">Home</a></li>
12         <li><a href="#s1">Menu 1</a>
13             <ul class="submenu">
14                 <li><a href="#">Submenu a</a></li>
15                 <li><a href="#">Submenu b</a></li>
16                 <li><a href="#">Submenu c</a></li>
17                 <li><a href="#">Submenu d</a></li>
18                 <li><a href="#">Submenu e</a></li>
19                 <li><a href="#">Submenu f</a></li>
20                 <li><a href="#">Submenu g</a></li>
21                 <li><a href="#">Submenu h</a></li>
22             </ul>
23         </li>
24         <li class="active"><a href="#s2">Menu 2</a>
25             <ul class="submenu">
26                 <li><a href="#">Submenu a</a></li>
27                 <li><a href="#">Submenu b</a></li>
28                 <li><a href="#">Submenu c</a></li>
29                 <li><a href="#">Submenu d</a></li>
30                 <li><a href="#">Submenu e</a></li>
31                 <li><a href="#">Submenu f</a></li>
32                 <li><a href="#">Submenu g</a></li>
33                 <li><a href="#">Submenu h</a></li>
34             </ul>
35         </li>
36         <li><a href="#">Menu 3</a>
37             <ul class="submenu">
38                 <li><a href="#">Submenu a</a></li>
39                 <li><a href="#">Submenu b</a></li>
40                 <li><a href="#">Submenu c</a></li>
41                 <li><a href="#">Submenu d</a></li>
42                 <li><a href="#">Submenu e</a></li>
43                 <li><a href="#">Submenu f</a></li>
44                 <li><a href="#">Submenu g</a></li>
45                 <li><a href="#">Submenu h</a></li>
46             </ul>
47         </li>
48         <li><a href="#">Menu 4</a></li>
49         <li><a href="#">Back to tutorial</a></li>
50     </ul>
51 </div>
52 </body>
53 </html>

就是最基本的ul套li 然后子菜單 在li 里面在套個 ul  ,這個就不多說了,看樣式怎么實現的吧,我們一點點來說....

看一下樣式:

header2.css:

  1 * {
  2     margin: 0;
  3     padding: 0;
  4 }
  5 html {
  6     /*background-color: #000;*/
  7 }
  8 .container {
  9     margin: 30px auto;
 10     width: 90%;
 11 }
 12 .menu {
 13     height: 58px;
 14 }
 15 
 16 
 17 
 18 /* general styles */
 19 .menu, .menu ul {
 20     list-style: none; /*去掉li標簽前面的圈圈*/
 21     padding: 0;
 22     margin: 0;
 23 }
 24 .menu li {
 25     /*線性漸變*/
 26     background: -moz-linear-gradient(#292929, #252525);
 27     background: -ms-linear-gradient(#292929, #252525);
 28     background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #292929), color-stop(100%, #252525));
 29     background: -webkit-linear-gradient(#292929, #252525);
 30     background: -o-linear-gradient(#292929, #252525);
 31     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#252525');
 32     -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#292929', endColorstr='#252525')";
 33     background: linear-gradient(#292929, #252525);
 34 
 35     /*上下邊框的顏色等的設置*/
 36     border-bottom: 2px solid #181818;
 37     border-top: 2px solid #303030;
 38     min-width: 160px;
 39 }
 40 .menu > li {
 41     /*成行顯示——浮動*/
 42     display: block;
 43     float: left;
 44     position: relative;
 45 }
 46 .menu > li:first-child {
 47     border-radius: 5px 0 0;
 48 }
 49 .menu a {
 50     border-left: 3px solid rgba(0, 0, 0, 0);
 51     color: #808080;
 52     display: block;
 53     font-family: 'Lucida Console';
 54     font-size: 18px;
 55     line-height: 54px;
 56     padding: 0 25px;
 57     text-decoration: none;  /*去掉a標簽下面的橫線*/
 58     text-transform: uppercase;  /*字體大寫*/
 59 }
 60 /* 鼠標放上后的樣式 */
 61 .menu li:hover {
 62     background-color: #1c1c1c;
 63     background: -moz-linear-gradient(#1c1c1c, #1b1b1b);
 64     background: -ms-linear-gradient(#1c1c1c, #1b1b1b);
 65     background: -webkit-gradient(linear, left top, left bottom, color-stop(0%, #1c1c1c), color-stop(100%, #1b1b1b));
 66     background: -webkit-linear-gradient(#1c1c1c, #1b1b1b);
 67     background: -o-linear-gradient(#1c1c1c, #1b1b1b);
 68     filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#1c1c1c', endColorstr='#1b1b1b');
 69     -ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='#1c1c1c', endColorstr='#1b1b1b')";
 70     background: linear-gradient(#1c1c1c, #1b1b1b);
 71 
 72     border-bottom: 2px solid #222222;
 73     border-top: 2px solid #1B1B1B;
 74 }
 75 .menu li:hover > a {
 76     border-radius: 5px 0 0 0;
 77     border-left: 3px solid #C4302B;
 78     color: #C4302B;
 79 }
 80 
 81 
 82 
 83 /* submenu styles */
 84 /* 初始狀態設置 */
 85 .submenu {
 86     left: 0;
 87     max-height: 0;
 88     position: absolute;
 89     top: 100%;
 90     z-index: 0;
 91 
 92     -webkit-perspective: 400px;
 93     -moz-perspective: 400px;
 94     -ms-perspective: 400px;
 95     -o-perspective: 400px;
 96     perspective: 400px;
 97 }
 98 .submenu li {
 99     opacity: 0;
100 
101     -webkit-transform: rotateY(90deg);
102     -moz-transform: rotateY(90deg);
103     -ms-transform: rotateY(90deg);
104     -o-transform: rotateY(90deg);
105     transform: rotateY(90deg);
106 
107     -webkit-transition: opacity .4s, -webkit-transform .5s;
108     -moz-transition: opacity .4s, -moz-transform .5s;
109     -ms-transition: opacity .4s, -ms-transform .5s;
110     -o-transition: opacity .4s, -o-transform .5s;
111     transition: opacity .4s, transform .5s;
112 }
113 /* 放上后 a標簽變成白色 */
114 .menu .submenu li:hover a {
115     border-left: 3px solid #454545;
116     border-radius: 0;
117     color: #ffffff;
118 }
119 .menu > li:hover .submenu, .menu > li:focus .submenu {
120     max-height: 2000px;
121     z-index: 10;
122 }
123 .menu > li:hover .submenu li,
124 .menu > li:focus .submenu li {
125     opacity: 1;
126 
127     -webkit-transform: none;
128     -moz-transform: none;
129     -ms-transform: none;
130     -o-transform: none;
131     transform: none;
132 }
133 
134 
135 
136 /* CSS3 delays for transition effects */
137 .menu li:hover .submenu li:nth-child(1) {
138     -webkit-transition-delay: 0s;
139     -moz-transition-delay: 0s;
140     -ms-transition-delay: 0s;
141     -o-transition-delay: 0s;
142     transition-delay: 0s;
143 }
144 .menu li:hover .submenu li:nth-child(2) {
145     -webkit-transition-delay: 50ms;
146     -moz-transition-delay: 50ms;
147     -ms-transition-delay: 50ms;
148     -o-transition-delay: 50ms;
149     transition-delay: 50ms;
150 }
151 .menu li:hover .submenu li:nth-child(3) {
152     -webkit-transition-delay: 100ms;
153     -moz-transition-delay: 100ms;
154     -ms-transition-delay: 100ms;
155     -o-transition-delay: 100ms;
156     transition-delay: 100ms;
157 }
158 .menu li:hover .submenu li:nth-child(4) {
159     -webkit-transition-delay: 150ms;
160     -moz-transition-delay: 150ms;
161     -ms-transition-delay: 150ms;
162     -o-transition-delay: 150ms;
163     transition-delay: 150ms;
164 }
165 .menu li:hover .submenu li:nth-child(5) {
166     -webkit-transition-delay: 200ms;
167     -moz-transition-delay: 200ms;
168     -ms-transition-delay: 200ms;
169     -o-transition-delay: 200ms;
170     transition-delay: 200ms;
171 }
172 .menu li:hover .submenu li:nth-child(6) {
173     -webkit-transition-delay: 250ms;
174     -moz-transition-delay: 250ms;
175     -ms-transition-delay: 250ms;
176     -o-transition-delay: 250ms;
177     transition-delay: 250ms;
178 }
179 .menu li:hover .submenu li:nth-child(7) {
180     -webkit-transition-delay: 300ms;
181     -moz-transition-delay: 300ms;
182     -ms-transition-delay: 300ms;
183     -o-transition-delay: 300ms;
184     transition-delay: 300ms;
185 }
186 .menu li:hover .submenu li:nth-child(8) {
187     -webkit-transition-delay: 350ms;
188     -moz-transition-delay: 350ms;
189     -ms-transition-delay: 350ms;
190     -o-transition-delay: 350ms;
191     transition-delay: 350ms;
192 }
193 
194 .submenu li:nth-child(1) {
195     -webkit-transition-delay: 350ms;
196     -moz-transition-delay: 350ms;
197     -ms-transition-delay: 350ms;
198     -o-transition-delay: 350ms;
199     transition-delay: 350ms;
200 }
201 .submenu li:nth-child(2) {
202     -webkit-transition-delay: 300ms;
203     -moz-transition-delay: 300ms;
204     -ms-transition-delay: 300ms;
205     -o-transition-delay: 300ms;
206     transition-delay: 300ms;
207 }
208 .submenu li:nth-child(3) {
209     -webkit-transition-delay: 250ms;
210     -moz-transition-delay: 250ms;
211     -ms-transition-delay: 250ms;
212     -o-transition-delay: 250ms;
213     transition-delay: 250ms;
214 }
215 .submenu li:nth-child(4) {
216     -webkit-transition-delay: 200ms;
217     -moz-transition-delay: 200ms;
218     -ms-transition-delay: 200ms;
219     -o-transition-delay: 200ms;
220     transition-delay: 200ms;
221 }
222 .submenu li:nth-child(5) {
223     -webkit-transition-delay: 150ms;
224     -moz-transition-delay: 150ms;
225     -ms-transition-delay: 150ms;
226     -o-transition-delay: 150ms;
227     transition-delay: 150ms;
228 }
229 .submenu li:nth-child(6) {
230     -webkit-transition-delay: 100ms;
231     -moz-transition-delay: 100ms;
232     -ms-transition-delay: 100ms;
233     -o-transition-delay: 100ms;
234     transition-delay: 100ms;
235 }
236 .submenu li:nth-child(7) {
237     -webkit-transition-delay: 50ms;
238     -moz-transition-delay: 50ms;
239     -ms-transition-delay: 50ms;
240     -o-transition-delay: 50ms;
241     transition-delay: 50ms;
242 }
243 .submenu li:nth-child(8) {
244     -webkit-transition-delay: 0s;
245     -moz-transition-delay: 0s;
246     -ms-transition-delay: 0s;
247     -o-transition-delay: 0s;
248     transition-delay: 0s;
249 }

天哪 ,這么多,哈哈哈...一點不復雜,來給你屢屢....

19---60行 是對導航欄的基本樣式設置:

  24行對 li 元素進行了背景顏色的線性漸變和上下邊框顏色的設置,40行的設置使得一級的 li 元素在同一行顯示 ,46行給第一個li 元素加了個圓角邊框。49-60設置了a 的樣式,包括行高(用來垂直居中,配合display:block)、字體顏色大小等。

  設置完后的樣子是:

  

 61--79行是對鼠標放上或者元素觸發焦點時的樣式設置:

  61-74是對每個 li 的 顏色和邊框顏色的改變,75-79,給a 添加一個左側的橙色框,而且是圓角的。。嘿嘿,不喜歡的話,你自己設置吧,切!!!!

  設置完后的樣子是:(怎么感覺像是在給誰)

  

85--132 用來把二級導航隱藏並添加獲取焦點后的樣式變化設置:

  85-97,添加了一條屬性max-height:0;讓二級的 ul  看不到了(同時在99行讓 li  透明,也看不到。),然后再120行 讓它獲取焦點后加上最大高度,同時讓在241行 讓 li opacity為1。

  在96行添加了屬性perspective屬性,這個屬性想了半天還是一知半解。設置元素被查看位置的視圖 配合 屬性perspective-origin 來使用對3D轉換元素進行查看位置的設置。。實在不懂就下次詳細分析一下吧,期待下一次的CSS3屬性詳解。

  好了看一下現在什么樣了:

  

基本的樣子是有了,但是二級導航展示的不夠有層次感:接下來給二級的 ul 下面的 li  加上動畫的延遲就會有層次感了:、

也就是137行下面的樣式代碼了,就是加上delay 延遲,很簡單的哦。

哇卡卡卡卡卡,,大功告成了!! 效果就是剛開始展示的那個樣子了。

如果顏色不喜歡自己可以設置那些漸變的顏色和 觸發焦點事件后的顏色的變化。

今天就這樣吧,也是抽出時間看的,唉,感慨時間太少啊。。。我的青春年華。55555555555555555555555555

(注意:帥哥一枚,喜歡請關注微博和博客哦 — _ —).


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM