CSS3與頁面佈局學習總結

1、負邊距與浮動佈局
1.一、負邊距
所謂的負邊距就是margin取負值的狀況,如margin:-100px,margin:-100%。當一個元素與另外一個元素margin取負值時將拉近距離。常見的功能以下:css

1.1.一、向上移動
當多個元素同時從標準流中脫離開來時,若是前一個元素的寬度爲100%寬度,後面的元素經過負邊距能夠實現上移。當負的邊距超過自身的寬度將上移,只要沒有超過自身寬度就不會上移,示例以下:html

複製代碼
<!DOCTYPE html>
<html>瀏覽器

    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            #div1 {
                height: 100px;
                background: lightblue;
                width: 100%;
                float: left;
            }
            
            #div2 {
                height: 100px;
                background: lightgreen;
                width: 30%;
                float: left;
                margin-left: -100%;
            }
        </style>
    </head>ide

    <body>
        <div id="div1">div1
        </div>
        <div id="div2">div2
        </div>
    </body>佈局

</html>
複製代碼
margin-left:-29%時運行效果:學習

margin-left:-30%時運行效果:ui

margin-left:-100%時運行效果:spa

1.1.二、去除列表右邊框
開發中常須要在頁面中展現一些列表,如商品展現列表等,若是咱們要實現以下佈局:htm

 

示例代碼:開發

複製代碼
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            #div1 {
                width: 800px;
                margin: 0 auto;
                border: 3px solid lightblue;
                overflow: hidden;
                margin-top: 10px;
            }
            
            .box {
                width: 180px;
                height: 180px;
                margin: 0 20px 20px 0;
                background: lightgreen;
                float: left;
            }
        </style>
    </head>

    <body>
        <div id="div1">
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
            <div class="box">
            </div>
        </div>
    </body>

</html>
複製代碼
運行後的結果:

可是上面的效果中右邊多出了20px的距離,底下多出20px空白,解決方法以下:

複製代碼
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>負邊距</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            #div1 {
                width: 780px;
                height: 380px;
                margin: 0 auto;
                border: 3px solid lightblue;
                overflow: hidden;
                margin-top: 10px;
            }
            .box {
                width: 180px;
                height: 180px;
                margin: 0 20px 20px 0;
                background: lightgreen;
                float: left;
            }
            #div2{
                margin-right: -20px;
            }
        </style>
    </head>
    <body>
        <div id="div1">
            <div id="div2">
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
                <div class="box">
                </div>
            </div>
        </div>
    </body>
</html>
複製代碼
方法是使用了邊距摺疊,能夠在前面的文章中查看到細節,基本原理以下圖所示:

1.1.三、負邊距+定位,實現水平垂直居中
具體請參考《CSS3與頁面佈局學習總結(三)——BFC、定位、浮動、7種垂直居中方法》

1.1.四、去除列表最後一個li元素的border-bottom


方法一:

 View Code


方法二:

使用CSS3中的新增長選擇器,選擇最後一個li,不使用類樣式,好處是當li的個數不肯定時更加方便。

若是li的border-bottom顏色與ul的border顏色是同樣的時候,在視覺上是被隱藏了。若是其顏色不一致的時候仍是有問題,給ul寫個overflow:hidden;就能夠解決這個問題。

練習:

1.二、雙飛翼佈局
經典三列布局,也叫作聖盃佈局【Holy Grail of Layouts】是Kevin Cornell在2006年提出的一個佈局模型概念,在國內最先是由淘寶UED的工程師傳播開來,在中國也有叫法是雙飛翼佈局,它的佈局要求有幾點:

一、三列布局,中間寬度自適應,兩邊定寬; 
二、中間欄要在瀏覽器中優先展現渲染; 
三、容許任意列的高度最高;
四、要求只用一個額外的DIV標籤; 
五、要求用最簡單的CSS、最少的HACK語句;

在不增長額外標籤的狀況下,聖盃佈局已經很是完美,聖盃佈局使用了相對定位,之後佈局是有侷限性的,並且寬度控制要改的地方也多。在淘寶UED(User Experience Design)探討下,增長多一個div就能夠不用相對佈局了,只用到了浮動和負邊距,這就是咱們所說的雙飛翼佈局,實現的代碼以下:

