關于width: 100%的一些看法

一.position對width 設置為百分比的影響

<html><head><style type="text/css">img {width: 50%}body {margin: 8px;}</style>
</head><body><div style=" min-height: 10px; background: red; "><div><img src="/i/eg_smile.gif" /></div></div></body></html>復制代碼

如下圖所示,首先我們有一個圖片被兩層div給包裹,而body有一個margin,圖片寬度為50%,最外層的div有一個最小高度(用于后面的測試,當img設置了其他position之后可能高度塌陷);


1.當不設置position的時候,img的50%是相對父元素(也就是第二層的div)的寬度的50%;因為最外層和第二層的寬度未設置,就是auto,就是自動鋪滿的
2.對img的position進行修改,發現當為relative的時候,寬度不變(仍相對于父元素),但當position為fixed和absolute的時候寬度變大了(因為這時候不是相對父元素了);經驗證當為fixed的時候,相對于body;當為absolute的時候寬度是相對于祖輩元素中第一個非static元素的寬度百分比直到body;

上面只是確定了是基于哪個元素的百分比.其實position為fixed和absolute時,可能還會影響到其他的,先看第二點.

二.border-box對width 設置為百分比的影響

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>測試border-box對百分比寬度的影響</title><style type="text/css">* {box-sizing: border-box;}.parent {background: steelblue;padding: 20px;width: 500px;}.child {background: wheat;height: 50px;width: 100%;padding: 10px;}</style>
</head><body><div class="parent"><div class="child"></div></div>
</body></html>復制代碼


1.如下圖所示,當div都為border-box;時,計算子元素的100%寬度,是相對于父元素的內容的寬度;
即: 子元素content width + 子元素padding width + 子元素border = 父元素content width * 百分比;(440px + 10px * 2 + 0 = 460px * 100%)
所以當都為border-box的時候,子元素在設置了width為100%,在不設置margin的情況下,子元素不會溢出父元素;

額外補充,當元素為border-box時,設置的寬度為內容寬度+padding寬度+border寬度的總和,所以parent元素的總寬度為500px,內容寬度為460px,padding寬度為40px;



2.如下圖,當div都為content-box時,子元素計算的100%寬度,是相對于仍然為父元素的內容的寬度;雖然都是內容的寬度并且width都通過樣式設置為了500px,但border-box設置的是盒子除去margin所占的總寬度(內容寬度需要用500px減去padding),而content-box時設置的寬度為盒子的內容寬度,所以child的寬度直接就為500px,但child所占的總寬度為600px(內容寬度+padding寬度,為了更明顯padding設為了50px),導致child溢出

額外補充,,當元素為content-box時,設置的寬度為內容寬度寬度,所以Parent元素的總寬度需要計算:內容寬度+padding寬度+border寬度的總和,就是500px+40px+0=540px. 對content-box的盒子設置width時,設置的是內容寬度,而對border-box的盒子設置width時,設置的是總的寬度(內容寬度+padding寬度+border寬度)


3.最后再聲明一點,寬度的計算方式都是根據父元素的內容寬度來計算的,至于這個百分比寬度是否包括padding,就只和子元素的box-sizing有關了,父元素的box-sizing不同也沒有關系(但父元素的自身的box-sizing和自身寬度計算有關,所以算是間接關系吧,也可以說沒關系);比如上面那個例子,如果我把child設置為border-box,那么child的寬度為500px,因為是border-box,所以設置的是總的寬度,即500px=內容寬度+padding寬度,所以可以推出內容寬度為400px

三.position的其他影響

我們通過做第二個實驗的時候,重新做第一個例子

<!DOCTYPE html>
<html><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"><title>測試border-box對百分比寬度的影響</title><style type="text/css">* {box-sizing: border-box;}.child {width: 100%;background: wheat;height: 20px;position: absolute;}.parent {padding: 20px;background: steelblue;width: 500px;position: relative;}.grad {padding: 20px;background: turquoise;}body {margin: 0px;}</style>
</head><body><div class="grad"><div class="parent"><div class="child"></div></div></div>
</body></html>復制代碼


我們發現child元素的總寬度為500px,內容寬度為而Parent的總寬度為500px,內容寬度卻只有460px,所以child的寬度不是我們說的集成父元素的內容寬度,而是父元素的總的寬度

四.總結


