成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專(zhuān)欄INFORMATION COLUMN

css實(shí)現(xiàn)左側(cè)寬度自適應(yīng),右側(cè)固定寬度

Sunxb / 2627人閱讀

摘要:頁(yè)面布局中經(jīng)常用會(huì)遇到左側(cè)寬度自適應(yīng),右側(cè)固定寬度,或者左側(cè)寬度固定,右側(cè)自適應(yīng)。一般固定寬度是導(dǎo)航欄,自適應(yīng)寬度的是主體內(nèi)容顯示區(qū)。

頁(yè)面布局中經(jīng)常用會(huì)遇到左側(cè)寬度自適應(yīng),右側(cè)固定寬度,或者左側(cè)寬度固定,右側(cè)自適應(yīng)??傊褪且贿吂潭▽挾?,一邊自適應(yīng)寬度。

一般固定寬度是導(dǎo)航欄,自適應(yīng)寬度的是主體內(nèi)容顯示區(qū)。

所以要實(shí)現(xiàn)這種布局,就先給出如下html結(jié)構(gòu):

主體內(nèi)容顯示區(qū)域

container用于包裹sidebar與main,footer用來(lái)測(cè)試前面的布局不會(huì)影響footer的正常顯示,如果footer樣式不對(duì),說(shuō)明我們的布局是有問(wèn)題的。

接下來(lái)看常見(jiàn)的幾種布局方法:

四種布局: 固定區(qū)域浮動(dòng),自適應(yīng)區(qū)域不設(shè)置寬度但設(shè)置margin
.container {
    overflow: hidden;
    *zoom: 1;
}

.sidebar {
    float: right;
    width: 300px;
    background: #333;
}

.main {
    margin-right: 320px;
    background: #666;
}

.footer {
    margin-top: 20px;
    background: #ccc;
}

其中,sidebar讓它浮動(dòng),并設(shè)置了一個(gè)寬度;而main沒(méi)有設(shè)置寬度。

大家要注意html中必須使用div標(biāo)簽,不要妄圖使用什么p標(biāo)簽來(lái)達(dá)到目的。因?yàn)閐iv有個(gè)默認(rèn)屬性,即如果不設(shè)置寬度,那它會(huì)自動(dòng)填滿它的父標(biāo)簽的寬度。這里的main就是例子。

當(dāng)然我們不能讓它填滿了,填滿了它就不能和sidebar保持同一行了。我們給它設(shè)置一個(gè)margin。由于sidebar在右邊,所以我們?cè)O(shè)置main的margin-right值,值比sidebar的寬度大一點(diǎn)點(diǎn)——以便區(qū)分它們的范圍,例子中是320。

假設(shè)main的默認(rèn)寬度是100%,那么它設(shè)置了margin后,它的寬度就變成了100%-320,此時(shí)main發(fā)現(xiàn)自己的寬度可以與sidebar擠在同一行了,于是它就上來(lái)了。

而寬度100%是相對(duì)于它的父標(biāo)簽來(lái)的,如果我們改變了它父標(biāo)簽的寬度,那main的寬度也就會(huì)變——比如我們把瀏覽器窗口縮小,那container的寬度就會(huì)變小,而main的寬度也就變小,但它的實(shí)際寬度100%-320始終是不會(huì)變的。

這個(gè)方法看起來(lái)很完美,只要我們記得清除浮動(dòng)(這里我用了最簡(jiǎn)單的方法),那footer也不會(huì)錯(cuò)位。而且無(wú)論main和sidebar誰(shuí)更長(zhǎng),都不會(huì)對(duì)布局造成影響。

但實(shí)際上這個(gè)方法有個(gè)很老火的限制——html中sidebar必須在main之前!

但我需要sidebar在main之后!因?yàn)槲业膍ain里面才是網(wǎng)頁(yè)的主要內(nèi)容,我不想主要內(nèi)容反而排在次要內(nèi)容后面。

但如果sidebar在main之后,那上面的一切都會(huì)化為泡影。

可能有的人不理解,說(shuō)你干嘛非要sidebar在后面呢?這個(gè)問(wèn)題說(shuō)來(lái)話長(zhǎng),反正問(wèn)題就是——main必須在sidebar之前,但main寬度要自適應(yīng),怎么辦?

下面有兩個(gè)辦法,不過(guò)我們先把html結(jié)構(gòu)改成我們想要的樣子:

主體內(nèi)容顯示區(qū)域
固定區(qū)域使用定位,自適應(yīng)區(qū)域不設(shè)置寬度但設(shè)置margin

