CSS3與頁面佈局學習筆記(二)——Box Model、邊距摺疊、內聯與塊標簽、CSSReset

来源:http://www.cnblogs.com/SeeYouBug/archive/2016/12/06/6138518.html
-Advertisement-
Play Games

一、盒子模型(Box Model) 盒子模型也有人稱為框模型,HTML中的多數元素都會在瀏覽器中生成一個矩形的區域,每個區域包含四個組成部分,從外向內依次是:外邊距(Margin)、邊框(Border)、內邊距(Padding)和內容(Content),其實盒子模型有兩種,分別是 ie 盒子模型和標 ...


一、盒子模型(Box Model)

盒子模型也有人稱為框模型,HTML中的多數元素都會在瀏覽器中生成一個矩形的區域,每個區域包含四個組成部分,從外向內依次是:外邊距(Margin)、邊框(Border)、內邊距(Padding)和內容(Content),其實盒子模型有兩種,分別是 ie 盒子模型和標準 w3c 盒子模型,加上了doctype聲明,讓所有瀏覽器都會採用標準 w3c 盒子模型去解釋你的盒子。當設置一個元素的樣式如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>盒子模型</title>
        <style type="text/css">
            #box{
                width: 100px;
                height: 100px;
                margin: 20px;
                padding: 20px;
                border: 10px solid blue;
            }
        </style>
    </head>
    <body>
        <div id="box">
            Box Model
        </div>
    </body>
</html>

運行結果:

1.1、寬度測試

計算最大寬度,示例如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>盒子模型</title>
        <style type="text/css">
            #box{
                width: 800px;
                padding: 10px;
                border: 5px solid blue;
                margin: 10px;
            }
            .sbox{
                display: inline-block;
                padding: 10px;  
                margin: 10px;   
                border: solid 10px coral;
                background: lightblue;
                width: ?;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div class="sbox">Left</div><div class="sbox">Right</div>
        </div>
    </body>
</html>

要達到如下效果,請求?處最大可以設置為多少像素?

答案:

340px
View Code

1.2、溢出測試

代碼如下:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>盒子模型</title>
        <style type="text/css">
            #box{
                width: 800px;
                padding: 10px;
                border: 5px solid blue;
                margin: 10px;
                height: 100px;
            }
            #box #innerBox{
                background: lightblue;
                height:50px ;
                width: 100%;
                padding: 10px;
                margin: 10px;
                border: 10px solid lightcoral;
            }
        </style>
    </head>
    <body>
        <div id="box">
            <div id="innerBox">
                innerBox
            </div>
        </div>
    </body>
</html>

請問運行時innerBox是否會超出box,如果會,超出多少?

可見部分=850-815=35,還有10個margin不可見,45px
View Code

如果不想讓innerBox超出,則應該刪除其100%的寬度設置,去掉width:100%,一般不要設置,多此一舉。

1.3、box-sizing屬性

設置或檢索對象的盒模型組成模式

content-box: padding和border不被包含在定義的width和height之內。對象的實際寬度等於設置的width值和border、padding之和,即 ( Element width = width + border + padding,但占有頁面位置還要加上margin ) 此屬性表現為標準模式下的盒模型。 

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>盒子模型</title>
        <style type="text/css">
            #box{
                width: 100px;
                height: 100px;
                padding: 10px;
                border: 10px solid blue;
                margin: 10px;
            }
        </style>
    </head>
    <body>
        <div id="box">
            Box Model
        </div>
    </body>
</html>

運行結果:

因為預設就是為content-box所以這裡沒有直接設置,占用寬度為160px;

border-box: padding和border被包含在定義的width和height之內。對象的實際寬度就等於設置的width值,即使定義有border和padding也不會改變對象的實際寬度,即 ( Element width = width ) 此屬性表現為怪異模式下的盒模型。

 示例代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>盒子模型</title>
        <style type="text/css">
            #box{
                width: 100px;
                height: 100px;
                padding: 10px;
                border: 10px solid blue;
                margin: 10px;
                box-sizing: border-box;  /*在上一個例子中添加的*/
            }
        </style>
    </head>
    <body>
        <div id="box">
            Box Model
        </div>
    </body>