0.什么時候起作用?
子元素肯定要是塊級元素或則display為block等情況.
1.基于誰?
基于父元素或祖輩元素(跟當前元素的position有關),position為absolute則基于第一個非static祖輩元素,為fixed則基于body
2.子元素的寬度是基于父元素(或者說目標元素)的內容寬度還是總的盒子的寬度?
當子元素的position為absolute或fixed的時候,width為總的寬度(padding寬度+ 內容寬度+border寬度),而其他情況都是基于目標元素的內容寬度
3.子元素的百分比寬度樣式設置的是子元素的內容寬度還是總的寬度?
這個只跟子元素的box-sizing有關,當為border-box的時,設置的是盒子的總寬度,當為content-box是設置的盒子的內容寬度
4.若父元素寬度固定,子元素的寬度怎么計算?若不固定怎么計算?
當父元素寬度確定時,子元素的寬度百分比能很好計算出來(包括父元素寬度固定,子元素設置為float),只用根據上面三點計算;當父元素的寬度不確定時,父元素會自動鋪滿上層元素,但當父元素position為absolute或fixed或浮動時,父元素的寬度會縮到最小,這時子元素的寬度不好計算,有可能為0,有可能其他子元素把父元素的寬度撐開,這時子元素也有寬度




以上是本人觀察到的情況,不知道是否完全正確




轉載于:https://juejin.im/post/5cdcf5cff265da039a3d9596

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/279524.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/279524.shtml
英文地址,請注明出處:http://en.pswp.cn/news/279524.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Haproxy+多臺MySQL從服務器(Slave) 實現負載均衡

本系統采用MySQL一主多從模式設計&#xff0c;即1臺 MySQL“主”服務器(Master)多臺“從”服務器(Slave)&#xff0c;“從”服務器之間通過Haproxy進行負載均衡&#xff0c;對外只提供一個訪問IP&#xff0c;當程序需要訪問多臺"從"服務器時&#xff0c;只需要訪問Ha…

愛普生第三方相機_值得購買第三方相機鏡頭嗎?

愛普生第三方相機When people buy a Canon or Nikon camera, they often assume that they can only buy Canon or Nikon lenses. But that isn’t true. While Nikon lenses won’t work on your Canon camera, there are third-party lens manufacturers—such as Sigma, Tam…

[BZOJ4182]Shopping

description 權限題。 樹上\(n\)個節點每個節點都有一種物品&#xff0c;每種物品有其價值&#xff0c;價格&#xff0c;數量&#xff0c;只能買一個連通塊中的物品&#xff0c;求\(m\)元能買到物品價值的最大值。 data range \[ n\le 500,m\le 4000,T\le 5,c_i\le m\] solutio…

如何用 Flutter 實現混合開發?閑魚公開源代碼實例

2019獨角獸企業重金招聘Python工程師標準>>> 具有一定規模的 App 通常有一套成熟通用的基礎庫&#xff0c;尤其是阿里系 App&#xff0c;一般需要依賴很多體系內的基礎庫。那么使用 Flutter 重新從頭開發 App 的成本和風險都較高。所以在 Native App 進行漸進式遷移…

Silverlight之工具箱使用1

我們在開發Silverlight項目時必定需要使用VS自帶的一些控件&#xff0c;但是這些有限的控件有時候難以滿足開發時的需求&#xff0c;因此MS給我們大家提供另外一套工具&#xff0c;來緩解Silverlight開發包的不足。此工具箱免費下載地址是&#xff1a;http://silverlight.codep…

apple tv設置_如何設置Apple HomePod

apple tv設置Apple’s HomePod smart speaker is finally here. If you bought one and are eager to get going, here’s how to set it up. 蘋果的HomePod智能揚聲器終于來了。 如果您購買了一個并且渴望上手&#xff0c;請按照以下步驟進行設置。 First off, before you eve…

leetcode 128最長連續序列

方法一&#xff1a;使用快排&#xff1a; //排序法&#xff0c;時間O(nlogn)&#xff0c;使用STL&#xff0c;只是驗證一下思想&#xff0c;非正解&#xff1b; class Solution { public:int longestConsecutive(vector<int>& nums) {sort(nums.begin(),nums.end());…

8月19學習練習[兩三個TableView并排顯示]

要求&#xff1a;在一個view中顯示兩個tableView&#xff0c;要求左右顯示的內容以及行數不一樣&#xff0c;且左邊每行顯示兩張圖片&#xff08;分別3個一輪回&#xff0c;2個一輪回&#xff09;并且顯示中國的城市名&#xff0c;右邊顯示水果名。點擊時分別顯示城市名或水果名…

word多級列表創建目錄_如何在Microsoft Word中創建和使用多級列表

