八戒一区二区三区-午夜A级伦理电影-91好吊色国产欧美日韩在线-欧美国产精品二区三区13p-国产操逼大毛片基地-亚洲第一性爱免费视频网

站長資訊網
最全最豐富的資訊網站

分享6個關于CSS盒模型的面試題,你能答對幾個?

本篇文章給大家分享6個關于CSS盒模型的面試題,查漏補缺,看看這六個面試題你能答對幾個?是否可以全部答對?

分享6個關于CSS盒模型的面試題,你能答對幾個?

對于前端面試來說,css盒模型肯定是必考必問的前端知識點,因為這是CSS基石中非常重要的內容,而且它關聯的知識也非常多,那面試中一般都是如何層層遞進的提問呢?下面一起來看看吧!

1、談談你對CSS盒模型的認識?

問題簡答

所有 HTML 元素都可以視為方框。在 CSS 中,在談論設計和布局時,會使用術語“盒模型”或“框模型”。CSS 框模型實質上是一個包圍每個 HTML 元素的框。

它包括:

  • 外邊距 → margin
  • 邊框 → border
  • 內邊距 → padding
  • 實際的內容 → content

它有標準模型和IE模型兩種;

知識解析

盒模型,英文box model。

  • 無論是div、span、還是a都是盒子。
  • 圖片、表單元素一律看作是文本,它們并不是盒子,因為一張圖片里面并不能放東西,它自己就是自己的內容。

盒模型各部分說明:

  • Margin(外邊距) :清除邊框外的區域,外邊距是透明的(可以為負值)。
  • Border(邊框) :圍繞在內邊距和內容外的邊框。
  • Padding(內邊距) :清除內容周圍的區域,內邊距是透明的(不允許負值)。
  • Content(內容) :盒子的內容,顯示文本和圖像。

2、標準模型和IE模型的區別?

問題簡答

標準模型和ie模型的區別是計算寬width高height的不同。

  • 標準模型width不計算padding和border;
  • ie模型width計算padding 和border;

知識解析

標準盒模型(W3C盒子模型)

設置的寬高是對實際內容content寬高進行設置,內容周圍的border和padding另外設置;

即元素實際占位的寬高為:

width【height】= 設置的content的寬【高】 + padding + border + margin

可以通過實例來理解:寫一個div,同時設置了寬、高、邊框、內邊距、外邊距;

//注:如果下面示例未寫html和css,說明與此處相同 .box {     width: 100px;     height: 100px;     border: 10px solid #CC9966;     padding: 30px;     margin: 40px;     background: #66FFFF; } <div class="box">Axjy</div>

效果及Chrome的開發者工具中顯示的盒模型如下:

分享6個關于CSS盒模型的面試題,你能答對幾個?

可以看到content部分即為100×100,內容周圍都是另外設置的,width=40+10+30+100+30+10+40=180

分享6個關于CSS盒模型的面試題,你能答對幾個?

IE盒子模型(怪異盒模型)

設置的寬高是對實際內容content + 內邊距(padding)+邊框(border)之和的width和height進行設置的;

即元素實際占位的寬高為:

width(height)= 設置的width(height)+外邊距margin

和上面使用同樣的例子,但是通過設置box-sizing:border-box;,把它變為IE盒模型;

.box {     width: 100px;     height: 100px;     border: 10px solid #CC9966;     padding: 30px;     margin: 40px;     background: #66FFFF;     box-sizing: border-box;//注意 } <div class="box">Axjy</div>

效果及Chrome的開發者工具中顯示的盒模型如下:

分享6個關于CSS盒模型的面試題,你能答對幾個?

可以很明顯的看到,正方形和上面的比小了一圈,width=40+10+30+20+30+10+40=100;

分享6個關于CSS盒模型的面試題,你能答對幾個?

3、CSS如何設置這兩種模型?

問題簡答

上面的示例其實已經用到了這個設置

  • css設置標準模型:Box-sizing:context-box (也是瀏覽器默認的盒模型);
  • css設置Ie模型:box-sizing:border-box;

4、JS如何設置/獲取盒模型對應的寬和高?

問題簡答

1) dom.style.width/height【只能取到內聯元素】 2) dom.currentStyle.width/height【只有IE支持】 3) document.getComputedStyle(dom,null).width/height   4) dom.getBoundingClientRect().width/height  5) dom.offsetWidth/offsetHeight【常用】

