面試準(zhǔn)備之CSS

頁面布局

題目1:三欄布局度帮,中間自適應(yīng)煞檩,左右兩欄固定寬度300px

寫出3種方案算是及格
給出5種方案,不管使用哪種方案啥寇,最終效果都是:


首先寫出html結(jié)構(gòu):

    <div class="wrapper">
        <div class="left">zuo</div>
        <div class="center">左右兩列固定偎球,中間自適應(yīng)</div>
        <div class="right">you</div>
    </div>

方案一:float

優(yōu)點(diǎn):兄弟元素和父元素的浮動(dòng)影響處理的好的話,就是比較簡(jiǎn)單辑甜,兼容性也比較好衰絮。
缺點(diǎn):浮動(dòng)是脫離文檔流的,常見的問題是清除浮動(dòng)磷醋。清除不好會(huì)帶來很多問題猫牡,比如高度塌陷等。

     .wrapper {
        overflow: hidden;
    }

    .left {
        float: left;

        width: 300px;
        background: pink;
    }

    .right {
        float: right;

        width: 300px;
        background: pink;
    }

    .center {
        margin: 0 300px;

        background: gray;
    }

以上css樣式設(shè)置完成后子檀,效果是這樣子的:



為什么會(huì)出現(xiàn)這種情況呢镊掖??褂痰?這是因?yàn)?br> html結(jié)構(gòu)要改成這樣:

    <div class="wrapper">
        <div class="left">zuo</div>        
        <div class="right">you</div>
        <div class="center">左右兩列固定亩进,中間自適應(yīng)</div>
    </div>

延伸:你知道哪些清除浮動(dòng)的方案?每種方案的有什么優(yōu)缺點(diǎn)?

方案二:absolute

左右兩欄absolute缩歪,中間欄設(shè)置margin值归薛。
優(yōu)點(diǎn):思路簡(jiǎn)單,不容易出問題
缺點(diǎn):絕對(duì)定位是脫離文檔流的,意味著所有的子元素也必須脫離文檔流主籍;代碼較多习贫,可使用性差。

      .wrapper {
        position:relative;
    }
    .left {
        position:absolute;
        top:0;
        left:0;

        width: 300px;
        background: pink;
    }

    .right {
        position:absolute;
        top:0;
        right:0;

        width: 300px;
        background: pink;
    }
    .center {      
        margin:0 300px;

        background: gray;
    }

方案三:flex布局

優(yōu)點(diǎn):相對(duì)完美的方案千元。
缺點(diǎn):不兼容IE8及以下瀏覽器苫昌,而且三欄同時(shí)增高。

    .wrapper {
        display:flex;
    }
    .left,.right {
        flex:0 0 300px;

        width: 300px;
        background: pink;
    }
    .center {      
        flex:1;
     
        background: gray;
    }

方案四:table布局

優(yōu)點(diǎn):兼容性好幸海,適用于很多場(chǎng)景祟身。在flex布局不兼容的時(shí)候,可以使用table布局物独。
缺點(diǎn):處于一行的單元格table-cell會(huì)同時(shí)增高袜硫,有時(shí)我們并不想要這種效果。

    .wrapper {
        display:table;
        width:100%;   //撐滿整個(gè)屏幕的寬
    }
    .wrapper >div{
       display:table-cell;
    }
     .left,.right {
        width: 300px;
        background: pink;
    }
    .center {
        background: gray;
    }

方案五:grid布局

優(yōu)點(diǎn):新的技術(shù)挡篓,代碼量簡(jiǎn)化
缺點(diǎn):瀏覽器對(duì)其支持很弱婉陷,而且三欄同時(shí)增高

步驟:

  • 設(shè)置display的值為grid,聲明容器是一個(gè)網(wǎng)格容器
  • 設(shè)置網(wǎng)格行和列官研,我們可以通過grid-template-columns和grid-template-rows
    教程--->>>CSS Grid布局:快速入門
    .wrapper {
        display: grid;
        grid-template-rows: 100px;
        grid-template-columns: 300px auto 300px;
    }
     .left, .right {
        background: pink;
    }
    .center {
        background: gray;
    }

延伸提問

答完題后秽澳,面試官會(huì)延伸提問
1)5中方案各自的優(yōu)缺點(diǎn)
2)如果考慮縱向,哪種方案就不再適用

  • 當(dāng)高度未知時(shí)
    使用flex布局阀参、table布局和grid布局肝集,當(dāng)我們中間欄的高度隨著內(nèi)容增加時(shí),其他兩欄也同時(shí)增高蛛壳。效果:


  • 當(dāng)高度已知時(shí)
    flex布局杏瞻、table布局仍然會(huì)同時(shí)增高,而grid布局中間的內(nèi)容會(huì)溢出來衙荐,效果:


3)5種方案的兼容性捞挥,哪種是最優(yōu)的方案?
顯然是flex布局忧吟、table布局砌函。

題目2:上下兩欄固定,中間滾動(dòng)

上下高度固定溜族,中間自適應(yīng):APP用的非常多讹俊,上邊是header,中間是內(nèi)容煌抒,隨著內(nèi)容的增多會(huì)出現(xiàn)滾動(dòng)條仍劈,下邊是導(dǎo)航,比如美團(tuán)寡壮、淘寶贩疙、京東讹弯。
先來看一下效果:


首先寫出html結(jié)構(gòu):

    <div class="wrapper">
        <div class="header">header</div>
        <div class="content">
            上下兩欄固定,中間滾動(dòng)<br/>
            上下兩欄固定这溅,中間滾動(dòng)<br/>
            <!-- 此處省略n個(gè)-->
        </div>
        <div class="footer">footer</div>
    </div>