word多級列表創建目錄Microsoft Word lets you easily create and format multilevel lists in your documents. You can choose from a variety of formatting options, including bulleted, numbered, or alphabetized lists. Let’s take a look. Microsoft Word使您可以輕松…

如何將多個Android Wear手表與單個手機配對

When it comes to “regular” wristwatches, a lot of people have different watches for different activities. It makes sense—a sporty watch for the gym, a nicer watch for the office, and a casual watch for everything else. If you want to live this life with…

Android系統的智能指針(輕量級指針、強指針和弱指針)的實現原理分析(3)...

提供引用計數器的類RefBase我們就暫時介紹到這里&#xff0c;后面我們再結合智能指針類一起分析&#xff0c;現在先來看看強指針類和弱指針類的定義。強指針類的定義我們在前面介紹輕量級指針的時候已經見到了&#xff0c;就是sp類了&#xff0c;這里就不再把它的代碼列出來了。…

ref:下一個項目為什么要用 SLF4J

ref:http://blog.mayongfa.cn/267.html 阿里巴巴 Java 開發手冊 前幾天阿里巴巴在云棲社區首次公開阿里官方Java代碼規范標準&#xff0c;就是一個PDF手冊&#xff0c;有命名規范&#xff0c;讓你知道自己原來取的每一個類名、變量名都是爛名字&#xff0c;真替你家未來孩子擔心…

洛谷P5055 【模板】可持久化文藝平衡樹(FHQ Treap)

題面 傳送門 題解 日常敲板子.jpg //minamoto #include<bits/stdc.h> #define R register #define inline __inline__ __attribute__((always_inline)) #define fp(i,a,b) for(R int i(a),I(b)1;i<I;i) #define fd(i,a,b) for(R int i(a),I(b)-1;i>I;--i) #define …

計算機突然藍屏無法啟動_為什么計算機無法立即啟動?

計算機突然藍屏無法啟動With the newer, more powerful hardware and improved operating systems that we have available to use these days, why does it still take as long as it does to fully boot a computer up each time? 借助我們如今可以使用的更新&#xff0c;更…

CCNA課堂練習:OSPF的介紹及配置

CCNA淺談OSPF的配置 今天我們來談談路由器OSPF的配置&#xff0c;那我先來介紹一下OSPF的特點&#xff1a;1、對網絡發生的變化能夠快速響應2、當網絡發生變化的時候發送觸發式更新?3、支持VLAN 4、管理方便ospf引用了區域的概念&#xff0c;區域分兩種&#xff1a;1、骨干區域…

vcenter 6.7 (vcsa)部署指南

閑言少敘&#xff0c;直達心靈。 一、部署提要1.1 vCenter Server Appliance(VCSA )6.7下載地址https://pan.baidu.com/s/1WUShsC23E2qIIBg7MPR87w 6lzb 二、安裝部署VCSA分為兩個階段安裝&#xff0c;下面我們開始第一階段2.1 打開之后&#xff0c;直接點擊安裝按鈕2.2部署設備…

如何停止Internet Explorer 11的建議站點?

Internet Explorer automatically suggests addresses and search results based on the partial address you’re typing out. If this feature irritates you, read on as we learn how to turn it off. Internet Explorer會根據您鍵入的部分地址自動建議地址和搜索結果。 如…

什么是SG?+SG模板

先&#xff0c;定義一下 狀態Position P 先手必敗 N x先手必勝 操作方法&#xff1a; 反向轉移 相同狀態 不同位置 的一對 相當于無 對于ICG游戲&#xff0c;我們可以將游戲中每一個可能發生的局面表示為一個點。并且若存在局面i和局面j&#xff0c;且j是i的后繼局面(即局面i可…

【桌面虛擬化】之三 Persistent vs NonP

作者&#xff1a;范軍 &#xff08;Frank Fan&#xff09; 新浪微博&#xff1a;frankfan7 在【桌面虛擬化】之二類型及案例中我們探討了桌面虛擬化的兩種架構&#xff0c;HostedVirtual Desktop (VDI) 和 Published Desktop/App. 本文深入分析其中VDI的兩種桌面類型&#xff0…

H5 video 開發問題及相關知識點

相關鏈接&#xff1a;H5 video 的使用H5 video 全屏播放? video點播與直播H5 video目前所有瀏覽器都支持的視頻格式是MP4格式&#xff0c;所以mp4應當是點播web視頻的首選格式。而在直播視頻上&#xff0c;H5 video只在移動端原生支持HLS流的直播視頻(Mac safari video標簽也支…