如何用CSS快速佈局(一)—— 佈局元素詳細

来源:http://www.cnblogs.com/zeifenbing/archive/2017/01/20/6322311.html
-Advertisement-
Play Games

css快速佈局必弄清的幾件事:塊級元素&內聯元素概念釐清、盒模型、定位元素顯示優先順序總結、居中對齊方法總結、樣式繼承等。 ...


要快速進行網頁排版佈局,則必須對佈局的元素有清晰的瞭解,才不會總是在細節處出錯。這一篇先詳解有關佈局的因素作為佈局基礎:塊級元素and內聯元素、盒模型、準確定位、元素對齊、樣式繼承。下一篇則重點描述快速佈局思路。

一、什麼是塊級元素和內聯元素

1,塊級元素:

display:block表現出來的特點是折行的, 一般來說可以包含塊級元素和內聯元素; 例外:   P 元素,只能包含內聯元素,而不能包含塊級元素。   "form"這個塊元素比較特殊,它只能用來容納其他塊元素。  

2,內聯元素:

display:inline表現出來是不換行的,內部只能包含內聯元素。 像“span”這樣的行內元素,沒有自己的獨立空間,它是依附於其他塊級元素存在的,因此,對行內元素設置高度、寬度、內外邊距等屬性,都是無效的。 其實你需要知道的行內元素就是 span 和 a   

3,浮動元素自動設置為"block"元素

不管是block還是inline定義了浮動之後,可以定義高度,寬度. <a>正常情況下是不能定義高度的。寬度倒是可以定義,但是對滑鼠有反應的只有文字部分 如果加上float:left的話,能定義高寬,整塊對滑鼠有反應 但是 它是橫向菜單, 設置display:inline;這個屬性能夠修複著名的IE雙倍浮動邊界問題。↓(貌似這個問題只存在於IE6?) http://www.zzzszy.com/a/2016/0927/896160.html  
塊元素(block element) 內聯元素(inline element)
* address - 地址 * blockquote - 塊引用 * center - 舉中對齊塊 * dir - 目錄列表 * div - 常用塊級容易,也是css layout的主要標簽 * dl - 定義列表 * fieldset - form控制組 * form- 交互表單 * h1 - 大標題 * h2 - 副標題 * h3 - 3級標題 * h4 - 4級標題 * h5 - 5級標題 * h6 - 6級標題 * hr - 水平分隔線 * isindex - input prompt * menu - 菜單列表 * noframes - frames可選內容,(對於不支持frame的瀏覽器顯示此區塊內容 * noscript - )可選腳本內容(對於不支持script的瀏覽器顯示此內容) * ol - 排序表單 * p - 段落 * pre - 格式化文本 * table - 表格 * ul - 非排序列表 * a - 錨點 * abbr - 縮寫 * acronym - 首字 * b - 粗體(不推薦) * bdo - bidi override * big - 大字體 * br - 換行 * cite - 引用 * code - 電腦代碼(在引用源碼的時候需要) * dfn - 定義欄位 * em - 強調 * font - 字體設定(不推薦) * i - 斜體 * img - 圖片 * input - 輸入框 * kbd - 定義鍵盤文本 * label - 表格標簽 * q - 短引用 * s - 中劃線(不推薦) * samp - 定義範例電腦代碼 * select - 項目選擇 * small - 小字體文本 * span - 常用內聯容器,定義文本內區塊 * strike - 中劃線 * strong - 粗體強調 * sub - 下標 * sup - 上標 * textarea - 多行文本輸入框 * tt - 電傳文本 * u - 下劃線 * var - 定義變數
 

4,可變元素

可變元素為根據上下文語境決定該元素為塊元素或者內聯元素。 * applet - java applet * button - 按鈕 * del - 刪除文本 * iframe - inline frame * ins - 插入的文本 * map - 圖片區塊(map) * object - object對象 * script - 客戶端腳本  

5,display:inline-block;

維持塊級元素可設置寬高,但又能像內聯元素一樣和其他內聯元素置於一行。

 

二、盒模型

 

 

三、如何定位——相對定位、絕對定位、浮動

相對定位:指相對於文檔流中的其他已定義的元素位置進行定位。

static(預設值):如果使用預設值,在CSS中為元素定義的top,left,right,bottom.z-index都不會生效。 relative:相對元素本身進行移動。  

絕對定位:會脫離正常的文檔流,不再占據空間。

