亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > CSS > 正文

淺談css溢出機制探究

2024-07-11 08:59:26
字體:
來源:轉載
供稿:網友

為什么需要深入學習CSS溢出機制?

在實際開發的過程中,內容溢出是經常見到的。如果不深入了解這個機制,你經常會碰到這樣的問題:為什么這個元素沒有受到祖先元素的overflow:hidden的影響?這里出現的滾動條是哪個元素的?如果消除這個滾動條?如何在指定的元素上增加滾動功能?

在這篇文章,我們將會從CSS標準出發,討論CSS溢出機制的細節。

溢出

當一個盒子(block container box)的內容(子元素、孫子元素等后裔)超過盒子本身的大小的時候,就會出現溢出。這個時候CSS屬性overflow決定如何處理溢出。這個css屬性大家都知道,在這里不討論了,在這里指出需要注意的幾點:

overflow會影響所在元素的所有內容的裁剪、滾動,但是有一種情況例外:"It affects the clipping of all of the element's content except any descendant elements (and their respective content and descendants) whose containing block is the viewport or an ancestor of the element." 也就是說,overflow的所在元素必須是內容元素的直接或間接containing block,這時overflow屬性才會影響這個內容元素。比如<A><B><C><C/><B/><A/>,一般來說,B的overflow會影響C,但是如果C是相對于viewport或者A定位的(比如使用了position:absolute),那么C的顯示就不受B的裁剪、滾動的影響。

當需要滾動條的時候,滾動條會放在border與padding之間。父元素產生滾動條以后,它產生的containing block的尺寸會減少,以便給滾動條騰出空間。

在<html>和<body>上的overflow屬性存在冒泡現象: "UAs must apply the 'overflow' property set on the root element to the viewport. When the root element is an HTML "HTML" element or an XHTML "html" element, and that element has an HTML "BODY" element or an XHTML "body" element as a child, user agents must instead apply the 'overflow' property from the first such child element to the viewport, if the value on the root element is 'visible'. The 'visible' value when used for the viewport must be interpreted as 'auto'. The element from which the value is propagated must have a used value for 'overflow' of 'visible'. "

可以推斷出:

一般來說只有元素才能擁有滾動條(更準確地說,只有產生block container box的元素才能擁有滾動條)。但visual viewport是個例外。它雖然不是一個元素,但是也可以擁有滾動條。如果在<html>和<body>上都沒有設置overflow屬性而使用默認值visible(大部分場景都是這樣),那么,visual viewport的overflow就是auto:當網頁中有內容超出visual viewport時,visual viewport上會出現滾動條。

<html>的最終overflow永遠都是visible。也就是說,<html>元素永遠不可能擁有滾動條。

如果你想要為<body>設置非visible的overflow,需要先為<html>設置一個非visible的值來冒泡,從而<body>的overflow不會被冒泡。小練習

小練習:

利用以上原理,使visual viewport和<body>都擁有橫、豎滾動條,總共4個滾動條。不能使用overflow: scroll(這樣就太簡單了)。

步驟:

  • 使visual viewport和<body>的最終overflow值都為auto,從而可以出現滾動條。
  • 觸發visual viewport和<body>的溢出。通過【為內容設置一個更大的尺寸】來做到。

代碼+注釋:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">  <title>test</title>  <style>    * {      padding: 0;      margin: 0;      box-sizing: border-box;    }    html {      /* 使html的尺寸始終與visual viewport相同(即使你縮放、調整瀏覽器窗口的大?。?,從而body可以設置一個比visual viewport還大的尺寸(110%)。      對于默認為block的元素可以省略width: 100%; */      width: 100%;      height: 100%;      /* 非visible的值冒泡到visual viewport上,使visual viewport可以出現滾動條 */      overflow: auto;      border: 15px solid red;    }    body {      /* 使得body可以出現滾動條 */      overflow: auto;      /* body溢出html,從而溢出initial containning block,從而溢出visual viewport,使得visual viewport出現滾動條。      當然,你也可以通過很多其他的方式來觸發visual viewport的溢出,比如增大html元素,或者在body中弄一個position: absolute的div */      width: 110%;      height: 110%;      border: 15px solid green;    }    main {      /* main溢出body,使得body出現滾動條 */      width: 110%;      height: 110%;      border: 15px solid blue;    }  </style></head><body>  <main>  </main></body></html>