我們把sidebar扔掉,只對(duì)main設(shè)置margin,那么我們會(huì)發(fā)現(xiàn)main的寬度就已經(jīng)變成自適應(yīng)了——于是main對(duì)sidebar說(shuō),我的寬度,與你無(wú)關(guān)。

main很容易就搞定了,此時(shí)來(lái)看看sidebar,它迫不得已拋棄了float。我們來(lái)看看sidebar的特點(diǎn):在右邊,寬度300,它的定位對(duì)main不影響——很明顯,一個(gè)絕對(duì)主義分子誕生了。

于是我們的css如下:

.container {
    position: relative;
}

.sidebar {
    position: absolute;
    top: 0;
    right: 0;
    width: 300px;
    background: #333;
}

.main {
    margin-right: 320px;
    background: #666;
}

這段css中要注意給container加上了相對(duì)定位,以免sidebar太絕對(duì)了跑到整個(gè)網(wǎng)頁(yè)的右上角而不是cintainer的右上角。

好像完成了?在沒(méi)有看footer的表現(xiàn)時(shí),我很欣慰。我們來(lái)把sidebar加長(zhǎng)100px。

咦,好像不對(duì),footer怎么還是在那兒呢?怎么沒(méi)有自動(dòng)往下走呢?footer說(shuō)——我不給絕對(duì)主義者讓位!

其實(shí)這與footer無(wú)關(guān),而是因?yàn)閏ontainer對(duì)sidebar的無(wú)視造成的——你再長(zhǎng),我還是沒(méi)感覺(jué)。

看來(lái)這種定位方式只能滿足sidebar自己,但對(duì)它的兄弟們卻毫無(wú)益處。

float與margin齊上陣

經(jīng)過(guò)前面的教訓(xùn),我們重新確立了這個(gè)自適應(yīng)寬度布局必須要達(dá)成的條件:

1.sidebar寬度固定,main寬度自適應(yīng)
2.main要在sidebar之前
3.后面的元素要能正常顯示,不能受影響

由于絕對(duì)定位會(huì)讓其他元素?zé)o視它的存在,所以絕對(duì)定位的方式必須拋棄。

如果main和sidebar一樣,都用float,那main的自適應(yīng)寬度就沒(méi)戲了;如果不給main加float,那sidebar又會(huì)跑到下一行去。

所以,最終我決定:float與margin都用。

我打算把main的寬度設(shè)為100%,然后設(shè)置float:left,最后把它向左移動(dòng)320,以便于sidebar能擠上來(lái)。

但這么一來(lái)main里面的內(nèi)容也會(huì)跟著左移320像素,導(dǎo)致被遮住了,所以我們要把它重新擠出來(lái)。為了好擠,我用了一個(gè)額外的div包裹住內(nèi)容,所以html結(jié)構(gòu)變成了這種樣子:

主體內(nèi)容顯示區(qū)域

css則變成這樣:

.main {
    float: left;
    width: 100%;
    margin-left: -320px;
}

.main_container {
    margin-left: 320px;
}

.sidebar {
    float: right;
    width: 300px;
}    

這樣一改,真正的“main”就變成了main_container,它的寬度跟以前的main一樣,是100%-320。

大家可能注意到了代碼中的兩個(gè)margin-left,一個(gè)-320px一個(gè)320px,最后結(jié)合起來(lái)相當(dāng)于什么都沒(méi)干,著實(shí)蛋疼。但它確實(shí)解決了main與sidebar的順序問(wèn)題。

這個(gè)方法的缺點(diǎn)就是:太怪異,以及額外多了一層div。

標(biāo)準(zhǔn)瀏覽器的方法:

當(dāng)然,以不折騰人為標(biāo)準(zhǔn)的w3c標(biāo)準(zhǔn)早就為我們提供了制作這種自適應(yīng)寬度的標(biāo)準(zhǔn)方法。那就簡(jiǎn)單了:把container設(shè)為display:table并指定寬度100%,然后把main+sidebar設(shè)為display:table-cell;然后只給sidebar指定一個(gè)寬度,那么main的寬度就變成自適應(yīng)了。

.container {
    display: table;
    width: 100%;
}

.main {
    display: table-cell;
}

.sidebar {
    display: table-cell;
    width: 300px;
}

代碼很少,而且不會(huì)有額外標(biāo)簽。不過(guò)這是IE7都無(wú)效的方法。

如果不考慮ie7及以下版本,則使用標(biāo)準(zhǔn)方法;如果不在意sidebar與main的順序,則用第一種方法;否則用第3種方法。

