任務(wù)12-負(fù)邊距蒲赂、三欄布局

1.負(fù)邊距在讓元素產(chǎn)生偏移時(shí)和position:relative有什么區(qū)別?

  • 通過負(fù)邊距進(jìn)行偏移的元素碳锈,它會放棄偏移前占據(jù)的空間混稽,這樣它文檔流中的其他元素就會“流”過來填充這部分空間缤言,所以這會造成其他元素的位置發(fā)生了變化宝当。
  • position:relative也能使元素發(fā)生偏移,但是在文檔流中胆萧,它仍然占據(jù)著原來的位置庆揩,所以其他元素的位置不會發(fā)生變化
    看demo:
<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .ct{
                width: 400px;
                height: 400px;
                border: 1px solid black;
                margin-left: 100px;
            }
            .box{
                width: 100px;
                height: 100px;
            }
            .box:nth-child(1) {
                background: pink;
            }
            
            .box:nth-child(2) {
                background: green;
                position: relative;
                left: -50px;
                top: -50px;
            }
            
            .box:nth-child(3) {
                background: yellow;
            }
        </style>
    </head>

    <body>
        <div class="ct">
            <div class="box">1</div>
            <div class="box">2</div>
            <div class="box">3</div>
        </div>
    </body>
</html>
relative

看上圖跌穗,我們對第二個(gè)box使用relative订晌,使它向左上移動了50px,但是另外2個(gè)box的位置沒有發(fā)生改變蚌吸。
那么我們對第二個(gè)box改為使用負(fù)margin呢锈拨,看看效果:

.box:nth-child(2) {
                background: green;
                margin-left: -50px;
                margin-top: -50px;
            }

負(fù)margin

可以很明顯的看到,除了第二個(gè)box自身移動以外羹唠,第三個(gè)box跟著向上移動了50px推励。
所以,使用負(fù)margin會改變周圍其他元素的位置肉迫,而position:relative不會。

除了改變其他元素位置外稿黄,負(fù)margin還能改變自身元素的寬度喊衫,前提是這個(gè)元素沒有設(shè)置寬度。
看demo:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            .ct{
                width: 400px;
                height: 200px;
                border: 5px solid green;
                margin: 0 auto;
            }
            .child{
                height: 100%;
                background: red;
            }
        </style>
    </head>
    <body>
        <div class="ct">
            <div class="child">
                
            </div>
        </div>
    </body>
</html>
沒有使用負(fù)margin之前

上圖看到杆怕,一個(gè)紅色背景的塊元素沒有設(shè)置寬度族购,它被包裹在一個(gè)寬度為400px,水平居中的父元素里陵珍。
給這個(gè)塊元素設(shè)置左右負(fù)margin看看

.child{
                margin-left: -100px;
                margin-right: -100px;
            }
使用負(fù)margin

很明顯寝杖,從上圖看到這個(gè)塊元素的左右寬度增加了。
結(jié)論就是如果沒有設(shè)定width屬性互纯,設(shè)定負(fù)margin-left/right會將元素拖向?qū)?yīng)的方向瑟幕,并增加寬度。
這個(gè)特性將在任務(wù)代碼1中得到使用。

2.使用負(fù) margin 形成三欄布局有什么條件?

1.在HTML代碼中只盹,三欄要在同一個(gè)父元素中辣往,中間欄的代碼要在左右欄的上方,這樣也符合主內(nèi)容先渲染的語義化要求殖卑。
2.左右欄的寬度要固定站削,中間欄的寬度自適應(yīng),三欄都設(shè)置向左浮動孵稽。
3.滿足上面條件后就能使用負(fù)margin來形成三欄布局了许起。具體方法是左欄使用負(fù)左margin,值為100%菩鲜,右欄使用負(fù)左margin园细,值為右欄自身的寬度。
4.這樣三欄就在同一行了睦袖,再利用一些其他的CSS屬性讓三欄的內(nèi)容互相不重疊珊肃,也就是圣杯布局和雙飛翼布局中使用的方法。

3.圣杯布局的原理是怎樣的? 簡述實(shí)現(xiàn)圣杯布局的步驟

在使用負(fù)margin讓三欄在同一行后馅笙,左右欄與中間欄會有內(nèi)容重疊伦乔,圣杯布局是這樣解決的:
對包含這三欄的父元素添加左右padding,值的大小可以是左右欄的寬度大小或者更大一點(diǎn)董习,然后再對左右欄使用position:relative烈和,讓它們分別向左右移動至合適的位置,使三欄之間沒有內(nèi)容重疊皿淋。

具體步驟:

  • 完成基本的html部分招刹,中間欄要在左右欄的上面
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>圣杯布局</title>
    </head>
    <body>
        <div class="ct">
            <div class="main">主區(qū)域</div>
            <div class="aside">左邊欄</div>
            <div class="extra">右邊欄</div>
        </div>
    </body>
</html>
  • CSS部分,設(shè)置基本的CSS樣式窝趣,中間欄main寬度自適應(yīng)疯暑,左右欄寬度固定
<style type="text/css">
            html,body{
                margin: 0;
                padding: 0;
            }
            .ct{
                border: 1px solid;
            }
            
            .main{
                width:100%;
                height: 200px;
                background: red;
            }
            .aside{
                width: 100px;
                height: 100px;
                background: blue;
            }
            .extra{
                width: 100px;
                height: 100px;
                background: yellow;
            }
        </style>
  • 對三欄都設(shè)置浮動,父元素清除浮動哑舒;
.ct:after{
                content: "";
                display: block;
                clear: both;
            }
.mian,.aside,.extra{
                float: left;
            }