結果:

自己在chrome中打開以上代碼,能更加清晰地看出是怎么做到的。

也可以通過absolute的方式來溢出initial containing block:

<!DOCTYPE html><html lang="en"><head>  <meta charset="UTF-8">  <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">  <title>test</title>  <style>    * {      padding: 0;      margin: 0;      box-sizing: border-box;    }    html {      /* 使html的尺寸始終與visual viewport相同(即使你縮放、調整瀏覽器窗口的大?。?,從而body可以設置一個比visual viewport還大的尺寸(110%)。      對于默認為block的元素可以省略width: 100%; */      width: 100%;      height: 100%;      /* 非visible的值冒泡到visual viewport上,使visual viewport可以出現滾動條 */      overflow: auto;      border: 15px solid red;    }    body {      /* 使得body可以出現滾動條 */      overflow: auto;      /* 為body設置一個尺寸,從而main可以設置一個比body還大的尺寸(110%)。      對于默認為block的元素可以省略width: 100%; */      height: 100%;      border: 15px solid green;    }    main {      /* main溢出body,使得body出現滾動條 */      width: 110%;      height: 110%;      border: 15px solid blue;    }    .abs {      /* 通過absolute的方式來溢出initial containing block,從而溢出viewport */      position: absolute;      width: 100px;      height: 100px;      right: -100px;      bottom: -100px;      border: 15px solid blueviolet;    }  </style></head><body>  <main>  </main>  <div class="abs"></div></body></html>

結果:

自己在chrome中打開以上代碼,能更加清晰地看出是怎么做到的。

如何看出某個滾動條是屬于哪個元素的?

通過Chrome DevTools就可以看出滾動條的所屬元素。

前面已經說過,滾動條的位置在元素的border與padding之間。當你使用Chrome DevTools選中某個元素,發現滾動條恰好在高亮區域(border)內部時,滾動條就屬于當前元素。

要判斷滾動條是否屬于visual viewport,首先先將右邊、下邊的滾動條分別滾動到最下、最右(這一步很重要,它保證沒有內容藏在滾動條下面)。然后,Ctrl+Shift+C選擇右邊或下邊的滾動條,如果高亮的區域不包含這個滾動條,就說明這個滾動條不屬于任何元素,也就是屬于visual viewport。

參考資料