方案一:使用position

    .wrapper {
        position:relative;
        height: 100%;
    }
    .header {
        height: 100px;
        background: pink;
    }
    .content {
        position:absolute;
        top:100px;
        bottom:25px;
        overflow: auto;

        width:100%;
        background: green;
    }
    .footer {
        position:fixed;
        left:0;
        bottom:0;

        width:100%;
        height: 25px;
        background: grey;
    }

這里需要說明的是:凡是給元素position為absolute/fixed和float后组民,元素脫離文檔流后會(huì)導(dǎo)致無法計(jì)算自己的寬度和高度,display屬性會(huì)隱式的變?yōu)閕nline-block悲靴,所以需要設(shè)置width臭胜。注意一點(diǎn)的是,position:relative并不能夠改變display的類型对竣。
如果不支持 position:fixed 庇楞,可以用position:absolute;來替代。

方案二:flex布局

    .wrapper {
        display: flex;
        flex-direction: column;
        height: 100%;
    }
    .header {
        height: 100px;

        background: pink;
    }
    .content {
        flex: 1;
        overflow: auto;//滾動(dòng)條

        background: green;
    }
    .footer {
        height: 25px;

        background: grey;
    }

方案三:grid布局

    .wrapper {
        display:grid;
        grid-template-rows: 100px auto 25px; 
        height: 100%;
    }
    .header {
        background: pink;
    }
    .content {
        overflow: auto;        
        background: green;
    }
    .footer {        
        background: grey;
    }

方案四:calc()函數(shù)

你認(rèn)識(shí)calc()函數(shù)嗎否纬?這貨其實(shí)就是一個(gè)計(jì)算長(zhǎng)度值的。

    .wrapper {
        height: 100%;
    }

    .header {
        height: 100px;
        background: pink;
    }

    .content {
        height: calc(100% - 100px - 25px);
        overflow: auto;
        background: green;
    }

    .footer {
        height: 25px;
        background: grey;
    }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蛋褥,一起剝皮案震驚了整個(gè)濱河市临燃,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烙心,老刑警劉巖膜廊,帶你破解...
    沈念sama閱讀 211,743評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淫茵,居然都是意外死亡爪瓜,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,296評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門匙瘪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來铆铆,“玉大人,你說我怎么就攤上這事丹喻”』酰” “怎么了?”我有些...
    開封第一講書人閱讀 157,285評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵碍论,是天一觀的道長(zhǎng)谅猾。 經(jīng)常有香客問我,道長(zhǎng)鳍悠,這世上最難降的妖魔是什么税娜? 我笑而不...
    開封第一講書人閱讀 56,485評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮藏研,結(jié)果婚禮上敬矩,老公的妹妹穿的比我還像新娘。我一直安慰自己遥倦,他們只是感情好谤绳,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,581評(píng)論 6 386
  • 文/花漫 我一把揭開白布占锯。 她就那樣靜靜地躺著,像睡著了一般缩筛。 火紅的嫁衣襯著肌膚如雪消略。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,821評(píng)論 1 290
  • 那天瞎抛,我揣著相機(jī)與錄音艺演,去河邊找鬼。 笑死桐臊,一個(gè)胖子當(dāng)著我的面吹牛胎撤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播断凶,決...
    沈念sama閱讀 38,960評(píng)論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼伤提,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了认烁?” 一聲冷哼從身側(cè)響起肿男,我...
    開封第一講書人閱讀 37,719評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎却嗡,沒想到半個(gè)月后舶沛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,186評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡窗价,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,516評(píng)論 2 327
  • 正文 我和宋清朗相戀三年如庭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片撼港。...
    茶點(diǎn)故事閱讀 38,650評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡坪它,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出餐胀,到底是詐尸還是另有隱情哟楷,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評(píng)論 4 330
  • 正文 年R本政府宣布否灾,位于F島的核電站卖擅,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏墨技。R本人自食惡果不足惜惩阶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,936評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望扣汪。 院中可真熱鬧断楷,春花似錦、人聲如沸崭别。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,757評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至舞痰,卻和暖如春土榴,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背响牛。 一陣腳步聲響...
    開封第一講書人閱讀 31,991評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工玷禽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人呀打。 一個(gè)月前我還...
    沈念sama閱讀 46,370評(píng)論 2 360
  • 正文 我出身青樓矢赁,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親贬丛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子撩银,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,527評(píng)論 2 349

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

  • 問答題47 /72 常見瀏覽器兼容性問題與解決方案? 參考答案 (1)瀏覽器兼容問題一:不同瀏覽器的標(biāo)簽?zāi)J(rèn)的外補(bǔ)...
    _Yfling閱讀 13,737評(píng)論 1 92
  • 1瘫寝、元素定位有哪些蜒蕾? absolute 以第一個(gè)不是以static定位的父元素進(jìn)行定位 fixed 以瀏覽器窗口進(jìn)...
    Amor_Hy閱讀 267評(píng)論 0 1
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,787評(píng)論 25 707
  • 33. Universities should accept equal numbers of male and ...
    好好種地閱讀 361評(píng)論 0 0
  • 這周人感冒了很不舒服,外加每個(gè)女人都有的那么幾天焕阿,整個(gè)都懈怠了。但是還好首启,也并不是什么都沒有做∧郝牛現(xiàn)總結(jié)如下: 1....
    止咳的雪梨閱讀 208評(píng)論 0 0