absolute:相對一個不為static的父元素進行絕對定位,如果不指定父元素的position,absolute將相對整個html文檔進行絕對定位。會優先顯示於正常文檔流定位元素以及float元素。 fixed:相對瀏覽器視窗進行定位,不論網頁如何滾動,該元素始終停留在屏幕的某個位置上。  

浮動:float

脫離文檔流——相對父元素大小調整位置。如果父元素寬度為100,兩個子元素寬度分別為200,則依舊顯示為上下層次,而不是左右。 外盒子——會優先顯示於正常文檔流定位元素。內盒子——弱於塊級元素,強於內聯元素

 

重點!定位元素與文檔流顯示關係

1,正常文檔流之間的內外部盒子顯示關係:

代碼結構如下(粗略展示)
<div>黃色塊正方形
  <div>紅色塊</div>
  <div>紅色塊</div>
</div>
<div>藍色塊正方形</div>
黃色和藍色為外部文檔流,紅色的為黃色塊的兩個內部文檔流。 外部盒子為外部文檔流,內部盒子有自己的文檔流,互不幹擾,但(非自身父元素的)外部文檔流會優先顯示於內部文檔流。

 

2,內部盒子浮動元素和內部文檔流元素關係:

  • 內聯元素和浮動元素的優先順序:

正常文檔流中,<a>內聯元素和塊級元素各占一行。

  然而當設置為浮動元素後,文檔流內聯元素讓位於浮動元素(<a>先後於<div>定義結果一樣)。如下: 還會出現文字包繞現象:    
  •  塊級元素和浮動元素優先順序
當塊級元素先於浮動元素定義時,浮動元素換行排後。當浮動元素先定義時,脫離文檔流,不對正常文檔流的塊級元素造成影響。  

3,內部盒子浮動元素和外部文檔流內部元素關係:

 浮動元素覆蓋外部文檔流元素,但不占據空間。     綠色塊和圖片是藍色塊的內部元素,可見,塊級元素照正常文檔流顯示,但內聯元素img還是會讓步於浮動元素,即使是外部文檔流的浮動元素。

 

4,兄弟元素絕對定位和浮動的優先關係

藍色塊為黃色內部塊的absolute定位元素,且先於紅色塊設置div。紅色塊為Float定位元素,被absolute覆蓋。

5,絕對定位和文檔流元素的優先關係&相對定位元素的優先關係

絕對定位position:absolute。 1,相對一個不為static的父元素進行絕對定位,如果不指定父元素的position,absolute將相對整個html文檔進行絕對定位。 2,如果沒有設置top\left\bottom\right,則其頂端和左側將與原文檔流位置一致(即跟沒有設置position一樣),但又會覆蓋掉外部文檔流內部浮動元素多出部分。 下圖為藍色塊設置position:absolute;  (註:黃色塊(內含紅色和綠色子元素)和藍色塊(內含綠色子元素)是兄弟元素) 調換下順序,藍色塊首先設置div,position為absolute。黃色塊沒設置position,即預設static。因為脫離了文檔流,absolute元素優先顯示。   設置黃色塊position為relative,黃色塊覆蓋絕對定位元素。即當相對定位元素後於絕對定位元素定位時,相對定位元素優先顯示。

 

總結:

1,正常文檔流下,外部盒子優先顯示於先定義元素的內盒子(如果超出會被覆蓋)。塊級元素和內聯元素不會在同一行。

    

2,對內外部文檔流,浮動元素脫離文檔流,對於先定義的元素按正常文檔流顯示(讓位塊級,擠開內聯),對後定義的元素不造成佈局影響,但卻影響正常文檔流的內聯元素展示,表現為內聯元素依舊會被浮動元素“擠開”(不論哪裡的內聯元素,都不會被覆蓋在浮動元素之下)

    

3,絕對定位元素優先顯示於浮動元素。

    

4,不設置具體值的絕對定位元素會按正常文檔流排列,但脫離文檔流,不對後定義元素造成影響。

    

5,如果兄弟元素設置了position:relative;當先於絕對定位元素定義時,絕對定位元素優先顯示於相對定位元素。

當後於絕對定位元素定義時,相對定位元素優先顯示於絕對定位元素。

     

 

四、如何居中對齊

 水平居中:

1.實現行內元素的居中。方法:在行內元素外面的塊元素的樣式中添加:text-align:center;

