css常見佈局方式

来源:http://www.cnblogs.com/unclekeith/archive/2017/10/06/7633239.html
-Advertisement-
Play Games

CSS常見佈局方式 以下總結一下CSS中常見的佈局方式。本人才疏學淺,如有錯誤,請留言指出。 如需轉載,請註明出處: "CSS常見佈局方式" 目錄: 1. 使用BFC隱藏屬性 2. float + margin 3. absolute + margin 4. 聖杯佈局 5. 雙飛翼佈局 6. fle ...


CSS常見佈局方式

以下總結一下CSS中常見的佈局方式。本人才疏學淺,如有錯誤,請留言指出。

如需轉載,請註明出處:CSS常見佈局方式

目錄:

  1. 使用BFC隱藏屬性
  2. float + margin
  3. absolute + margin
  4. 聖杯佈局
  5. 雙飛翼佈局
  6. flex佈局

以上5種方式都可以實現兩欄或三欄佈局

如果對BFC(塊級格式化上下文)概念不熟悉的朋友,可以先看看這篇文章。BFC深入理解

使用BFC隱藏屬性

在對需要自適應的元素BFC化,可以實現兩欄或三欄佈局

兩欄佈局
<aside class="aside1"></aside>
<article class="main"></article>

// 左邊固定寬度,右邊自適應
.aside1 {
  float: left;
  margin-right: 10px;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}
.main {
  overflow: hidden;
  height: 100vh;
  background-color: lightpink;
}

如果要讓兩欄之間有空隙,可以給浮動元素設置margin-right值,也可以給自適應的主內容設置margin-left值。但設置margin-left時,需要考慮到aside的寬度。實現三欄佈局也是如此,給浮動元素設置margin值會方便一些。

三欄佈局
// 這裡要註意DOM的書寫順序問題。
<aside class="aside1"></aside>
<aside class="aside2"></aside>
<article class="main"></article>

// 固定寬度
.aside1 {
  float: left;
  margin-right: 10px;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}
// 固定寬度
.aside2 {
  float: right;
  margin-left: 10px;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}
// BFC化自適應寬度
.main {
  overflow: hidden;
  height: 100vh;
  background-color: lightpink;
}

使用BFC實現三欄佈局時需要註意的是DOM的書寫順序問題。如果將aside2與article交換位置,那麼aside2元素會被擠到article元素之下,無法實現三欄自適應佈局。缺點:寬度小於aside寬度時,由於寬度不足的原因,三欄佈局時會使元素出現掉下去的現象。

float + margin

在自適應寬度的元素上設置margin值,margin的值大於或等於固定寬度的值即可。實現思路與使用BFC隱藏屬性差不多。缺點:寬度小於aside寬度時,由於寬度不足的原因,三欄佈局時會使元素出現掉下去的現象。

兩欄佈局
<aside class="aside1"></aside>
<article class="main"></article>

.aside1 {
  float: left;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}
.main {
  margin-left: 110px;
  height: 100vh;
  background-color: lightpink;
}

三欄佈局
// 註意,DOM順序不可改變
<aside class="aside1"></aside>
<aside class="aside2"></aside>
<article class="main"></article>

.aside1 {
  float: left;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}

.main {
  margin-left: 110px;
  margin-right: 110px;
  height: 100vh;
  background-color: lightpink;
}

.aside2 {
  float: right;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}

absolute + margin

// 使用position: absolute時,DOM元素順序並不重要。給左右兩欄定寬,主內容自適應寬度。缺點:側邊欄元素脫離文檔流。優點:article元素可先載入。
<article class="main"></article>
<aside class="aside1"></aside>
<aside class="aside2"></aside>

.aside1 {
  position: absolute;
  left: 0;
  top: 0;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}
.aside2 {
  position: absolute;
  right: 0;
  top: 0;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}
.main {
  margin: 0 110px;
  height: 100vh;
  background-color: lightpink;
}

使用absolute + margin實現兩欄佈局時,只需要刪除對應的欄目即可。

聖杯佈局

聖杯佈局,為什麼叫聖杯佈局...其實我覺得很奇怪,倒不如叫float + 負margin + relative更貼切一下。實現思路如下

  1. 兩欄和自適應元素都設置同一方向的浮動(如float: left)
  2. 父元素設置左右padding為左右邊欄的寬度。
  3. 自適應元素設置寬度為100%
  4. 左邊欄margin-left為負100%,再設置relative,最後通過left屬性偏移負的自身寬度。
  5. 右邊欄margin-left為負自身寬度,再設置relative,最後通過right屬性偏移負的自身寬度。
// 與其他佈局不同,此佈局需要父元素
<div class="parent">
  <article class="main"></article>
  <aside class="aside1"></aside>
  <aside class="aside2"></aside>