知識解析

1、dom.style.width/height

通過dom節點的style樣式獲取,只能取到行內樣式的寬和高,style 標簽中和 link 外鏈的樣式取不到

.box{...} ----------------------------  let targetDom = document.querySelector('.box'); let width = targetDom.style.width; let height = targetDom.style.height;  console.log("width",width) console.log("height",height)

使用類設置寬高時

獲取的寬高為空

分享6個關于CSS盒模型的面試題,你能答對幾個?

在行內設置寬高時

獲取的是行內設置的寬高

分享6個關于CSS盒模型的面試題,你能答對幾個?

element.style.xxx 這種只能取得內嵌樣式的屬性,獲取樣式能讀能寫

2、dom.currentStyle.width/height

取到的是最終渲染后的寬和高,如果有設置寬高,則不論哪種盒模型獲取到的都是設置的寬高,只有IE兼容

.box {...同上} ----------------------------  let targetDom = document.querySelector('.box'); let width = targetDom.currentStyle.width; let height = targetDom.currentStyle.height;

element.currentStyle[xxx] 可以取得內部和外部樣式,但是只兼容ie瀏覽器,獲取的樣式只能讀

3、document.getComputedStyle(dom,null).width/height

取到的是最終渲染后的寬和高,如果有設置寬高,則不論哪種盒模型獲取到的都是設置的寬高,和currentStyle相同,但是兼容性更好,IE9 以上支持。

getComputedStyle()方法,

  • 第一個參數:取得計算樣式的元素;
  • 第二個參數:一個偽元素字符串(例如“:after”),如果不需要偽元素信息,默認為null;

分享6個關于CSS盒模型的面試題,你能答對幾個?

.box {...同上} ----------------------------  let targetDom = document.querySelector('.box'); let width =  window.getComputedStyle(targetDom).width let height = window.getComputedStyle(targetDom).height  console.log("width",width) console.log("height",height)

分享6個關于CSS盒模型的面試題,你能答對幾個?

『小擴展』

如果box類不設置寬高,而是由內容自動撐開;

標準盒模型通過getComputedStyle獲取到的寬高是content的值;

分享6個關于CSS盒模型的面試題,你能答對幾個?

分享6個關于CSS盒模型的面試題,你能答對幾個?

IE盒模型通過getComputedStyle獲取到的寬高 = border + padding + content,不包括外邊距;

分享6個關于CSS盒模型的面試題,你能答對幾個?

分享6個關于CSS盒模型的面試題,你能答對幾個?

4、dom.getBoundingClientRect().width/height

得到渲染后的寬和高,大多瀏覽器支持。IE9以上支持。

.box {...同上} ---------------------------- let targetDom = document.querySelector('.box'); let width = targetDom.getBoundingClientRect().width; let height = targetDom.getBoundingClientRect().height console.log('width',width) console.log('height',height)

標準模型,寬高設置為100的結果,額外包括了padding和border的值;

分享6個關于CSS盒模型的面試題,你能答對幾個?

IE模型,寬高設置為100的結果;

分享6個關于CSS盒模型的面試題,你能答對幾個?

『小擴展』

如果box類不設置寬高,而是由內容自動撐開;

不論是哪種模型,獲取到的都是(border + padding + content),不包括外邊距;

分享6個關于CSS盒模型的面試題,你能答對幾個?

getBoundingClientRect還可以取到相對于視窗的上下左右的距離(用于獲取某個元素相對于視窗的位置集合)。

分享6個關于CSS盒模型的面試題,你能答對幾個?

5、dom.offsetWidth/offsetHeight(常用)

包括高度(寬度)、內邊距和邊框,不包括外邊距。最常用,兼容性最好。

.box {...同上} ---------------------------- let targetDom = document.querySelector('.box'); let width = targetDom.offsetWidth; let height = targetDom.offsetHeight; console.log('width',width) console.log('height',height)

標準模型,寬高設置為100的結果;

分享6個關于CSS盒模型的面試題,你能答對幾個?

IE模型,寬高設置為100的結果;

分享6個關于CSS盒模型的面試題,你能答對幾個?

小擴展

如果box類不設置寬高,而是由內容自動撐開;

