成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PC端CSS布局匯總

zhangxiangliang / 2652人閱讀

摘要:因?yàn)槎撕鸵苿?dòng)端布局差異較大,所以我將兩端布局分開講,本文章將針對(duì)端的布局進(jìn)行講解,以下代碼只寫關(guān)鍵代碼。為了提高網(wǎng)頁性能,考慮到,表格元素盡量少用,有其他選擇的情況盡量用其他布局。

前言

此文章是 解剖CSS布局原理 的續(xù)集,之前那篇文章講的都是理論,本文章講具體的實(shí)例,根據(jù)自己對(duì)布局的理解與開發(fā)經(jīng)驗(yàn)分為以下幾類。

因?yàn)镻C端和移動(dòng)端布局差異較大,所以我將兩端布局分開講,本文章將針對(duì)PC端的布局進(jìn)行講解,以下代碼只寫關(guān)鍵代碼。如果你發(fā)現(xiàn)你寫了關(guān)鍵打代碼還達(dá)不到效果,請(qǐng)檢查是否寫了不該寫的樣式。

為了提高網(wǎng)頁性能,考慮到repaint/reflow,表格元素盡量少用,有其他選擇的情況盡量用其他布局。

居中布局 一、單個(gè)元素水平居中
1. 寬度固定

方法一:

.box {
  width: 300px;
  margin: 0 auto;
}

比較常用的方法

方法二:

#container {
  position: relative;
}
.box {
  width: 100px;
  position: absolute;
  left: 0;
  right: 0;
  margin: 0 auto;
}

此方法適用于定位時(shí)的居中方式

2. 寬度不固定

方法一:

.box {
  display: table;
  margin: 0 auto;
}

缺點(diǎn):設(shè)置為表格元素,內(nèi)部元素的布局有可能收到影響

方法二:

#container {
  position: relative;
}
.box {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

缺點(diǎn):要用到 transform ,兼容性較差

方法三:

#container {
  display: table-cell;   // 這屬性在這可加可不加
  text-align: center;
}
.box {
  display: inline-block;
}

缺點(diǎn):需要涉及到父類的樣式

二、單個(gè)元素垂直居中
高度固定

方法一:

#container {
  position: relative;
}
.box {
  height: 50px;
  position: absolute;
  top: 0;
  bottom: 0;
  margin: auto 0;
}

缺點(diǎn):要用到定位,脫離文檔流

方法二:

#container {
  height: 400px;
  line-height: 400px;
}
.box {
  display: inline-block;
  height: 50px;
  vertical-align: middle;
}

注意,父容器設(shè)置了行高,子類要記得重置行高

高度不固定

方法一:

#container {
  position: relative;
}
.box {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

缺點(diǎn):要用到 transform ,兼容性較差

方法二:

#container {
  display: table-cell;
  verticle-align: middle;
}

缺點(diǎn):由父類控制是否居中

三、多個(gè)元素水平居中

1 2 3
#container {
  width: 200px;
  height: 100px;
  background: #ccc;
  text-align: center;
}
span {
  display: inline-block;
  background: #9fc;
}
四、多個(gè)元素垂直居中

1

2

3

#container {
  height: 200px;
  display: table-cell;
  vertical-align: middle;
}
單行多列布局 一、等寬排列

#container {
  display: table;
  table-layout: fixed;
}
.box {
  display: table-cell;
}
二、兩列布局
1. 一列定寬,一列自適應(yīng),高度各自自適應(yīng)

左列定寬:

.left {
  float: left;
  width: 100px;
}
.right {
  margin-left: 100px;
}

右列定寬:

#container {
  padding-right: 100px;
  overflow: hidden;
}
.left {
  float: left;
  width: 100%;
}
.right {
  position: relative;
  float: left;
  width: 100px;
  right: -100px;
  margin-left: -100px;
}
2. 一列定寬,一列自適應(yīng),高度相同取兩者最大值

#container {
  display: table;
  table-layout: fixed;
}
.left,
.right {
  display: table-cell;
}
.right {
  width: 100px;
}

需要定寬的那列設(shè)置寬度

3、一列不定寬,一列自適應(yīng)

右列自適應(yīng):

.left {
  float: left;
}
.right {
  overflow: auto;
}

左列自適應(yīng):

.left {
  overflow: auto;
}
.right {
  float: right;
}
三、三列布局 1、兩側(cè)定寬,中間自適應(yīng),高度各種自適應(yīng)