</div>

.parent {
  padding: 0 100px;
  // 左右邊欄的寬度,可適當縮小以增加每欄之間的距離
}
.main {
  float: left;
  width: 100%;
  height: 100vh;
  background-color: lightpink;
}
.aside1 {
  float: left;
  position: relative;
  left: -100px;
  margin-left: -100%;
  width: 100px;
  height: 100vh;
  background-color: lightseagreen;
}
.aside2 {
  float: left;
  margin-left: -100px;
  position: relative;
  right: -100px;
  width: 100px;
  height: 100vh;
  background-color: lightsalmon;
}

當然了,缺點也是有的。就是在寬度小於兩欄寬度時,元素會因為寬度不足而掉下去。

雙飛翼佈局

雙飛翼佈局與聖杯佈局相似。只不過少了relative與left, right的步驟和共同父元素,主內容元素多了層父元素。實現思路如下:

  1. 兩欄和自適應元素都設置同一方向的浮動(如float: left)
  2. main元素設置左右margin值,值為左右兩欄的寬度。main父元素設置寬度為100%
  3. 左邊欄margin-left為負100%
  4. 右邊欄margin-left為負自身寬度
<div class="main-wrap">
  <article class="main"></article>
</div>
<aside class="aside1"></aside>
<aside class="aside2"></aside>

// 以下包含部分sass語法
.main {
  margin: 0 100px;
  height: 100vh;
  background-color: lightpink;
  &-wrap {
    float: left;
    width: 100%;
  }
}
.aside1 {
  float: left;
  width: 100px;
  margin-left: -100%;
  height: 100vh;
  background-color: lightseagreen;
}
.aside2 {
  float: left;
  width: 100px;
  margin-left: -100px;
  height: 100vh;
  background-color: lightsalmon;
}

flex佈局

flex佈局新出現的概念較多,有興趣的朋友可以到以下博客看更為詳細的教程。使用flex來實現佈局,我個人認為是最簡單的方式。在移動端上,Android 4.4+以上、IOS 7.0+以上都支持flex佈局。而在PC端上,使用flex佈局時還是需要考慮一下的,因為到目前為止,IE11仍然只有部分屬性支持。

Flex 佈局教程:語法篇


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • (2.2)第二種擴展方式,隱示擴展,通過__proto__屬性。 2,簡單方式實現繼承 使用圖梳理一下原理: 索引的變化: (1) ...
  • 編寫高效率的js,第一步就是將自己的代碼風格規範起來,畢竟寫一堆爛代碼,是一件讓自己很難容忍的事情。我就是這樣,業精於勤荒於嬉,行成於思毀於隨,對代碼編寫提出高標準,對團隊,對個人都是一件應該努力的方向。 進入正題,2017年10月起,我會每周優先更新兩個重要部分,以下藍色字體代表已更新的內容,黑色 ...
  • 前 言 MUI是一款最接近原生APP體驗的高性能前端框架,它的比較重要的功能是:下拉刷新、側滑導航、滑動觸發操作菜單和頂部(底部)選項卡等 最近用MUI做手機app應用的時候,遇到的小bug。順便研究了一下這個tab-top-webview-main,這裡給大家分享一下。 1主頁代碼 2子頁代碼 3 ...
  • jquery ajax調用webservice(C#)要註意的幾個事項: 1、web.config里需要配置2個地方 <httpHandlers> <remove verb="*" path="*.asmx"/> <add verb="*" path="*.asmx" validate="false ...
  • 原文鏈接:http://www.zhangxinxu.com/wordpress/?p=466 以上代碼在IE10中測試與張老師文章中的效果有些出入,希望在以後的工作學習中引起註意,並且進行深度研究哈哈~ ...
  • 前端開發工具 1.1、 WebStorm介紹和下載 l 介紹 WebStorm是JetBrains 推出的一款強大的HTML5編輯工具,擁有豐富的代碼快速編輯,可以智能的補全代碼、代碼格式化、html提示以及代碼檢查和快速修複等,支持不同瀏覽器的提示,同時也是一款JavaScript 開發工具,擁有 ...
  • 最近的項目里用上了vue和element-ui。vue這種輕量級漸進式框架的舒適自不必說,但一直困擾著我的,是如何方便又優雅的彈出模態dialog... 對於我這種在jquery出現之前就用document.getElementById敲代碼的老頑固來說,我始終不能完全接受把dialog在編碼期就寫 ...
  • 1.獲取網頁可見區域的寬度:document.body.clientWidth ; 2.獲取網頁可見區域的高度:document.body.clientHeight; 3.獲取 網頁可見區域寬:document.body.offsetWidth; (包括邊線的寬度) 4.獲取網頁可見區域高:docu ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...