不論是哪種模型,獲取到的都是(border + padding + content),不包括margin;

分享6個關于CSS盒模型的面試題,你能答對幾個?

從上面可以看出,dom.getBoundingClientRect().width/height 和 dom.offsetWidth/offsetHeight 結果是一樣的

5、根據盒模型解釋邊距重疊

問題簡答

外邊距重疊是指兩個【垂直】 【相鄰】的塊級元素,當上下兩個邊距相遇時,其外邊距會產生重疊現象,且重疊后的外邊距,等于其中較大者。(水平方向不會發生)

『原因』

根據W3C文檔的說明,當符合以下條件時,就會觸發外邊距重合

  • 都是普通流中的元素且屬于同一個 BFC
  • 沒有被 padding、border、clear 或非空內容隔開
  • 兩個或兩個以上垂直方向的「相鄰元素」

相鄰元素包括父子元素和兄弟元素

『重疊后的margin計算』

  • 1、margin都是正值時取較大的margin值

  • 2、margin都是負值時取絕對值較大的,然后負向位移。

  • 3、margin有正有負,從負值中選絕對值最大的,從正值中選取絕對值最大的,然后相加

邊距重疊詳解及解決方案

1、嵌套塊(父子)元素垂直外邊距的合并

對于兩個嵌套關系的塊元素,如果父元素沒有padding-topborder,則父元素的margin-top會與子元素的margin-top發生合并,合并后的外邊距為兩者中的較大者,即使父元素的上外邊距為0,也會發生合并。

分享6個關于CSS盒模型的面試題,你能答對幾個?

『解決辦法』

  • 1、為父元素定義1px的border-top或padding-top。
  • 2、為父元素添加overflow:hidden。
  • 3、子元素或父元素設置display:inline-block。
  • 4、父元素加前置內容(::before)生成。(推薦)

『示例』

在頁面放兩個正方形

<div class="parent-box">     <div class="child-box"></div> </div>

父元素margin-top設為0,子元素設置20px;

.parent-box{     width: 100px;     height: 100px;     margin-top: 0;     background: #99CCFF; } .child-box{     width: 50px;     height: 50px;     margin-top: 20px;     background: #FF9933; }

預期效果:應該是父級元素沒有邊距,子元素頂部和父元素頂部之間的距離為20

實際效果:父子盒子重疊,父級與外面的間隔變成了20(會取較大的值,因為父級為0,所以取的是子級的margin)

分享6個關于CSS盒模型的面試題,你能答對幾個?

通過上面的解決辦法處理之后

方法一、二、三

分享6個關于CSS盒模型的面試題,你能答對幾個?

方法四

.parent-box::before {     content : "";     display :table; }

分享6個關于CSS盒模型的面試題,你能答對幾個?

達到的效果

分享6個關于CSS盒模型的面試題,你能答對幾個?

2、相鄰塊(兄弟)元素垂直外邊距的合并(外邊距塌陷)

當上下相鄰的兩個塊元素相遇時,如果

  • 上面的元素有下外邊距margin-bottom,
  • 下面的元素有上外邊距margin-top,

則他們之間的垂直間距不是margin-bottom與margin-top之和,而是兩者中的較大者

分享6個關于CSS盒模型的面試題,你能答對幾個?

『解決辦法』

1)為了達到想要的間距,最好在設置margin-top/bottom值時統一設置上或下;

2)或者用以下的BFC解決,下面有詳解

6、談談BFC

BFC的基本概念

BFC全稱為塊格式化上下文 (Block Formatting Context) ,是 Web 頁面中盒模型布局的 CSS 渲染模式,指一個獨立的渲染區域或者說是一個隔離的獨立容器。

BFC的通俗理解:首先BFC是一個名詞,就是一個有特定規則的區域。我們可以理解為一個箱子(實際上是看不見摸不著的),箱子里面物品的擺放是不受外界的影響的。

