国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

CSS盒模型以及與之相關的知識點

frolc / 569人閱讀

CSS盒模型以及與之相關的知識點 盒模型分為哪幾種
- 標準盒模型
- IE盒模型

兩者區別在于 widthheight 計算方式上的不同:

標準盒模型

width = content width;

IE核模型

width = content width + padding + border
CSS 如何來設置這兩種模型
 box-sizing: border-box
 box-sizing: content-box

用實例來驗證下:

    
    .box {
        width: 100px;
        height: 100px;
        padding: 10px;
        margin: 10px;
        border: 5px solid #ccc;
        background-color: #ccc;
    }

藍色 - 區域表示為 content 部分
紫色 - 區域表示為 padding 部分
灰色 - 區域表示為 border  部分
米色 - 區域表示為 margin  部分

細心讀者可以看到,從上圖來看不設置 box-sizing 情況下, 默認值 content-box, 也就是表示為標準盒模型.

那么我們來看看當給div設置為 box-sizing: border-box 針對前面的代碼示例,我們只添加如下一行代碼,看看最終渲染后盒模型是什么樣的?

.box {
    box-sizing: border-box;
}

根據前面說的,IE盒模型(border-box)計算方式為 width = content-widht + padding + border, 驗證下我們說的是否正確

width = 70 + 10 + 10 + 5 + 5

也就是說可以通過 box-sizing: border-box 表示為IE模型;

從上面可以看出來, 模型不一樣其計算方式也不一樣.

在JS中如何來獲取盒模型對應的高寬

先羅列下常用的幾種方式,再分別講解下優缺點

document.style

document.currentStyle

window.getConputedStyle(Element)

Element.getBoundingClientRect

在講解 document.style 之前我們先來說說設置CSS樣式的幾種方式:

- 內聯樣式
- 行內樣式
- 外部樣式表

這三種具體代碼表述一次如下:

    
/* 內聯樣式 */
/* 行內樣式 */ /* 外部樣式表 a.css */

同樣權重下, 優先級為內聯樣式 > 行內樣式 > 外部樣式.

document.style
HTMLElement.style 屬性返回一個 CSSStyleDeclaration 對象,表示元素的 內聯style 屬性(attribute),但忽略任何樣式表應用的屬性。

直白的說,就是通過行內樣式、外部樣式表的方式給某個元素設置樣式, 通過 document.style 是獲取不到的.

注意 : document.style 返回對象是只讀, 不能直接通過 document.style = "color: #ccc" 方式直接給其設置樣式, 否則設置是不會生效. 一般推薦方式如下:

    var ele = document.querySelector(".box");
    // 單個屬性設置
    ele.style.color = "#ccc";

    // 單個語句設置多個樣式
    ele.setAttibute("style", "color: #ccc; border:1px solid red;");
    // or
    ele.style.cssText = "color: #ccc; border:1px solid red;"

回到第一個實例,嘗試著通過 document.style 來獲取一下元素的寬度.

    var ele = document.querySelector(".box");
    ele.style.width // ""

根據前面的行內CSS中,是有給元素指定widthheight, 卻沒有獲取到; 也就是它只包含通過 style屬性(attibute)上聲明的CSS樣式.

通過style屬性的方式來給元素添加屬性:

    var ele = document.querySelector(".box");
    ele.style.width // "100px"

從兩種模式來看, 獲取到的 width 都是一樣, document.style 表示就是 style 中 width; 并不代表渲染后的盒子大小.

優點

- 兼容性好

缺點

- 只能獲取通過 style 屬性設置的樣式.
document.currentStyle.width

彌補document.style的缺點, 可以獲取到行內、內聯、外部樣式表的設置樣式.


    var ele = document.querySelector(".box");
    el.currentStyle.width // "100px"

缺點: 非標準屬性, 只有在IE中使用;

window.getComputedStyle
獲取應用于當前元素的計算后的CSS樣式??梢允莿赢嫅玫漠斍爸?,也可以是樣式表設置的值。

從API描述來看,既然是獲取計算后的,那么肯定可包含行內樣式、內聯樣式、外部樣式.

先來看看具體實例:


or

    var ele = document.querySelector(".box");
    var getComputedStyle = window.getComputedStyle(ele); 
    getComputedStyle.width // "100px"

優點:

- 獲取所有應用在元素上的樣式.

