整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          前端自適應布局方法總結

          前端自適應布局方法總結

          文:http://www.cnblogs.com/dragonir/archive/2017/10/27/7744192.html

          一欄固定一欄自適應

          實現代碼:

          右兩欄固定,中間自適應

          方法一 :使用float浮動

          自身浮動法的原理就是使用對左右使用分別使用float:left和float:right,float使左右兩個元素脫離文檔流,中間元素正常在正常文檔流中,使用margin指定左右外邊距對其進行一個定位。

          推薦下我的前端群:524262608,不定期會有干貨分享,初學者還有一套整理好的入門教程,歡迎初學者和進階中的小伙伴。

          方法二:使用絕對定位

          絕對定位法原理是將左右兩邊使用absolute定位,因為絕對定位使其脫離文檔流,后面的center會自然流動到他們上面,然后使用margin屬性,留出左右元素的寬度,既可以使中間元素自適應屏幕寬度。

          方法三:使用負margin(圣杯布局)

          圣杯布局的原理是margin負值法。使用圣杯布局首先需要在center元素外部包含一個div,包含div需要設置float屬性使其形成一個BFC,并設置寬度,并且這個寬度要和left塊的margin負值進行配合,具體原理參考這里。這里對圣杯布局解釋特別詳細。

          方法四:使用flex(css3新特性)

          TML中常用的布局元素:<table>、<div>+CSS

          <table>標簽:

          <table>指的是表格,用表格來搭建界面布局,即用表格的嵌套,來搭建界面布局。

          <table>布局優勢:

          table優勢:開發時間短(使用DW開發速度快);純table各瀏覽器不會有兼容問題;內容可自適應;在搜索引擎排名能靠前;

          但是 table如果布局變更,需要重新開發;如果table里有div ul 等,可能會出現瀏覽器兼容問題;加載速度慢;table嵌套的太多,運維是非常困難的。

          <div>塊級(block-level)標簽:

          DIV是層疊樣式表中的定位技術,全稱DIVision,即為劃分。有時可以稱其為圖層。

          <div>布局優勢:

          一.精簡代碼,減少重構難度。

          網站使用DIV+CSS布局使代碼很是精簡,css文件可以在網站的任意一個頁面進行調用,而若是使用table表格修改部分頁面卻是顯得很麻煩。要是一個門戶網站的話,需手動改很多頁面,而且看著那些表格也會感覺很亂也很浪費時間,但是使用css+div布局只需修改css文件中的一個代碼即可。

          二.網頁訪問速度

          使用了DIV+CSS布局的網頁與Table布局比較,精簡了許多頁面代碼,那么其瀏覽訪問速度自然得以提升,也從而提升了網站的用戶體驗度。

          三.SEO優化

          采用div-css布局的網站對于搜索引擎很是友好,因此其避免了Table嵌套層次過多而無法被搜索引擎抓取的問題,而且簡潔、結構化的代碼更加有利于突出重點和適合搜索引擎抓取。

          四.瀏覽器兼容性

          若使用table布局網頁,在使用不同瀏覽器情況下會發生錯位,而div+css則不會,無論什么瀏覽器,網頁都不會出現變形情況。


          HTML中常用的3種布局方式:

          1.流動式布局:是HTML網頁默認的布局方式

          特點:

          1.塊級元素都會在所處的包含元素內自上而下按順序處置延伸分布,且默認狀態下,塊級元素占整個文檔流,默認寬度為100%。

          2.內聯元素都會在所處的包含元素內從左到右水平分布顯示,不占整個文檔流。

          常見的塊級(block)元素有:<h1-h5> 、<table>、 <ul>、<li> 、<p> 、<form>、 ol

          常見的內內聯(行內)元素有:<a>、<span>、<img>、<input>、<select>、<textarea>

          2.浮動布局(float)

          特點:

          浮動布局依靠【 浮動屬性 float:left/right/... 】來使標簽脫離文檔流,達到兩個塊級元素并排顯示的效果。

          float:left ; 浮動脫離當前文檔流浮動。

          同時可以依靠【展示屬性display:inline/block/inline-block】來進行行內元素和塊級元素的效果切換。從而達到靈活運用塊級元素和行內元素布局的效果。

          3.層模型布局又叫定位布局

          特點:

          當我們應擁div布局是,在第一層塊界面上來做第二層塊界面的開發時,就要用到我們所說的定位布局。

          通過運用【定位屬性position:absolute/relative/fixed】 來進行第二層界面的定位布局。

          網頁是靜態的,網頁上的定位

          position:absolute ;絕對定位脫離文檔流,不受浮動影響,就是相對于窗體(body)邊界的margin定位。

          position:relative; 相對定位不脫離文檔流,相對于父級標簽元素的位置定位。

          position:fixed;固定位置,不會受任何因素影響。

          滾動條移動前

          滾動條移動后

          優先層顯示方法:【屬性:z-index:0/1/2...】

          特點: 數值越大,越優先顯示。

          注意:只有元素使用了position屬性的,才具有z-index屬性。


          本文部分內容來自網絡,如有侵權,請聯系修改。

          目:假設高度已知,請寫出三欄布局,其中左欄、右欄高度各為300px,中間自適應

          <!DOCTYPE html>

          <html>

          <head>

          <meta charset="utf-8">

          <title>Layout</title>

          <style media="screen">

          html *{

          padding: 0;

          margin: 0;

          }

          .layout article div{

          min-height: 100px;

          }

          .layout.float .left{

          float:left;

          width:300px;

          background: red;

          }

          .layout.float .center{

          background: yellow;

          }

          .layout.float .right{

          float:right;

          width:300px;

          background: blue;

          }

          </style>

          </head>

          <body>

          <!--浮動布局 -->

          <section class="layout float">

          <h1>三欄布局</h1>

          <article class="left-right-center">

          <div class="left"></div>

          <div class="right"></div>

          <div class="center">

          <h2>浮動解決方案</h2>

          </div>

          </article>

          </section>

          <!-- 絕對布局 -->

          <section class="layout absolute">

          <style>

          .layout.absolute .left-center-right>div{

          position: absolute;

          }

          .layout.absolute .left{

          left:0;

          width: 300px;

          background: red;

          }

          .layout.absolute .center{

          left: 300px;

          right: 300px;

          background: yellow;

          }

          .layout.absolute .right{

          right:0;

          width: 300px;

          background: blue;

          }

          </style>

          <h1>三欄布局</h1>

          <article class="left-center-right">

          <div class="left"></div>

          <div class="center">

          <h2>絕對定位解決方案</h2>

          </div>

          <div class="right"></div>

          </article>

          </section>

          <!-- flexbox布局 -->

          <section class="layout flexbox">

          <style>

          .layout.flexbox{

          margin-top: 110px;

          }

          .layout.flexbox .left-center-right{

          display: flex;

          }

          .layout.flexbox .left{

          width: 300px;

          background: red;

          }

          .layout.flexbox .center{

          flex:1;

          background: yellow;

          }

          .layout.flexbox .right{

          width: 300px;

          background: blue;

          }

          </style>

          <h1>三欄布局</h1>

          <article class="left-center-right">

          <div class="left"></div>

          <div class="center">

          <h2>flexbox解決方案</h2>

          </div>

          <div class="right"></div>

          </article>

          </section>

          <!-- 表格布局 -->

          <section class="layout table">

          <style>

          .layout.table .left-center-right{

          width:100%;

          height: 100px;

          display: table;

          }

          .layout.table .left-center-right>div{

          display: table-cell;

          }

          .layout.table .left{

          width: 300px;

          background: red;

          }

          .layout.table .center{

          background: yellow;

          }

          .layout.table .right{

          width: 300px;

          background: blue;

          }

          </style>

          <h1>三欄布局</h1>

          <article class="left-center-right">

          <div class="left"></div>

          <div class="center">

          <h2>表格布局解決方案</h2>

          </div>

          <div class="right"></div>

          </article>

          </section>

          <!-- 網格布局 -->

          <section class="layout grid">

          <style>

          .layout.grid .left-center-right{

          width:100%;

          display: grid;

          grid-template-rows: 100px;

          grid-template-columns: 300px auto 300px;

          }

          .layout.grid .left-center-right>div{

          }

          .layout.grid .left{

          width: 300px;

          background: red;

          }

          .layout.grid .center{

          background: yellow;

          }

          .layout.grid .right{

          background: blue;

          }

          </style>

          <h1>三欄布局</h1>

          <article class="left-center-right">

          <div class="left"></div>

          <div class="center">

          <h2>網格布局解決方案</h2>

          </div>

          <div class="right"></div>

          </article>

          </section>

          </body>

          </html>

          能寫出以上五種來,已經很優秀了,但是面試官可能會繼續追問以下問題:

          1.這5種方案的優缺點是什么?

          (1)浮動方案

          優點:兼容性好

          缺點:在于需要清除浮動,浮動以后是脫離文檔流,如果處理不好會帶來很多問題,這是它本身的局限性。

          (2)絕對定位

          優點:快捷

          缺點:布局已經脫離文檔流,意味著里面所有的子元素也必須脫離文檔流,就導致了有效性/可使用性比較差

          (3)flex布局

          優點:CSS3中用于解決上面兩個方案的不足出現的,比較完美的一個方案,移動端普遍使用

          缺點:兼容性問題(IE8以上可用)

          (4)table布局

          兼容性好(比flex好)例子中,中間內容多撐開后兩側容器也會自動增高(同時也是自身的不足,選擇哪個方案看具體的業務,沒有絕對的優缺點)

          (5)網格grid布局

          一些CSS框架在做網格的事情,例如柵格系統,960px寬度設計12列,模擬網格控制每一部分的位置達到布局的方式,在新出的網格布局中,通過把它標準化也就是CSS開始支持,可以做很多復雜事情,同時代碼量簡化的多

          2.如果把假設高度已知去掉,比如,中間部分的內容太多把容器撐高了,兩側的容器也要相應增高,這樣哪種方案就不適用了?

          flex布局和table布局可以繼續使用,其它的不適用(兩側沒有自動增高)。

          3.5種方案的兼容性如何?如果讓你真正去寫業務中的頁面布局,那最優的方案是哪個?

          答案可以參考第1題

          此處總結優缺點是比較常見通用的話術,小伙伴們也可以自行查找并整理出來,如果有什么問題歡迎留言一起討論噢~


          主站蜘蛛池模板: 毛片一区二区三区无码| 成人欧美一区二区三区在线视频| 亚洲Av永久无码精品一区二区 | 亚洲熟妇无码一区二区三区 | 日韩精品电影一区| 亚洲av一综合av一区| 日本一区二区在线不卡| 农村乱人伦一区二区| 狠狠综合久久AV一区二区三区 | 国产av一区二区三区日韩| 亚州国产AV一区二区三区伊在| 久久久一区二区三区| 国产一区二区三区夜色| 亚洲男人的天堂一区二区| 国产一区二区三区福利| 日韩一区二区免费视频| 五十路熟女人妻一区二区| 亚洲一区二区三区免费视频| 亚洲综合色自拍一区| 成人免费区一区二区三区| 久久精品无码一区二区app| 亚洲成人一区二区| 国产婷婷一区二区三区| 久久精品一区二区三区中文字幕 | 日本精品一区二区三区四区| 精品国产日韩亚洲一区91| 日韩一区在线视频| 日韩在线视频一区二区三区 | 国产成人一区二区在线不卡| 国产亚洲综合一区二区三区| 国模大胆一区二区三区| 国产成人免费一区二区三区| 精品一区二区三区中文| www一区二区三区| 色妞AV永久一区二区国产AV| 国产亚洲一区二区手机在线观看| 日本欧洲视频一区| 亚洲国产成人精品无码一区二区| 久久毛片一区二区| 国产成人一区二区三区精品久久| 亚洲AV无码一区二区大桥未久|