記CSS格式化上下文

来源:http://www.cnblogs.com/xueyoucd/archive/2017/11/25/7894801.html
-Advertisement-
Play Games

fomatting context 引言 主要講解的是BFC上下文 本文是查看 "史上最全面、最透徹的BFC原理剖析" 的筆記 所以不會詳解BFC, 只是記錄學習心得, 以及重要規則避免原文失效 簡介 Formatting context是W3C CSS2.1規範中的一個概念。它是頁面中的一塊渲染區 ...


fomatting context

引言

主要講解的是BFC上下文

本文是查看 史上最全面、最透徹的BFC原理剖析 的筆記
所以不會詳解BFC, 只是記錄學習心得, 以及重要規則避免原文失效

簡介

Formatting context是W3C CSS2.1規範中的一個概念。它是頁面中的一塊渲染區域,並且有一套渲染規則,它決定了其子元素將如何定位,以及和其他元素的關係、相互作用

  • Formatting context
  • Block fomatting context (BFC)
  • Inline formatting context (IFC)
  • grid formatting context (GFC) css3新增
  • flex formatting context (FFC) css3新增

BFC生成

  • 根元素
  • float的值不為none
  • overflow的值不為visible
  • display的值為inline-block、table-cell、table-caption table也認為可以生成BFC,其實這裡的主要原因在於Table會預設生成一個匿名的table-cell,正是這個匿名的table-cell生成了BFC
  • position的值為absolute或fixed

BFC佈局規則

  • 內部的Box會在垂直方向上一個接一個的放置
  • 垂直方向上的距離由margin決定。(完整的說法是:屬於同一個BFC的兩個相鄰Box的margin會發生重疊(塌陷),與方向無關。)
  • 每個元素的左外邊距與包含塊的左邊界相接觸(從左向右),即使浮動元素也是如此。(這說明BFC中子元素不會超出他的包含塊,而position為absolute的元素可以超出他的包含塊邊界)
  • BFC的區域不會與float的元素區域重疊
  • 計算BFC的高度時,浮動子元素也參與計算
  • BFC就是頁面上的一個隔離的獨立容器,容器裡面的子元素不會影響到外面元素,反之亦然

防止上下margin重疊

Box垂直方向的距離由margin決定。屬於同一個BFC(上例中是body根元素的BFC)的兩個相鄰Box的margin會發生重疊

只要2個邊距元素不屬於同一個BFC邊距就不會重疊

清除浮動

計算BFC的高度時,浮動元素也參與計算

只要浮動的父元素創建BFC就行了, 比如 display: table-cell;

自適應多列佈局

BFC佈局規則第3條

每個元素的margin box的左邊, 與包含塊border box的左邊相接觸(對於從左往右的格式化,否則相反)。即使存在浮動也是如此

BFC佈局規則第4條

BFC的區域不會與float box重疊

通過將每個元素創建BFC實現自適應多欄佈局


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

-Advertisement-
Play Games
更多相關文章
  • 其實在平常的一些佈局中也經常有要實現元素的垂直居中和水平居中的的需要,下麵來寫幾種css/css3實現的未知寬高元素的水平和垂直居中的寫法 ps:不考慮相容問題(下次會寫js實現元素的水平and垂直居中 ) 第一種 css3的transform 第二種 flex盒子佈局 第三種 display的ta ...
  • 我們經常會看到這樣的寫法: 這就是一個簡單的IIFE(立即執行函數表達式,immediately invoked function expression)了。 這樣的寫法有什麼好處呢?來簡單分析一下。 1. 開頭的分號 我們都知道,js是可以加分號或者不加分號的,在某些情況下,不加分號會讓解析器解析 ...
  • jQuery EasyUI 是一個基於 jQuery 的框架,集成了各種用戶界面插件。jQuery EasyUI 框架提供了創建網頁所需的一切,幫助您輕鬆建立站點。對於我這種不適合前端UI的人來說是一種福音,現在就開始記錄一下easyUI的第一天學習內容。首先需要在網站http://www.jeas ...
  • 查看原文 ...
  • $(window).scroll(function(event){ //JQ監聽滾動條 $('DIV').css("top", $(window).scrollTop()-300);//設置DIV的top}); ...
  • 1.基礎的原型認識:我們創建的每個函數都有一個prototyoe屬性,這個屬性是一個對象,它的用途是包含可以由特定類型的所有實例共用的屬性和方法。邏輯上可以這麼理解:prototype通過調用構造函數而創建的那個對象的原型對象。另外要說的_proto_是指向原型屬性constructor的。 2.原 ...
  • 說真的,學習JavaScript時,面向對象與原型這章特別考驗你的編程基礎能力,邏輯性很強,初學時,整個人都是懵逼的狀態,現在依然有點,每個函數的封裝方式都是從缺點最多的寫法進入,再一步一步深入,不斷優化函數,最終,使得自己寫出的函數能夠代碼精簡,並且相容性好,下麵我就分享下最基礎的工廠模式吧!(創 ...
  • 安裝 1. 確定電腦已裝node和npm 出現版本號則說明電腦已經安裝好node和npm2. 創建一個基於webpack的項目 3. 在項目里安裝依賴 4. 運行 配置路由為了動態渲染各個頁面的組件,這個是必須的,這些都在router文件夾里的index.js配置好,在components文件夾在下 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...