css2.1標準

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产综合久久香蕉最新版| 国产精品美女久久久免费| 大伊人狠狠躁夜夜躁av一区| 欧美性生活大片免费观看网址| 欧美日本中文字幕| 日韩av在线不卡| 最近2019年中文视频免费在线观看| 日韩欧美大尺度| 亚洲高清免费观看高清完整版| www.午夜精品| 2018国产精品视频| 91久久夜色精品国产网站| 成人精品aaaa网站| 国产成人精品av在线| 欧美午夜丰满在线18影院| 色777狠狠综合秋免鲁丝| 国产69精品99久久久久久宅男| 亚洲最新中文字幕| 91亚洲精品视频| 国产精品吹潮在线观看| 亚洲黄色成人网| 国产精品揄拍500视频| 少妇av一区二区三区| 久青草国产97香蕉在线视频| 日本精品性网站在线观看| 欧美理论在线观看| 中文字幕亚洲综合久久筱田步美| 亚洲女人天堂色在线7777| 清纯唯美亚洲激情| 欧美性猛交xxxx免费看漫画| 国产精品免费视频xxxx| 亚洲综合第一页| 日韩人在线观看| 91精品综合久久久久久五月天| 黄网动漫久久久| 久久视频国产精品免费视频在线| 亚洲精品免费av| 69久久夜色精品国产7777| 91成人免费观看网站| 久久久久国产视频| 爽爽爽爽爽爽爽成人免费观看| 97婷婷大伊香蕉精品视频| 精品久久久视频| 久久精品视频播放| 91在线视频九色| 久久久久久久97| 欧美日韩国产一区二区三区| 欧美性感美女h网站在线观看免费| 亚洲精品国产精品自产a区红杏吧| 91免费看片在线| 亚洲国产精品成人一区二区| 国产精品久久久av久久久| 欧美精品videos另类日本| 亚洲精品一区中文| 欧美激情国产日韩精品一区18| www国产91| 欧美激情视频一区二区三区不卡| 久久影视免费观看| 97超碰蝌蚪网人人做人人爽| 中文字幕日韩电影| 国产成人精品一区二区| 久久国产天堂福利天堂| 日韩极品精品视频免费观看| 91精品在线观看视频| 日韩日本欧美亚洲| 一区国产精品视频| 日av在线播放中文不卡| 国产成人激情小视频| 91成人国产在线观看| 国产日韩av高清| 欧美亚洲成人免费| 91在线免费观看网站| 2019国产精品自在线拍国产不卡| 亚洲国产精品悠悠久久琪琪| xxxxx成人.com| 欧美成人午夜免费视在线看片| 亚洲国产成人久久综合一区| 国产aⅴ夜夜欢一区二区三区| 欧美极品少妇xxxxⅹ免费视频| 国产精品旅馆在线| 国产精品吊钟奶在线| 久久99精品国产99久久6尤物| 亚洲人成电影在线播放| xx视频.9999.com| 欧美激情第99页| 精品国产一区二区三区久久久| 狠狠做深爱婷婷久久综合一区| 成人福利视频在线观看| 好吊成人免视频| 日韩电影免费观看在线| 久久6免费高清热精品| 亚洲欧洲视频在线| 亚洲第一免费网站| 中文字幕日韩在线视频| 国产噜噜噜噜噜久久久久久久久| 26uuu另类亚洲欧美日本一| 亚洲一区美女视频在线观看免费| 久久手机免费视频| 精品无人区乱码1区2区3区在线| 精品久久久久久久大神国产| 国产视频欧美视频| 久久九九有精品国产23| 久久久国产一区二区| 精品人伦一区二区三区蜜桃网站| 美女视频黄免费的亚洲男人天堂| 综合av色偷偷网| 精品福利在线观看| 久久久亚洲影院你懂的| 国产精品久久久久久久av大片| 久久青草精品视频免费观看| 精品国内亚洲在观看18黄| 久久精视频免费在线久久完整在线看| 伊人成人开心激情综合网| 成人精品视频99在线观看免费| 国产丝袜一区二区| 欧美在线视频观看| 久久久久久成人| 亚洲欧洲一区二区三区在线观看| 欧美极品在线视频| 精品国产乱码久久久久酒店| 另类专区欧美制服同性| 精品成人国产在线观看男人呻吟| 97福利一区二区| 九九九热精品免费视频观看网站| 亚洲精品久久久久久久久久久久| 亚洲欧美日韩在线高清直播| 亚洲天堂免费在线| 国产91色在线播放| 超碰97人人做人人爱少妇| 日韩欧美中文免费| 97国产精品视频人人做人人爱| 伊人精品在线观看| 国产成+人+综合+亚洲欧洲| 亚洲欧洲av一区二区| 亚洲国产欧美一区二区三区久久| 日韩精品亚洲精品| 红桃av永久久久| 欧美一级在线播放| 欧美日韩国产精品| xxav国产精品美女主播| 久久夜精品香蕉| 色妞久久福利网| 永久免费看mv网站入口亚洲| 欧美黑人极品猛少妇色xxxxx| 欧美一区二区影院| 国产欧美一区二区三区在线| 欧美成人精品在线视频| 日日狠狠久久偷偷四色综合免费| 九九九久久国产免费| 国产精品三级美女白浆呻吟| 亚洲第一二三四五区| 91免费看片在线| 国产精品高清在线| 三级精品视频久久久久| 亚洲一区精品电影| 亚洲电影av在线| www欧美日韩| 国产精品狼人色视频一区| 亚洲丝袜在线视频| 国产精品自产拍在线观看中文| 国产精品成人在线| 另类图片亚洲另类| 国产精品久久激情| 96精品视频在线|