W3C 規范對此作了詳細的描述:

  • 浮動元素和絕對定位元素,非塊級盒子的塊級容器(例如 inline-blocks, table-cells, 和 table-captions),以及 overflow 值不為visiable 的塊級盒子,都會為他們的內容創建新的 BFC(塊級格式上下文)。

  • 在 BFC 中,盒子從頂端開始垂直的一個接一個排列,兩個盒子之間的垂直間距由他們的 margin 值決定,在同一個 BFC 中,兩個相鄰塊級盒子的垂直外邊距會產生折疊。

  • 在 BFC 中,每一個盒子的左外邊緣會觸碰到容器的左邊緣,對于從右到左的格式來說,則觸碰到右邊緣。即使在浮動里也是這樣的(盡管一個盒子的 line boxes 會因為浮動而收縮),除非這個盒子的內部創建了一個新的 BFC(由于浮動,在這種情況下盒子本身將會變得更窄)

BFC的布局規則(原理/渲染規則)

  1. 計算BFC高度時,浮動元素也會參與計算(清除浮動)
  2. BFC的區域不會與浮動元素的box重疊。(防止浮動文字環繞)
  3. BFC在頁面上是一個獨立的容器,內外元素不相互影響。(解決外邊距重疊問題)
  4. Box垂直方向的距離由margin決定。屬于同一個BFC的兩個相鄰Box的margin會發生重疊。

下面的使用場景會通過這些規則來處理一些實際的問題。

如何創建BFC

括號里面是一些副作用

  • 浮動元素:float:left | float:right;【會導致父元素的寬度丟失,也會導致下邊的元素上移】
  • 定位元素:position:absolute | position:fixed;
  • display的一些值:display:inline-block【轉為行內塊會導致寬度丟失】 | display:flex | display:table | table-cell、table-caption、inline-table、inline-flex、grid、inline-grid;
  • overflow值不為visible:overflow:hidden;【將會剪切掉溢出的元素】 | overflow:auto、overflow:scroll;
  • display:flow-root【新屬性,BFC創建新方式,沒有任何副作用,注意瀏覽器兼容】

『注意』

display:table也可以生成BFC的原因在于Table會默認生成一個匿名的table-cell,是這個匿名的table-cell生成了BFC。

并不是任意一個元素都可以被當做BFC,只有當這個元素滿足以上任意一個條件的時候,這個元素才會被當做一個BFC

BFC的使用場景

1、清除浮動

浮動的元素會脫離普通文檔流,如下,父級容器只剩下2px的邊距高度。

分享6個關于CSS盒模型的面試題,你能答對幾個?

利用overflow: hidden給父級創建BFC之后

分享6個關于CSS盒模型的面試題,你能答對幾個?

以上方法可以實現清楚浮動,但是還是推薦使用偽類的方式。

為什么要清除浮動? 浮動塌陷,包含塊沒有設置高度或者是自適應的時候、包含塊就不能撐起來,變成塌陷的狀態。

2、防止浮動文字環繞

有如下文字環繞效果:

分享6個關于CSS盒模型的面試題,你能答對幾個?

brother-box有部分被浮動元素所覆蓋(文本信息不回被浮動元素覆蓋),如果想避免元素被覆蓋,可利用創建BFC的方法,如給brother-box加overflow: hidden,則可得到以下效果

分享6個關于CSS盒模型的面試題,你能答對幾個?

『理由』上面的規則二:BFC的區域不會與浮動元素的box重疊

這個方法可以用來實現兩列自適應布局,左邊的寬度固定,右邊的內容自適應寬度。

3、利用BFC解決邊距重疊問題

根據前面的邊距重合條件來看,想要解決邊距重疊,只需要破壞其中的某個觸發條件即可,比如創建一個BFC。

根據 BFC 的定義,兩個元素只有在同一BFC 內,才有可能發生垂直外邊距的重疊,包括相鄰元素、嵌套元素。

===============================

要解決 margin 重疊問題,只要讓它們不在同一個 BFC 內就行。

  • 對于相鄰元素,只要給它們加上 BFC 的外殼,就能使它們的 margin 不重疊;
  • 對于嵌套元素,只要讓父級元素觸發 BFC(比如給父級加overflow:hidden),就能使父級 margin 和當前元素的 margin 不重疊。

===============================

在沒有新建BFC時,邊距重疊了,margin-bottom + margin-top,應該等于20

分享6個關于CSS盒模型的面試題,你能答對幾個?

新建了BFC之后

分享6個關于CSS盒模型的面試題,你能答對幾個?

上面的例子中,為了使兩個正方形的外邊距不重疊,就給其中一個div包裹一層container,觸發BFC。