方法一:

定寬
自適應(yīng)
定寬
.left,
.right {
  position: absolute;
  top: 0;
}
.left {
  left: 0;
  width: 150px;
}
.center {
  margin: 0 80px 0 150px;
}
.right {
  right: 0;
  width: 80px;
}

方法二:圣杯布局

定寬
自適應(yīng)
定寬
#container {
  padding: 0 8px 0 150;
}
.left,
.center,
.right {
  position: relative;
  float: left;
}
.left {
  width: 150px;
  left: -150px;
  margin-right: -100%;
}
.center {
  width: 100%;
  height: 200px;
}
.right {
  width: 80px;
  right: -80px;
  margin-left: -80px;
}

方法三:雙飛翼布局

自適應(yīng)
定寬
定寬
.left,
.wrap,
.right {
  float: left;
}
.left {
  width: 150px;
  margin-left: -100%;
}
.wrap {
  width: 100%;
}
.center {
  margin: 0 80px 0 150px;
}
.right {
  width: 80px;
  margin-left: -80px;
}
2、兩列定寬,中間自適應(yīng),高度相同取兩者最大值

定寬
自適應(yīng)
定寬
#container {
  width: 100%;
  display: table;
}
.left,
.right,
.center {
  display: table-cell;
}
.left {
  width: 150px;
}
.right {
  width: 80px;
}
多行多列布局 一、圖文并茂

隨著HTML的成長,為了滿足頁面設(shè)計(jì)者的要求,HTML添加了很多顯示功能。但是隨著這些功能的增加,HTML變的越來越雜亂,而且HTML頁面也越來越臃腫。于是CSS便誕生了。
img {
  float: left;
}
二、均衡分布 1、相同間距

方法一:用浮動(dòng)

.list {
  width: 500px;
  height: 260px;
}
.list li {
  float: left;
  width: 100px;
  height: 100px;
  margin-left: 20px;
  margin-top: 20px;
  background: #c9f;
}

通過 margin 來達(dá)到等距效果,根據(jù)父容器寬高和子類寬高與個(gè)數(shù),算出 margin-leftmargin-top 的值

方法二:用內(nèi)聯(lián)塊

.list {
  width: 500px;
  height: 260px;
  font-size: 0;
}
.list li {
  display: inline-block;
  width: 100px;
  height: 100px;
  margin-left: 20px;
  margin-top: 20px;
  background: #c9f;
}

用內(nèi)聯(lián)塊的話,如果子類有文本,要記得設(shè)置 font-size

2. 去除邊界間距

在上一個(gè)例子下去除邊界間距

.list {
  width: 460px;
  height: 220px;
}
.list li {
  float: left;
  width: 100px;
  height: 100px;
  margin-left: 20px;
  margin-top: 20px;
  background: #c9f;
}
.list li:nth-of-type(4n+1) { margin-left: 0 }
.list li:nth-of-type(-n+4) { margin-top: 0 }

若要兼容IE8,則在對(duì)應(yīng)的標(biāo)簽上加類名,多帶帶處理

三、瀑布流布局

如上圖,所謂的瀑布流布局就是一系列盒子或圖片的等寬不等高布局。

真正的瀑布流布局是這樣:

給每張圖片設(shè)置相同的寬度,第一行全部置頂,順序排列

從第二行開始尋找最低高度的那一列作為下一張圖片的排列位置,這時(shí)很顯然第二列高度最低,就把第四張圖片放在第二列下面

這時(shí)第一列和第三列高度相同,我們優(yōu)先選擇左邊那列,把第五張圖片放在第一列下面

這時(shí)第三列高度最低,第六張圖片放在第三列下面,以此類推。

網(wǎng)上有人說用多列浮動(dòng)布局、用CSS3布局、用flexbox,其實(shí)實(shí)現(xiàn)的都是假的瀑布流,都有可能出現(xiàn)三列的高度差異較大的情況,真正的瀑布流是三列高度相差不大的。以下的瀑布流的具體實(shí)現(xiàn)

html

css

.list {
  position: relative;
  width: 600px;
}
.list img {
  position: absolute;
}

js

document.addEventListener("DOMContentLoaded", function () {
  var listDOM = document.querySelector(".list");
  var imgsDOM = listDOM.querySelectorAll("img");
  
  waterfallFlowLayout(listDOM, imgsDOM, 3);
})