</html>

 

運行結果:

 當box-sizing: border-box時的寬度設置會包含border與padding,但不包含margin,但margin也會占用位置。

1.4、利用CSS畫圖

示例代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>盒子模型 - 三角形</title>
        <style type="text/css">
            #box{
                width: 0;
                height: 0;
                border: 100px solid blue;
                border-color: blue transparent transparent transparent;
                /*設置邊線的顏色,transparent表示透明的顏色,按上右下左的順時鐘方向*/
            }
        </style>
    </head>
    <body>
        <div id="box">
        </div>
    </body>
</html>

運行結果:

心形:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style>
            #heart {
                position: relative;
                width: 100px;
                height: 90px;
            }
            #heart:after,#heart:before {
                position: absolute;
                content: "";
                left: 50px;
                top: 0;
                width: 50px;
                height: 80px;
                background: red;
                border-radius: 50px 50px 0px 0px;
                transform: rotate(-45deg);
                transform-origin: 0 100%;
            }
            #heart:after {
                left: 0;
                transform: rotate(45deg);
                transform-origin: 100% 100%;
            }
        </style>
    </head>
    <body>
        <div id="heart">
        </div>
    </body>
</html>

運行結果:

二、邊距摺疊

2.1、概要

外邊距摺疊:相鄰的兩個或多個外邊距 (margin) 在垂直方向會合併成一個外邊距(margin)
相鄰:沒有被非空內容、padding、border 或 clear 分隔開的margin特性. 非空內容就是說這元素之間要麼是兄弟關係或者父子關係,如:

示例代碼:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #div1{
                border: 3px solid blue;
                height: 200px;
                background: lightcoral;
            }
            #div2{
                height: 100px;
                background: lightgreen;
                margin-top: 20px;
            }
            #div3{
                height: 50px;
                width: 50%;
                background: lightblue;
                margin-top: 20px;
            }
        </style>
    </head>
    <body>
        <div id="div1">
            <div id="div2">
                <div id="div3">
                </div>
            </div>
        </div>
    </body>
</html>

運行結果:

因為div2與div3的外邊距是相鄰的(是父子關係的相鄰),當div2 margin-top為20,div3的margin-top也為20,此時div2與div3的外邊距會合併,就是摺疊。

如果想讓div3的margin-top生效,可以破壞相鄰的限制,示例:

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            #div1{
                border: 3px solid blue;
                height: 200px;
                background: lightcoral;
            }
            
            #div2{
                height: 100px;
                background: lightgreen;
                margin-top: 20px;
                border: 1px solid green;
            }
            
            #div3{
                height: 50px;
                width: 50%;
                background: lightblue;
                margin-top: 20px;
            }
        </style>
    </head>

    <body>
        <div id="div1">
            <div id="div2">
                <div id="div3">
                </div>
            </div>
        </div>
    </body>

</html>
View Code

 

運行結果:

2.2、垂直方向外邊距合併計算

a)、參加摺疊的margin都是正值:取其中 margin 較大的值為最終 margin 值。

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>邊距摺疊</title>
    </head>
    <body>
        <div style="height:90px; margin-bottom:99px; width:90px; background-color: red;">X</div>
        <div style="height:90px; margin-top:100px; width:90px; background-color: blue;">Y</div>
    </body>
</html>

運行結果:

b)、參與摺疊的 margin 都是負值:取的是其中絕對值較大的,然後,從 0 位置,負向位移。
示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>邊距摺疊</title>
    </head>
    <body>
        <div style="height:90px; margin-bottom:-10px; width:90px; background-color: red;">X</div>
        <div style="height:90px; margin-top:-30px;width:70px; background-color: blue;">Y</div>
    </body>
</html>

結果:

c)、參與摺疊的 margin 中有正值,有負值:先取出負 margin 中絕對值中最大的,然後,和正 margin 值中最大的 margin 相加。
示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>參與摺疊的 margin 中有正值,有負值</title>
    </head>
    <body>
        <div style="height:90px; margin-bottom:-30px; width:90px; background-color: red;">X</div>
        <div style="height:90px; margin-top:30px;width:70px; background-color: blue;">Y</div>
    </body>
</html>

運行結果:

 

三、內聯與塊級標簽

3.1、行內標簽與塊標簽區別

html中的標簽預設主要分為兩大類型,一類為塊級元素,另一類是行內元素,許多人也把行內稱為內聯,所以叫內聯元素,其實就是一個意思。為了很好的佈局,必須理解它們間的區別,區別如下:

常用塊級與內聯元素:

內聯元素(行內元素)內聯元素(inline element)
 a - 超鏈接
 abbr - 縮寫
 acronym - 首字
 bdo - bidi override
 big - 大字體
 br - 換行
 cite - 引用
 code - 電腦代碼(在引用源碼的時候需要)
 dfn - 定義欄位
 em - 強調
 i - 斜體
 img - 圖片
 input - 輸入框
 kbd - 定義鍵盤文本
 label - 表格標簽
 q - 短引用
 samp - 定義範例電腦代碼
 select - 項目選擇
 small - 小字體文本
 span - 常用內聯容器,定義文本內區塊
 strike - 中劃線
 strong - 粗體強調
 sub -<

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

-Advertisement-
Play Games
更多相關文章
  • 瀏覽器內核有很多種,主流的有四種,這四種內核分別是Trident,Gecko,webkit,prestv。 Trident IE, Gecko firefox, webkit safari + Goole chrome + 搜狗瀏覽器, prestv opera(由於市場選擇的問題,主要用於手機平臺 ...
  • 1.let命令的用法和var命令類似,但let命令聲明的變數只在let所在的代碼塊內有效 2.let命令不存“聲明提前”現象,因此變數一定要先聲明,後使用 3.只要當前塊級作用域記憶體在let命令,它所聲明的變數就綁定了這個塊級作用域,不再受外部的影響 4.let命令不允許在同一個作用域內,重覆聲明同 ...
  • 這篇博文主要講一下如何使用Phantomjs進行數據抓取,這裡面抓的網站是太平洋電腦網估價的內容。主要是對電腦筆記本以及他們的屬性進行抓取,然後在使用nodejs進行下載圖片和插入資料庫操作。 ...
  • 1.canvas元素基礎知識 (1)在頁面上放置canvas元素,相當於在頁面上放置一塊“畫布”,可以用Javascript編寫在其中進行繪畫的腳本。 (2)在頁面中放置canvas元素 eg: 如上程式,使用canvas和Javascript腳本繪製矩形,步驟如下: (1)取得canvas元素,用 ...
  • XML文件的約束:什麼叫約束呢?顧名思義,就是對xml文件的內容進行按照既定規則的限制。我們知道,因為xml文件的標簽是可以自定義的,而往往我們用xml文件都是為了表達一定的數據集合(即小型的資料庫),而眾所周知的,資料庫也是分類型的,如學生資料庫,就包含了一系列的諸如name,age,studen ...
  • 1.級聯select的操作,後一個select的值隨著前一個select選中值變化 2.獲取select選中項value值 3.獲取select選中項的文本text 4.設置select選中對應value值項、對應text文本項 ...
  • 續上一篇文章:vue2.0 開發實踐總結之入門篇 ,如果沒有看過的可以移步看一下。 本篇文章目錄如下: 1. vue 組件的說明和使用 2. vuex在實際開發中的使用 3. 開發實踐總結 1. vue 組件的說明和使用 一個組件實質上是一個擁有預定義選項的一個 Vue 實例 在header組件內部 ...
  • 個人開發包的目錄結構 開發步驟 註冊 "npmjs" 命令行添加user 註冊成功後,在命令行執行 依次填完回車。 whoami 上面的填寫完後,命令行輸入 說明成功了。 npm publish 最後發佈至npmjs上 出現下麵類似的版本號就成功了 index.js的編寫 安裝&使用 可能遇到的問題 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...