注意: 邊距折疊的問題可以用 BFC 來解決,但觸發 BFC 并不是解決邊距折疊的充分條件,還要得到合理的運用

原文地址:https://juejin.cn/post/6988877671606272031

作者:Axjy

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
亚洲AV无码成人精品国产| 国产男女猛烈无遮挡免费视频网站| 被青梅竹马的学弟给锁定了林擎霄| 爆乳一区二区三区无码| 风流老熟女一区二区三区| 国产精品IGAO视频网| 国产品无码一区二区三区在线| 激情爆乳一区二区三区| 久久久久久精品免费免费999| 联系附近成熟妇女| 人妻人妇人妻一区二区三区| 色婷婷亚洲婷婷八月中文字幕 | 久久国产热精品波多野结衣AV| 久久亚洲国产成人精品无码区| 女生让男生随便诵自己的名字| 日韩久久无码免费毛片软件| 无码人妻一区二区三区精品视频 | 国产亚AV手机在线观看| 畜禽CROPROATION| BBwBBw高潮喷水日本少妇自| 成人网站在线进入爽爽爽| 国产精品亚洲А∨天堂免| 久久精品女人天堂AV| 欧美日韩亚洲中文字幕二区| 熟女少妇一区二区三区| 亚洲国产成人久久综合电影| 无人区乱码一线忘忧草| 亚洲线精品一区二区三区影音先锋| BTА√天堂中文在线官网| 国产成人涩涩涩视频在线观看| 丰满的人妻HD高清日本| 黑人巨大AV无码专区| 男男高H啊灌满了高潮视频| 色妞WW精品视频7777| 亚洲AV中文乱码一区二| 51吃瓜.WORLD张津瑜蘑菇| 粗大挺进亲女H晓晓| 精品 日韩 国产 欧美 视频| 韩国青草自慰喷水无码直播间 | 天堂AⅤ无码一区二区三区| 日韩A级成人免费无码视频| 午夜天堂一区人妻| …日韩人妻无码精品一专区 | √最新版天堂资源网在线| 国产成人片一区在线观看| 老熟妇仑乱一区二区视頻| 少妇久久久久久久久久| 亚洲午夜无码片在线观看影院| 波多野结衣的AV电影| 激情都市 校园 人妻 武侠| 欧美一区二区三区孕妇精品| 亚洲AⅤ无码一区二区三区| 939W78V78W乳液永久W| 国产精品无码专区在线播放| 蜜桃AV人片在线观看| 无码中文字幕AⅤ精品影院| 18无码粉嫩小泬无套在线观看| 国产免费AV片在线播放| 欧美交换配乱吟粗大免费看| 亚洲AV无码成人精品区在线观看| 99尹人香蕉国产免费天天| 韩漫无羞遮无删减漫免费| 人人妻人人澡人人爽秒播| 亚洲人成无码区在线观看| 国产AV无码专区亚洲AⅤ| 免费看永久不收费下载软件| 学长别揉了~流水了想要~| MAC小辣椒877正品| 高潮潮喷奶水飞溅视频无码| 久久婷婷综合色丁香五月| 偷拍 拍自 欧美色区| 99RIAV国产精品视频| 韩国19禁床震无遮掩免费| 久久久久久精品国产亚洲AV麻豆 | 男人激烈吮乳吃奶动态图| 性生大片免费观看网站| 成年无码AV片在线| 六个人玩我一个人| 无码人妻巨屁股系列大又挺拔 | 国产精品爽爽ⅴa在线观看| 欧美激情内射喷水高潮| 亚洲熟妇人av一区二区三区 | 无遮挡亲胸捏胸免费视频| X姓女RAPPER的首次亮相| 久久人妻AV一区二区软件| 午夜性色一区二区三区不卡视频| 超碰97人人射妻| 蜜桃av中文字幕在线| 亚洲精品无码专区久久同性男| 中文字幕乱码人在线视频1区| 国产在线精品二区| 蜜桃Av噜噜一区二区三区绯色 | 日韩人妻无码一区二区三区综合| 中文无码乱人伦中文视频在线V| 波多野结衣AV在线无码中文观看| 亂倫近親相姦中文字幕| 亚洲成人无码一区| 国产内射爽爽大片视频社区在线 | 毛片内射久久久一区| 亚洲AV无码专区亚洲AV桃| 国产成人人人97超碰超爽8| 人妻夜夜爽天天爽欧美色院| 77777_亚洲午夜久久多人| 久久久精品久久久久久96| 亚洲AV永久无码精品三区在线 | 久久精品亚洲乱码伦伦中文| 香草乱码一二三四区别| 国产98涩在线 | 欧洲| 日本怡春院一区二区三区| JAPANESE成熟丰满熟妇| 男人操女人视频图片日韩| 影音先锋每日AV色资源站| 疯狂做受XXXX欧美老人| 人妻在线日韩免费视频| AⅤ中文字幕不卡在线无码| 邻居少妇张开腿让我爽了在线观看 | 亚洲国产精品久久久久婷婷图片| 国产三级在线观看播放| 无码日韩做暖暖大全免费不卡| 国产AV一区二区精品久久| 色欲色香天天天综合无码| 伊人久久大香线蕉AV最新午夜| 精品久久久久久无码中文字幕一区| 亚洲AV成人精品日韩一区| 国产精品久久久久久成人影院| 视频一区二区三区日韩| 堕落的人妻1―10雨柔| 日日狠狠久久8888偷偷色| 大炕上和亲亲公个取所需| 老翁的大肉蟒进进出出| 曰韩少妇内射免费播放| 国产无套粉嫩白浆在线| 性无码专区一色吊丝中文字幕| 国产日产欧洲无码视频| 性少妇FREESEXVIDEO| 国产精品沙发午睡系列| 亚洲 国产 制服 丝袜 一区| 国产一卡2卡3卡4卡无卡国色| 亚洲AV日韩AV激情亚洲| 护士HD老师FREE性Ⅹ| 亚洲精品无码久久久久不卡| 久久 国产 尿 小便 嘘嘘| 无码无套少妇毛多69XXX| 国产肉体XXXX裸体784大胆| 亚洲AV无码一区二区三区网站| 狠痕鲁狠狠爱2021在| 亚洲日韩欧美一区二区三区| 久久精品亚洲精品无码白云TV| 影音先锋亚洲亚洲色图| 免费看黄的成人APP| H漫全彩纯肉无码网站| 日本熟妇人妻XXⅩHD| 国产波霸爆乳一区二区| 午夜天堂一区人妻| 精品一区二区三区无码视频| 在线天堂おっさんとわたしWWW| 女人两腿扒开图片大全| 成人免费AⅤ视频一区二区| 天码AV高清毛片在线看_| 国产又色又爽又黄的在线观看| 亚洲熟妇无码爱V在线观看| 免费一本色道久久一区| 亚洲欧美日韩在线一区| 看久久久久久A级毛片| EEUSS影院免费最电影| 少妇毛又多又黑一区二区| 国产午夜高清高清在线观看| 亚洲日韩∨A无码中文字幕| 免费无码久久成人网站入口| 暴躁老阿姨CSGO| 无套内谢少妇毛片免费看看| 久久精品午夜亚洲AV无码少妇| 91人妻人人澡人人爽| 少妇人妻偷人精品视频| 狠狠色噜噜狠狠狠狠色综合久| 中文精品一区二区三区四区| 日本在线 | 中文| 国语精品自产拍在线观看网站| 一本久道综合在线中文无码| 热99RE久久免费视精品频| 国产精品高潮AV久久无码| 亚洲午夜成人AV电影| 人妻丰满熟妇AV无码区| 国产乱码精品一品二品| 伊人久久亚洲综合AV影院| 日本少妇XXⅩ熟睡侵犯| 国模GOGO无码人体啪啪| 午夜无码人妻AV大片色欲| 久久精品国产亚洲AV忘忧草18 | 亚洲欧洲老熟女AV| 欧美性受XXXX黑人猛交免费看 | 香蕉久久AⅤ一区二区三区| 老妇高潮潮喷到猛进猛出| 豆奶视频在线观看免费高清版| 亚洲精品无码AⅤ片| 人妻丰满熟妇AV无码区免| 国内精品伊人久久久久妇| 99国精品午夜福利视频不卡99| 无码喷水一区二区浪潮AV| 裸体跳舞XXXX裸体跳舞|