/**
 * 瀑布流布局
 * 
 * @param {DOM object} listDOM  存放圖片列表的容器DOM
 * @param {DOM object} imgsDOM  圖片DOM
 * @param {number} colsCount    列數(shù)
 */
function waterfallFlowLayout (listDOM, imgsDOM, colsCount) {
  colsCount = colsCount || 3;   // 默認(rèn)3列

  var currHeightArr = []; // 存放當(dāng)前每列的總高度
  var imgWidth = listDOM.offsetWidth / colsCount

  // 遍歷所有圖片DOM元素
  for (var i = 0; i < imgsDOM.length; i++) {
    var imgDOM = imgsDOM[i];
    imgDOM.style.width = imgWidth + "px";  // 設(shè)置各個(gè)圖片的寬度

    // 如果是第一行的就直接存高度,并設(shè)置top和left
    if (i < colsCount) {
      currHeightArr.push(imgDOM.offsetHeight);
      imgDOM.style.left = (i % colsCount) * imgWidth + "px";
      imgDOM.style.top = 0;
    }
    // 否則
    else {
      var minNum = Math.min.apply(Math, currHeightArr);     // 獲取最小值
      var index = currHeightArr.indexOf(minNum);            // 獲取最小值的下標(biāo)

      // 根據(jù)最小值下標(biāo)得到對(duì)應(yīng)的DOM,獲取它的left賦給當(dāng)前的left
      imgDOM.style.left = imgsDOM[index].offsetLeft + "px"; 
      imgDOM.style.top = minNum + "px"; // 使用最小值作為當(dāng)前的top

      // 更新每列的總高度
      currHeightArr[index] += imgDOM.offsetHeight;
    }
  }
}
全屏布局

頭部
主體內(nèi)容
底部
.head,
.foot,
.sidebar,
.main {
  position: absolute;
}
.head {
  top: 0;
  left: 0;
  right: 0;
  height: 80px;
}
.foot {
  bottom: 0;
  left: 0;
  right: 0;
  height: 60px;
}
.sidebar {
  top: 80px;
  bottom: 60px;
  left: 0;
  width: 100px;
}
.main {
  top: 80px;
  bottom: 60px;
  left: 100px;
  right: 0;
}

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/112797.html

相關(guān)文章

  • H5項(xiàng)目常見問題匯總及解決方案

    摘要:解決方案可以解決在手機(jī)上點(diǎn)擊事件的延遲的模塊,事件也是為了解決在的延遲問題顯示屏原理及設(shè)計(jì)方案說明屏是一種具備超高像素密度的液晶屏,同樣大小的屏幕上顯示的像素點(diǎn)由個(gè)變?yōu)槎鄠€(gè),如在同樣帶下的屏幕上,蘋果設(shè)備的顯示屏中,像素點(diǎn)個(gè)變?yōu)閭€(gè)。 原文鏈接 - https://github.com/FrontEndRo... H5項(xiàng)目常見問題及注意事項(xiàng) Meta基礎(chǔ)知識(shí): H5頁面窗口自動(dòng)調(diào)整到設(shè)備...

    marser 評(píng)論0 收藏0
  • 資源系列(4)-前學(xué)習(xí)資源分享&前面試資源匯總

    摘要:特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 特意對(duì)前端學(xué)習(xí)資源做一個(gè)匯總,方便自己學(xué)習(xí)查閱參考,和好友們共同進(jìn)步。 本以為自己收藏的站點(diǎn)多,可以很快搞定,沒想到一入?yún)R總深似海。還有很多不足&遺漏的地方,歡迎補(bǔ)充。有錯(cuò)誤的地方,還請(qǐng)斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應(yīng)和斧正,會(huì)及時(shí)更新,平時(shí)業(yè)務(wù)工作時(shí)也會(huì)不定期更...

    princekin 評(píng)論0 收藏0
  • 我們來談?wù)勴?xiàng)目中遇到的需要兼容pc和移動(dòng)css布局

    摘要:首先在里面需要引入移動(dòng)端屬性布局方式之布局標(biāo)題布局標(biāo)題布局內(nèi)容兼容端和移動(dòng)端的布局獲取屏幕寬度設(shè)置標(biāo)簽的大小為移動(dòng)端效果圖端效果圖布局方式之彈性布局布局標(biāo)題布局內(nèi)容兼容端和移動(dòng)端的 首先在head里面需要引入移動(dòng)端屬性: 1.css布局方式之div + css布局; 標(biāo)題: div + css布局 內(nèi)容: 兼容...

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

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

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<