2.實現塊級元素的水平居中。

  方法一:margin:0 auto;

 註意:如果塊級元素是body的直接子元素,不設置寬,則預設100%,看不出效果;不設置高,且div中沒有內容,則高度預設為0。因此,一定要同時設置塊級元素的寬和高,這樣才能看出來效果。對於在一個div中的另一個div希望居中,也可以使用這個方式,因為這時的margin是相對於其父元素而言的。

  

  方法二:使用絕對定位和負邊距。

    position:absolute;

    left:50%;                 ——相對於父元素向左移動50%寬度

    margin-left:-50px;    ——移回自身寬度的一半

 

垂直居中

1.行內元素的垂直居中

  方法一:讓字體垂直居中,line-height設置為父元素高度。

  方法二:設置padding讓其垂直居中。

    方法三:父元素設置line-height,行內元素設置vertical-align:middle。

 

2.塊級元素的垂直居中。

   方法一:使用絕對定位和負邊距。

   方法二:在父元素中添加display:flex;align-items:center;即可實現豎直居中。

 

實現水平和垂直居中

  方法一:使用絕對定位和負邊距

  方法二:使用display:flex

      在父元素的樣式中添加display:flex;align-items:center實現豎直居中,justify-content:center;實現水平居中

  方法三:同樣使用display:flex.在父元素中設置display:flex;在子元素中設置margin:auto。

  方法四:使用css3屬性——translate()變形函數

      position: absolute; top:50%; left:50%; transform:translate(-50%,-50%);

參考文章:css居中那點事兒

 

 

五、關於樣式繼承

盒模型樣式是不可繼承的,例如width、height(寬高)、border(邊框)、margin(邊距)、padding(補白)和背景等 vertical-align不可繼承   可繼承屬性     color       cursor       direction       font       letter-spacing       line-height       list-style       text-align       text-indent       text-shadow       text-transform       whitewhite-space       word-break        word-spacing       word-wrap        writing-mode    

 》原創文章,轉載請註明來源!

2017-01-20

 


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

-Advertisement-
Play Games
更多相關文章
  • HTML5(WEB前端),在2012年及以前,一直處於一種萌芽期的狀態當中,直至2013年才進入行業的成長期。HTML5(WEB前端)在2013和2014年,隨著行業的推動慢慢的增長,直至2015年迎來了行業的大爆發,HTML5迅速被推上舞臺,這個詞語也成了不少人閑談中的常見辭彙。 2016年,泡... ...
  • 1.html 2.css 3.js ...
  • COLPICK是一款非常的輕小,無需圖片就可以實現顏色選擇器的jquery插件,只用 JS 和 CSS 就實現了全部功能,而且非常直觀,類似Photoshop的界面,使用方便。顏色的明暗很容易自定義,整個整個都是用html5+ CSS3實現外觀而,插件只有28 KB,瀏覽器載入速度可以說是非常快的, ...
  • html代碼 js代碼 上傳服務端代碼 "查看博客c 最齊全的上傳文件方法" 附近下載 "上傳文件js" ...
  • 我們經常會需要驗證字元串的格式,比如密碼長度範圍、電子郵件格式、固定電話號碼和手機號碼格式等,這個時候我們經常會需要用到正則表達式。但是正則表達式用起來性能會低一點,所以在需要驗證的時候能不使用正則表達式還是儘量不要使用正則表達式。下麵貼出來我寫的一個驗證類,裡面包含了一些常用的驗證。這些都是服務端 ...
  • https://github.com/jobbole/awesome-javascript-cn http://collect.w3ctrain.com ...
  • 預載入圖片是提高用戶體驗的一個很好方法。圖片預先載入到瀏覽器中,訪問者便可順利地在你的網站上衝浪,並享受到極快的載入速度。這對圖片畫廊及圖片占據很大比例的網站來說十分有利,它保證了圖片快速、無縫地發佈,也可幫助用戶在瀏覽你網站內容時獲得更好的用戶體驗。本文將分享三個不同的預載入技術,來增強網站的性能 ...
  • 1.簡介 function命令與函數名之間有一個星號*; 函數體內部使用yield語句,定義遍歷器的每個成員,即不同的內部狀態。 總結: 調用Generator函數,返回一個部署了Iterator介面的遍歷器對象,用來操作內部指針。 以後,每次調用遍歷器對象的next方法,就會返回一個有著value ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...