複製代碼
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title>雙飛翼</title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            
            body,
            html {
                height: 100%;
                font: 20px/40px "microsoft yahei";
                color: white;
            }
            
            #container {
                width: 90%;
                margin: 0 auto;
                height: 100%;
            }
            
            #header,
            #footer {
                height: 12.5%;
                background: deepskyblue;
            }
            
            #main {
                height: 75%;
            }
            
            #center,
            #left,
            #right {
                height: 100%;
                float: left;
            }
            
            #center {
                width: 100%;
                background: lightgreen;
            }
            
            #right {
                background: lightblue;
                width: 20%;
                margin-left: -20%;
            }
            
            #left {
                background: lightcoral;
                width: 20%;
                margin-left: -100%;
            }
            
            #main-inner {
                padding-left: 20%;
            }
        </style>
    </head>
    <body>
        <div id="container">
            <div id="header">
                header
            </div>
            <div id="main">
                <div id="center">
                    <div id="main-inner">
                        center
                    </div>
                </div>
                <div id="left">
                    left
                </div>
                <div id="right">
                    right
                </div>
            </div>
            <div id="footer">
                footer
            </div>
        </div>
    </body>
</html>

例如:

<div id="cui_nav">   <div class="base_nav">     <ul id="cui_nav_ul" class="cui_nav cui_content">       <li id="cui_c_ph_hp">首頁</li>       <li class="divider "></li>       <li id="cui_nav_hotel">酒店<div class="cui_subnav_wrap">           <ul id="ul_nav_hotel" class="cui_sub_nav">             <li id="ul_c_ph_hotel_h">國內酒店</li>             <li class="divider "></li>             <li id="ul_c_ph_hoteli_h">海外酒店</li>             <li class="divider "></li>             <li id="ul_c_ph_apartment_h">海外民宿+短租</li>             <li class="divider "></li>             <li id="ul_c_ph_tuan_h">團購</li>             <li class="divider "></li>             <li id="ul_c_ph_hotsale_h">特價酒店</li>             <li class="divider "></li>             <li id="ul_c_ph_tujia_h">途家公寓</li>             <li class="divider "></li>             <li id="ul_c_ph_taocanj_h">酒店+景點</li>             <li class="divider "></li>             <li id="ul_c_ph_inn_h">客棧民宿</li>             <li class="divider "></li>             <li id="ul_c_ph_meeting_h">會場+團隊房</li>           </ul>酒店訂單 &gt;</div>       </li>       <li class="divider "></li>       <li id="cui_nav_vac">旅遊<span class="label-en" id="ACT_Label_31" style="display:none"><em>12-12</em><i class="triangle"></i></span><i class="cui_ico_triangle"></i><span class="point"></span><div class="cui_subnav_wrap">           <ul id="ul_nav_vac" class="cui_sub_nav">             <li id="ul_c_ph_vacations_v">旅遊首頁<span class="label-cn" id="ACT_Label_30" style="display:none"><em>5折起</em><i class="triangle"></i></span></li>             <li class="divider "></li>             <li id="ul_c_ph_around_v">週末遊</li>             <li class="divider "></li>             <li id="ul_c_ph_vacationsd_v">跟團遊</li>             <li class="divider "></li>             <li id="ul_c_ph_taocan_v">自由行</li>             <li class="divider "></li>             <li id="ul_c_ph_cruise_v">郵輪</li>             <li class="divider "></li>             <li id="ul_c_ph_taocanj_v">酒店+景點</li>             <li class="divider "></li>             <li id="ul_c_ph_huodong_v">當地玩樂</li>             <li class="divider "></li>             <li id="ul_c_ph_zhutiyou_v">主題遊<span class="label-en" id="ACT_Label_21" style="display:none"><em>HOT</em><i class="triangle"></i></span></li>             <li class="divider "></li>             <li id="ul_c_ph_baotuan_v">定製旅行</li>             <li class="divider "></li>             <li id="ul_c_ph_youxue_v">遊學</li>             <li class="divider "></li>             <li id="ul_c_ph_visa_v">簽證</li>             <li class="divider "></li>             <li id="ul_c_ph_mice_v">企業會獎</li>             <li class="divider "></li>             <li id="ul_c_ph_hh_v">頂級遊</li>             <li class="divider "></li>             <li id="ul_c_ph_golf_v">愛玩戶外</li>             <li class="divider "></li>             <li id="ul_c_ph_insurance_v">保險</li>             <li class="divider "></li>             <li id="ul_c_ph_deals_v">特賣匯</li>           </ul></i><a href="http://jiaxing.changtu.com/">嘉興客運中心官網</a></div>       </li>            </li>

相關文章
相關標籤/搜索