這個(gè)時(shí)候頁面是這樣:

float
  • 對左右欄使用負(fù)margin
.aside{
                margin-left: -100%;
            }
            .extra{
                margin-left: -100px;
            }
負(fù)margin

這個(gè)時(shí)候三欄就在同一行了妇拯,但是互相之間內(nèi)容有重疊

  • 對父元素設(shè)置左右padding,對左右邊欄使用position:relative洗鸵,使三欄之間不再有重疊越锈。
.ct{
                padding: 0 100px;
            }
            .aside{
                position: relative;
                left: -100px;
            }
            .extra{
                position: relative;
                left: 100px;
            }

最后完成圣杯布局:

圣杯布局

4.雙飛翼布局的原理? 實(shí)現(xiàn)步驟?

雙飛翼布局是這樣解決內(nèi)容重疊的:
給中間欄套一個(gè)父容器,讓這個(gè)父容器去自適應(yīng)寬度和浮動膘滨,中間欄再設(shè)置左右margin讓出空間給左右邊欄甘凭,左右欄就不需要設(shè)置相對定位了。
具體步驟:

  • 先寫HTML部分火邓,中間欄套一個(gè)父容器丹弱,讓左右欄與和這個(gè)父容器成為兄弟元素
<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title>雙飛翼布局</title>
        </style>
    </head>

    <body>
        <div class="ct">
            <div class="wrap">
                <div class="main">主區(qū)域</div>
            </div>
            <div class="aside">左邊欄</div>
            <div class="extra">右邊欄</div>
        </div>
    </body>
</html>
  • CSS部分德撬,與圣杯布局一樣,左右欄寬度固定蹈矮,包裹著中間欄的容器寬度自適應(yīng)砰逻,使用float和負(fù)margin使它們在同一行,
<style type="text/css">
            .ct {
                border: 1px solid;
            }
            
            .ct:after {
                content: "";
                display: block;
                clear: both;
            }
            
            .wrap {
                width: 100%;
                height: 200px;
                float: left;
            }
            
            .main{
                height: 200px;
                background: red;
            }
            
            .aside {
                width: 100px;
                height: 100px;
                background: blue;
                float: left;
                margin-left: -100%;
            }
            
            .extra {
                width: 100px;
                height: 100px;
                background: yellow;
                float: left;
                margin-left: -100px;
            }

這個(gè)時(shí)候三欄還有重疊部分


三欄重疊
  • 對中間欄使用左右margin泛鸟,讓出空間給左右邊欄
.main{
                margin-left: 100px;
                margin-right: 100px;
            }

最后完成雙飛翼布局:

雙飛翼

本文版權(quán)歸本人和饑人谷所有蝠咆,轉(zhuǎn)載請注明來源。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末北滥,一起剝皮案震驚了整個(gè)濱河市刚操,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌再芋,老刑警劉巖菊霜,帶你破解...
    沈念sama閱讀 216,470評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異济赎,居然都是意外死亡鉴逞,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評論 3 392
  • 文/潘曉璐 我一進(jìn)店門司训,熙熙樓的掌柜王于貴愁眉苦臉地迎上來构捡,“玉大人,你說我怎么就攤上這事壳猜」椿眨” “怎么了?”我有些...
    開封第一講書人閱讀 162,577評論 0 353
  • 文/不壞的土叔 我叫張陵统扳,是天一觀的道長喘帚。 經(jīng)常有香客問我,道長咒钟,這世上最難降的妖魔是什么吹由? 我笑而不...
    開封第一講書人閱讀 58,176評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮朱嘴,結(jié)果婚禮上溉知,老公的妹妹穿的比我還像新娘。我一直安慰自己腕够,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評論 6 388
  • 文/花漫 我一把揭開白布舌劳。 她就那樣靜靜地躺著帚湘,像睡著了一般。 火紅的嫁衣襯著肌膚如雪甚淡。 梳的紋絲不亂的頭發(fā)上大诸,一...
    開封第一講書人閱讀 51,155評論 1 299
  • 那天捅厂,我揣著相機(jī)與錄音,去河邊找鬼资柔。 笑死焙贷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的贿堰。 我是一名探鬼主播辙芍,決...
    沈念sama閱讀 40,041評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼羹与!你這毒婦竟也來了故硅?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,903評論 0 274
  • 序言:老撾萬榮一對情侶失蹤纵搁,失蹤者是張志新(化名)和其女友劉穎吃衅,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體腾誉,經(jīng)...
    沈念sama閱讀 45,319評論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡徘层,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了利职。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片趣效。...
    茶點(diǎn)故事閱讀 39,703評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖眼耀,靈堂內(nèi)的尸體忽然破棺而出英支,到底是詐尸還是另有隱情,我是刑警寧澤哮伟,帶...
    沈念sama閱讀 35,417評論 5 343
  • 正文 年R本政府宣布干花,位于F島的核電站,受9級特大地震影響楞黄,放射性物質(zhì)發(fā)生泄漏池凄。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評論 3 325
  • 文/蒙蒙 一鬼廓、第九天 我趴在偏房一處隱蔽的房頂上張望肿仑。 院中可真熱鬧,春花似錦碎税、人聲如沸尤慰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,664評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽伟端。三九已至,卻和暖如春匪煌,著一層夾襖步出監(jiān)牢的瞬間责蝠,已是汗流浹背党巾。 一陣腳步聲響...
    開封第一講書人閱讀 32,818評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留霜医,地道東北人齿拂。 一個(gè)月前我還...
    沈念sama閱讀 47,711評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像肴敛,于是被迫代替她去往敵國和親署海。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評論 2 353

推薦閱讀更多精彩內(nèi)容