我在做導(dǎo)航練習(xí)時(shí)己英,是查看那些已經(jīng)成功的網(wǎng)站的源代碼進(jìn)行練習(xí)胯杭,希望通過這些成功的代碼可以學(xué)習(xí)到代碼背后前端工程師們的編程思路上遥。
在查看源代碼中我也學(xué)習(xí)了很多以前忽視的細(xì)節(jié),覺得受益匪淺啊。
當(dāng)我打開拉勾網(wǎng)的css文件時(shí)蔗怠,第一部分是用注釋的方式標(biāo)記了文檔的時(shí)間,作者以及樣式表內(nèi)部方便查看的某些元素的顏色及寬高逃糟。
第二部分是一些初始化的元素樣式捷绑,及初始化的公共類。
第三部分是網(wǎng)頁各個(gè)部分的樣式劫谅。
-
我做的第一個(gè)導(dǎo)航練習(xí)是拉勾網(wǎng)的導(dǎo)航见坑。
lagou_nav.jpg
觀察與思考
1、這個(gè)導(dǎo)航需要寫幾層嵌套呢捏检?
2荞驴、要不要設(shè)置寬度,還是使用100%贯城?
3熊楼、如何居中啊能犯?
4鲫骗、登錄與注冊中間的那個(gè)細(xì)線怎么實(shí)現(xiàn)犬耻。
這些是我發(fā)現(xiàn)的問題,肯定隨著做的過程中還會(huì)有問題挎峦。 -
第一步:設(shè)計(jì)出html結(jié)構(gòu)香追,并為元素設(shè)置相應(yīng)的id與類
<div id='body'>
<div id="header">
<div class="wrapper">
<a class="logo" href=""></a>
<ul class="navheader reset">
<li><a href="">首頁</a></li>
<li><a href="">論壇</a></li>
<li><a href="">我的簡歷</a></li>
<li><a href="">發(fā)布職位</a></li>
</ul>
<ul class="loginTop reset">
<li><a href="">登錄</a></li>
<li>|</li>
<li><a href="">注冊</a></li>
</ul>
</div>
</div>
</div>
<div id="footer"></div>
- 首先分出body與footer兩個(gè)部分。這里面還涉及相應(yīng)的height與min-height設(shè)置坦胶,但是這些又涉及一些兼容的問題透典,所以我就先不寫了,回頭再另寫一篇顿苇。
- 最外層嵌套使用
id='header'
標(biāo)記峭咒,方便尋找里面子元素,里面就可以用class啦纪岁,.wrapper
可以用作包圍元素做公共類使用凑队。class="navheader"
與class="loginTop"
可以作為查找元素使用。 - ul>li>a幔翰,一般的導(dǎo)航基本上都是這樣的結(jié)構(gòu)漩氨。
- ul前的a可以以背景為圖片,做鏈接遗增。
-
對網(wǎng)頁進(jìn)行全局的css設(shè)置叫惊。
我先寫下做導(dǎo)航時(shí)我用到的-
*{outline:none;}
設(shè)置所有元素的輪廓默認(rèn)為無。 -
body,p,a,span,ul,li{margin: 0;padding: 0;}
設(shè)置所有元素的內(nèi)外邊距為0做修。 -
ul.reset{list-style:none;}
去除掉列表的默認(rèn)樣式
-
-
對導(dǎo)航進(jìn)行css設(shè)置
- 設(shè)置包圍元素樣式
#header{
background: #fafafa;
height: 60px;
min-width: 1024px;
border-top: 3px solid #00B38A;
}
#header .wrapper{
width: 1024px;
margin: 0 auto;
}
1霍狰、最外圍#header
設(shè)置了導(dǎo)航的高度,以及導(dǎo)航的背景色饰及,增添了border-top的樣式蔗坯。
2、內(nèi)部.wrapper
設(shè)置了寬度燎含,外部#header
設(shè)置了最小寬度宾濒,二者屬性值一樣。當(dāng)然顯示屏的寬度肯定大于1024px,這樣在加上在.wrapper
里進(jìn)行margin: 0 auto;
可以實(shí)現(xiàn)寬度為1024的內(nèi)容居中屏箍。 -
對導(dǎo)航元素進(jìn)行基本布局
step1.jpg
.wrapper .logo{
float: left;
margin-top: 7px;
width: 229px;
height: 43px;
background: url(image/logo.png) no-repeat;
}
.wrapper .navheader{
float: left;
margin-left: 30px;
}
.navheader li{
float: left;
}
.wrapper .loginTop{
float: right;
}
.loginTop li{
float: left;
}
1绘梦、設(shè)置logo時(shí),圖片原來的尺寸就是229×43铣除,所以這樣設(shè)置并不會(huì)拉伸圖片。
2鹦付、logo與導(dǎo)航菜單均左浮動(dòng)尚粘,登錄注冊按鈕向右浮動(dòng)。 - 對導(dǎo)航菜單進(jìn)行基本樣式修飾
注意:當(dāng)鼠標(biāo)經(jīng)過a
時(shí)敲长,需要有一個(gè)3px的border-bottom郎嫁,但是這個(gè)3px不能超過#header
秉继,需要做的就是讓li
的高度為60px,讓a
的高度為57px泽铛,這樣當(dāng)鼠標(biāo)經(jīng)過時(shí)尚辑,顯示底邊,不會(huì)突出盔腔。
2015-01-18_200656.jpg
.navheader li{
height: 60px;
padding: 0px 20px;
}
.navheader li a{
display: block;
line-height: 57px;
text-decoration: none;
color: #999;
font-size: 20px;
}
.navheader li a:hover{
color: #333;
border-bottom: 3px solid #00B38A;
}
.loginTop li{
height: 30px;
line-height: 30px;
color: #FFF;
background: #00B38A;
}
.loginTop li a{
display: block;
line-height: 30px;
padding: 0px 10px;
color: #fff;
text-decoration:none ;
}
.loginTop li a:hover{
color: #CCEAE3;
}
1杠茬、a
為行內(nèi)元素需要將他轉(zhuǎn)化為塊級(jí)元素,這樣才能夠設(shè)置高度弛随。行內(nèi)元素如果不設(shè)置為塊級(jí)瓢喉,直接設(shè)置行高,雖然也可以改變高度舀透,并且占據(jù)文檔流栓票,但是行高所占據(jù)的空白并不會(huì)是屬于a
的。
2愕够、細(xì)心的可以發(fā)現(xiàn)走贪,我為每一個(gè)a
只設(shè)置了行高,并沒有設(shè)置高度惑芭,因?yàn)樵贗E6坠狡、7版本的瀏覽器,我發(fā)現(xiàn)未設(shè)置高度時(shí)强衡,我發(fā)現(xiàn)a
并沒有具備真正的塊級(jí)元素具備的那樣擦秽,寬度充斥父元素。但是設(shè)置了高度后漩勤,發(fā)現(xiàn)他們一下子具備了塊級(jí)元素的特點(diǎn)感挥。但是我們不想讓他那樣,所以我就不寫高度了越败。這樣效果均兼容触幼。如果寫了呢,也很簡單只要為a補(bǔ)上一個(gè)float:left
3究飞、ie6置谦,并不支持png格式的圖片。亿傅。媒峡。。葵擎。 - 其實(shí)乍一看谅阿,貌似具備了長相,但是我發(fā)現(xiàn),我鼠標(biāo)經(jīng)過菜單签餐,菜單的變化是一個(gè)漸變的寓涨,而不是突然,氯檐。
.navheader a,.loginTop a{
transition: all .2s ease-in-out ;
-webkit-transition: all .2s ease-in-out ;
-moz-transition: all .2s ease-in-out ;
-o-transition: all .2s ease-in-out ;
}
transition
這個(gè)屬性可以設(shè)置戒良,當(dāng)某個(gè)元素的某個(gè)樣式改變時(shí),可以進(jìn)行漸變的變化冠摄。他可以實(shí)現(xiàn)更精彩的畫面糯崎,需要學(xué)習(xí)html5的相關(guān)知識(shí)。會(huì)繼續(xù)學(xué)習(xí)的耗拓。
- 設(shè)置包圍元素樣式