摘要:因為端和移動端布局差異較大,所以我將兩端布局分開講,本文章將針對端的布局進行講解,以下代碼只寫關鍵代碼。為了提高網頁性能,考慮到,表格元素盡量少用,有其他選擇的情況盡量用其他布局。
前言
此文章是 解剖CSS布局原理 的續集,之前那篇文章講的都是理論,本文章講具體的實例,根據自己對布局的理解與開發經驗分為以下幾類。
因為PC端和移動端布局差異較大,所以我將兩端布局分開講,本文章將針對PC端的布局進行講解,以下代碼只寫關鍵代碼。如果你發現你寫了關鍵打代碼還達不到效果,請檢查是否寫了不該寫的樣式。
為了提高網頁性能,考慮到repaint/reflow,表格元素盡量少用,有其他選擇的情況盡量用其他布局。
居中布局 一、單個元素水平居中1. 寬度固定
方法一:
.box { width: 300px; margin: 0 auto; }
比較常用的方法
方法二:
#container { position: relative; } .box { width: 100px; position: absolute; left: 0; right: 0; margin: 0 auto; }
此方法適用于定位時的居中方式
2. 寬度不固定方法一:
.box { display: table; margin: 0 auto; }
缺點:設置為表格元素,內部元素的布局有可能收到影響
方法二:
#container { position: relative; } .box { position: absolute; left: 50%; transform: translateX(-50%); }
缺點:要用到 transform ,兼容性較差
方法三:
#container { display: table-cell; // 這屬性在這可加可不加 text-align: center; } .box { display: inline-block; }
缺點:需要涉及到父類的樣式
二、單個元素垂直居中高度固定
方法一:
#container { position: relative; } .box { height: 50px; position: absolute; top: 0; bottom: 0; margin: auto 0; }
缺點:要用到定位,脫離文檔流
方法二:
#container { height: 400px; line-height: 400px; } .box { display: inline-block; height: 50px; vertical-align: middle; }
注意,父容器設置了行高,子類要記得重置行高
高度不固定方法一:
#container { position: relative; } .box { position: absolute; top: 50%; transform: translateY(-50%); }
缺點:要用到 transform ,兼容性較差
方法二:
#container { display: table-cell; verticle-align: middle; }
缺點:由父類控制是否居中
三、多個元素水平居中1 2 3
#container { width: 200px; height: 100px; background: #ccc; text-align: center; } span { display: inline-block; background: #9fc; }四、多個元素垂直居中
1
2
3
#container { height: 200px; display: table-cell; vertical-align: middle; }單行多列布局 一、等寬排列
#container { display: table; table-layout: fixed; } .box { display: table-cell; }二、兩列布局
1. 一列定寬,一列自適應,高度各自自適應
左列定寬:
.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. 一列定寬,一列自適應,高度相同取兩者最大值
#container { display: table; table-layout: fixed; } .left, .right { display: table-cell; } .right { width: 100px; }
需要定寬的那列設置寬度
3、一列不定寬,一列自適應右列自適應:
.left { float: left; } .right { overflow: auto; }
左列自適應:
.left { overflow: auto; } .right { float: right; }三、三列布局 1、兩側定寬,中間自適應,高度各種自適應
方法一:
定寬自適應定寬
.left, .right { position: absolute; top: 0; } .left { left: 0; width: 150px; } .center { margin: 0 80px 0 150px; } .right { right: 0; width: 80px; }
方法二:圣杯布局
定寬自適應定寬
#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; }
方法三:雙飛翼布局
自適應定寬定寬
.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、兩列定寬,中間自適應,高度相同取兩者最大值
定寬自適應定寬
#container { width: 100%; display: table; } .left, .right, .center { display: table-cell; } .left { width: 150px; } .right { width: 80px; }多行多列布局 一、圖文并茂
隨著HTML的成長,為了滿足頁面設計者的要求,HTML添加了很多顯示功能。但是隨著這些功能的增加,HTML變的越來越雜亂,而且HTML頁面也越來越臃腫。于是CSS便誕生了。
img { float: left; }二、均衡分布 1、相同間距
方法一:用浮動
.list { width: 500px; height: 260px; } .list li { float: left; width: 100px; height: 100px; margin-left: 20px; margin-top: 20px; background: #c9f; }
通過 margin 來達到等距效果,根據父容器寬高和子類寬高與個數,算出 margin-left 和 margin-top 的值
方法二:用內聯塊
.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; }
用內聯塊的話,如果子類有文本,要記得設置 font-size
2. 去除邊界間距在上一個例子下去除邊界間距
.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,則在對應的標簽上加類名,多帶帶處理
三、瀑布流布局如上圖,所謂的瀑布流布局就是一系列盒子或圖片的等寬不等高布局。
真正的瀑布流布局是這樣:
給每張圖片設置相同的寬度,第一行全部置頂,順序排列
從第二行開始尋找最低高度的那一列作為下一張圖片的排列位置,這時很顯然第二列高度最低,就把第四張圖片放在第二列下面
這時第一列和第三列高度相同,我們優先選擇左邊那列,把第五張圖片放在第一列下面
這時第三列高度最低,第六張圖片放在第三列下面,以此類推。
網上有人說用多列浮動布局、用CSS3布局、用flexbox,其實實現的都是假的瀑布流,都有可能出現三列的高度差異較大的情況,真正的瀑布流是三列高度相差不大的。以下的瀑布流的具體實現
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 列數 */ function waterfallFlowLayout (listDOM, imgsDOM, colsCount) { colsCount = colsCount || 3; // 默認3列 var currHeightArr = []; // 存放當前每列的總高度 var imgWidth = listDOM.offsetWidth / colsCount // 遍歷所有圖片DOM元素 for (var i = 0; i < imgsDOM.length; i++) { var imgDOM = imgsDOM[i]; imgDOM.style.width = imgWidth + "px"; // 設置各個圖片的寬度 // 如果是第一行的就直接存高度,并設置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); // 獲取最小值的下標 // 根據最小值下標得到對應的DOM,獲取它的left賦給當前的left imgDOM.style.left = imgsDOM[index].offsetLeft + "px"; imgDOM.style.top = minNum + "px"; // 使用最小值作為當前的top // 更新每列的總高度 currHeightArr[index] += imgDOM.offsetHeight; } } }全屏布局
頭部主體內容底部
.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; }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/112797.html
摘要:解決方案可以解決在手機上點擊事件的延遲的模塊,事件也是為了解決在的延遲問題顯示屏原理及設計方案說明屏是一種具備超高像素密度的液晶屏,同樣大小的屏幕上顯示的像素點由個變為多個,如在同樣帶下的屏幕上,蘋果設備的顯示屏中,像素點個變為個。 原文鏈接 - https://github.com/FrontEndRo... H5項目常見問題及注意事項 Meta基礎知識: H5頁面窗口自動調整到設備...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
摘要:首先在里面需要引入移動端屬性布局方式之布局標題布局標題布局內容兼容端和移動端的布局獲取屏幕寬度設置標簽的大小為移動端效果圖端效果圖布局方式之彈性布局布局標題布局內容兼容端和移動端的 首先在head里面需要引入移動端屬性: 1.css布局方式之div + css布局; 標題: div + css布局 內容: 兼容...
閱讀 639·2021-10-13 09:39
閱讀 1449·2021-09-09 11:53
閱讀 2638·2019-08-29 13:55
閱讀 721·2019-08-28 18:08
閱讀 2586·2019-08-26 13:54
閱讀 2406·2019-08-26 11:44
閱讀 1835·2019-08-26 11:41
閱讀 3758·2019-08-26 10:15