- 現在瀏覽器都支持 IE9+, Frifox, Chrome, Safire, Opera, Edge 等 更多兼容可以查看 [Can I Use](https://caniuse.com/#search=getComputedStyle)  

缺點:

- 不支持低版本IE瀏覽器.
element.getBoundingClientRect()

概述

Method to get the size and position of an element"s bounding box, relative to the viewport

方法獲取相對于視口的元素大小和位置信息.

語法

rectObject = object.getBoundingClientRect();

返回值為 DOMRect 對象, 這個對象是由該元素的 getClientRects() 方法返回的一組矩形的集合, 即:是與該元素相關的 CSS 邊框集合 。

針對前面的例子,使用下 getBoundingClientRect, 如下:


var ele = document.querySelector(".box");
ele.getBoundingClientRect(); // DOMRect { x: 18, y: 10, width: 100, height: 100, top: 10, right: 118, bottom: 110, left: 18 }
x:      表示左側距離視口左邊距離
y:      表示距離視口頂部距離
width:  表示元素的 width (如果box-sizing: border-box; content width; 否則就為:  content width + padding + border ) 
height: 表示元素的 height(如果box-sizing: border-box; content height 否則就為: content height + padding + border) 
top:    盒子頂部(邊框)到視口頂部的距離
left:   盒子左側到視口左側的距離
bottom: 盒子底部到視口頂部的距離
right:  盒子右邊到視口左側的距離

優點

相比其它的, 獲取值更加精準

缺點

在IE9中不支持X、Y屬性, 在IE8以及以下低版本中不兼容.

注意:

當計算邊界矩形時, 會考慮視口區域(或其他可滾動元素)內的滾動操作, 也就是說當發生滾動時, 其相應的值會跟著變化. top、left等都會發生變化. 因此,它們的值相對于可視區域的,而并不是絕對的.

通過圖來理解下上面這句話:

左側 為滾動前, 右側 為滾動后; 明顯看出同一個元素在不同情況下獲取的TopLeft不一樣;

如果想獲取元素相對于網頁左上角定位的屬性值,那么只要在 topleft 基礎上加上滾動的值(window.scrollY 、 window.scrillX).
由于 window.scrollY 、 window.scrollX 在火狐、IE上不支持. 考慮兼容處理,可以使用window.pageYOffsetwindow.pageXOffset進行替換.

兼容列表如下:

window.scrollYwindow.scrollX

Chrome Firfox IE Opera Safari
Yes No No No No

window.pageYOffsetwindow.pageXOffset

Chrome Firfox IE Opera Safari
Yes Yes IE9+ Yes Yes

IE8以下版本, scollYpageYOffset 都不支持, 必須使用其他的非標準屬性來獲取. 如下:

// 不支持,則 pageXOffset 屬性不存在的
var supportPageOffset = window.pageXOffset !== undefined;
// 標準模式
var isCSS1Compat = ((document.compatMode || "") === "CSS1Compat");

var x = supportPageOffset ? window.pageXOffset : isCSS1Compat ? document.documentElement.scrollLeft : document.body.scrollLeft;

var y = supportPageOffset ? window.pageYOffset : isCSS1Compat ? document.documentElement.scrollTop : document.body.scrollTop;

解釋下 document.compatMode 屬性, 表示當前渲染模式是什么

``CSS1Compat`` 表示為標準模式;
``BockCompat`` 表示為混雜模式.

由于這兩種模式,不一樣在IE中不一樣; IE6以及以下的版本中不支持 document.documentElement.scrollTop;
關于渲染模式相關可以自行查閱其它的資料.

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/104775.html

相關文章

  • CSS模型以及與之相關識點

    CSS盒模型以及與之相關的知識點 盒模型分為哪幾種 - 標準盒模型 - IE盒模型 兩者區別在于 width 和 height 計算方式上的不同: 標準盒模型 width = content width; IE核模型 width = content width + padding + border CSS 如何來設置這兩種模型 box-sizing: border-box box-siz...

    channg 評論0 收藏0
  • CSS模型以及與之相關識點

    CSS盒模型以及與之相關的知識點 盒模型分為哪幾種 - 標準盒模型 - IE盒模型 兩者區別在于 width 和 height 計算方式上的不同: 標準盒模型 width = content width; IE核模型 width = content width + padding + border CSS 如何來設置這兩種模型 box-sizing: border-box box-siz...

    Ashin 評論0 收藏0
  • CSS規范 > 8 模型 Box Model

    摘要:當兩個及以上外邊距折疊,合并后的外邊距寬度是發生折疊的外邊距中的最大寬度。如果該元素的外邊距同其父元素的上外邊距折疊,則該盒的上邊框邊緣同其父元盒的上邊框邊緣相同。 2017-07-20: 關于外邊距折疊, 推薦問題: https://segmentfault.com/q/10... 8 盒模型 Box Model URL: http://www.w3.org/TR/CSS2/box...

    suemi 評論0 收藏0
  • 標準模型與怪異模型 + box-sizing

    摘要:標準盒模型標準所有元素可以看作盒子,在中,這一術語是用來設計和布局時使用。在標準盒模型中盒子占位高度與之一樣。不幸的是,和在怪異模式中使用自己的非標準模型。 標準盒模型(w3c標準) 所有HTML元素可以看作盒子,在CSS中,box model這一術語是用來設計和布局時使用。CSS盒模型本質上是一個盒子,封裝周圍的HTML元素,它包括:邊距,邊框,填充,和實際內容。 showImg(h...

    SimpleTriangle 評論0 收藏0
  • 深入css布局(1) — 模型 & 元素分類

    摘要:深入布局盒模型元素分類在知識體系中,除了選擇器,樣式屬性等基礎知識外,布局相關的知識才是比較核心和重要的點。規定元素和屬性是包含元素的邊框內邊距內容的。后來微軟也慢慢轉向了的標準,在以后支持了標準盒模型。行內級元素屬性取的元素。 深入css布局(1)—— 盒模型 & 元素分類 ????在css知識體系中,除了css選擇器,樣式屬性等基礎知識外,css布局相關的知識才是css比較核心和重...

    blankyao 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<