以上代碼都沒(méi)在IE6測(cè)試,有問(wèn)題不負(fù)責(zé)解釋。個(gè)人覺(jué)得,讓IE6壽終正寢的辦法就是——從此不再理它。

參考文章:http://jo2.org/css-auto-adapt...

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/116490.html

相關(guān)文章

  • css經(jīng)典布局之左側(cè)固定大小右側(cè)動(dòng)適應(yīng)

    摘要:最近學(xué)習(xí)了一種經(jīng)典布局,固定左側(cè)或右側(cè)的寬度,另一側(cè)自適應(yīng)寬度,此種布局挺常用,尤其是像后臺(tái),大部分都是采用這種結(jié)構(gòu),還比如像訂餐類(lèi)的,進(jìn)入商家的時(shí)候,會(huì)出現(xiàn)一堆飯的列表,左側(cè)是飯的分類(lèi),右側(cè)是飯的列表等等。 最近學(xué)習(xí)了一種經(jīng)典布局,固定左側(cè)或右側(cè)的寬度,另一側(cè)自適應(yīng)寬度,此種布局挺常用,尤其是像后臺(tái),大部分都是采用這種結(jié)構(gòu),還比如像訂餐類(lèi)的APP,進(jìn)入商家的時(shí)候,會(huì)出現(xiàn)一堆飯的列表,...

    Carbs 評(píng)論0 收藏0
  • css經(jīng)典布局之左側(cè)固定大小右側(cè)動(dòng)適應(yīng)

    摘要:最近學(xué)習(xí)了一種經(jīng)典布局,固定左側(cè)或右側(cè)的寬度,另一側(cè)自適應(yīng)寬度,此種布局挺常用,尤其是像后臺(tái),大部分都是采用這種結(jié)構(gòu),還比如像訂餐類(lèi)的,進(jìn)入商家的時(shí)候,會(huì)出現(xiàn)一堆飯的列表,左側(cè)是飯的分類(lèi),右側(cè)是飯的列表等等。 最近學(xué)習(xí)了一種經(jīng)典布局,固定左側(cè)或右側(cè)的寬度,另一側(cè)自適應(yīng)寬度,此種布局挺常用,尤其是像后臺(tái),大部分都是采用這種結(jié)構(gòu),還比如像訂餐類(lèi)的APP,進(jìn)入商家的時(shí)候,會(huì)出現(xiàn)一堆飯的列表,...

    booster 評(píng)論0 收藏0
  • css經(jīng)典布局之左側(cè)固定大小右側(cè)動(dòng)適應(yīng)

    摘要:最近學(xué)習(xí)了一種經(jīng)典布局,固定左側(cè)或右側(cè)的寬度,另一側(cè)自適應(yīng)寬度,此種布局挺常用,尤其是像后臺(tái),大部分都是采用這種結(jié)構(gòu),還比如像訂餐類(lèi)的,進(jìn)入商家的時(shí)候,會(huì)出現(xiàn)一堆飯的列表,左側(cè)是飯的分類(lèi),右側(cè)是飯的列表等等。 最近學(xué)習(xí)了一種經(jīng)典布局,固定左側(cè)或右側(cè)的寬度,另一側(cè)自適應(yīng)寬度,此種布局挺常用,尤其是像后臺(tái),大部分都是采用這種結(jié)構(gòu),還比如像訂餐類(lèi)的APP,進(jìn)入商家的時(shí)候,會(huì)出現(xiàn)一堆飯的列表,...

    GraphQuery 評(píng)論0 收藏0
  • 七種實(shí)現(xiàn)左側(cè)固定右側(cè)適應(yīng)兩欄布局的方法

    摘要:總結(jié)一下左邊固定,右邊自適應(yīng)的兩欄布局的七種方法?;镜臉邮绞牵瑑蓚€(gè)相距左側(cè)寬基本的樣式是,兩個(gè)盒子相距左側(cè)盒子寬,右側(cè)盒子寬度自適應(yīng)。沒(méi)有清除浮動(dòng)的方法,若左側(cè)盒子高于右側(cè)盒子,就會(huì)超出父容器的高度。 總結(jié)一下左邊固定,右邊自適應(yīng)的兩欄布局的七種方法。其中有老生常談的float方法,BFC方法,也有CSS3的flex布局與grid布局。并非所有的布局都會(huì)在開(kāi)發(fā)中使用,但是其中也會(huì)涉及...

    luffyZh 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<