成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入理解 CSS 中的溢出問題

開發 前端
那什么是溢出問題呢?當水平滾動條無意中出現在網頁上,允許用戶水平滾動時,就會出現溢出問題,它可能由不同的原因導致。

大家好,我是CUGGZ。又到周五啦,提前祝大家周末愉快!今天來看看導致 CSS 溢出問題的原因以及該如何修復它們。

一、什么是溢出問題?

在平時開發中,我們可能會遇到水平滾動條的問題,尤其是在移動設備上。因為滾動條問題的原因有很多,所以沒有直截了當的解決方案。有些問題可以很快解決,有些需要一點調試技巧。、

那什么是溢出問題呢?當水平滾動條無意中出現在網頁上,允許用戶水平滾動時,就會出現溢出問題,它可能由不同的原因導致。

二、如何發現溢出問題?

下面來看看發現溢出問題的常用方法。

1. 向左或向右滾動

第一種方法是水平滾動頁面。如果能夠滾動,那就說明頁面有問題。

2. 使用 JavaScript 查找比正文更寬的元素

我們可以在瀏覽器控制臺添加如下代碼片段,來顯示比主體更寬的元素。這對于包含大量元素的頁面來說是很方便的。

var docWidth = document.documentElement.offsetWidth;

[].forEach.call(
document.querySelectorAll('*'),
function(el) {
if (el.offsetWidth > docWidth) {
console.log(el);
}
}
);

3. 使用CSS outline屬性

我們可以將CSS的outline屬性添加到頁面上的所有元素,這樣就可以看到哪些元素發生了溢出。

也可以將以下JavaScript代碼片段添加到瀏覽器的控制臺中,以給頁面上每個元素添加隨機顏色的outline。

[].forEach.call($$("*"),function(a){a.style.outline="1px solid #"+(~~(Math.random()*(1<<24))).toString(16)})

效果如下:

這樣就能輕松看出頁面上哪個元素發生了溢出。

4. Firfox 中的溢出標簽

Firefox 有一個很有用的功能,可以告訴我們哪些元素發生了溢出。

5. 刪除頁面元素

另一種常見的方法是打開瀏覽器的DevTools,開始逐個刪除頁面元素。一旦問題消失,那么剛剛刪除的部分可能就是導致溢出問題的原因。我這種方法在你發現問題但不知道為什么會發生的情況下是很有用的。

三、常見的溢出問題

1. 固定寬度元素

溢出的最常見原因之一是固定寬度的元素。一般來說,不要固定會在多個視口大小下顯示的元素的寬度。

.element {
width: 400px;
}

2. Flex 布局

在使用 Flexbox 布局時,當沒有可用空間時,如果不允許項目換行,那么就可能會發生溢出。

.parent {
display: flex;
flex-wrap: wrap;
}

在這里,如果空間不足以將它們全部放在一行中,Flex 布局的項目就會導致水平溢出:

當 flex 的父對象需要在不同的視口大小下顯示時,確保使用 flex-wrap: wrap

.parent {
display: flex;
flex-wrap: wrap;
}

3. Grid 布局

在使用CSS grid 布局時,響應式設計是很重要。以下面代碼為例:

.wrapper {
display: grid;
grid-template-columns: 1fr 300px 1fr;
grid-gap: 1rem;
}

如果視口小于300px,上面的示例將是有效的。否則就會發生溢出。

為了避免這樣的問題,只有在有足夠的可用空間時才使用 grid 布局。我們可以使用如下 CSS 媒體查詢:

.wrapper {
display: grid;
grid-template-columns: 1fr;
grid-gap: 1rem;
}

@media (min-width: 400px) {
.wrapper {
grid-template-columns: 1fr 300px 1fr;
}
}

4. 長單詞

溢出的另一個常見原因是不適合視口寬度的長單詞。由于視口的寬度,這種情況在移動設備上發生得更多。

要解決這個問題,我們需要使用 overflow-wrap 屬性:

.article-content p {
overflow-wrap: break-word;
}

此修復對于用戶輸入的內容特別有用。一個常見的例子就是評論內容,用戶可能會在評論中粘貼一個很長的 URL,我們就應該通過 overflow-wrap 屬性來處理。

5. CSS Flex 中的最小內容大小

另一個導致溢出的原因是 Flexbox 中的最小內容大小。這是什么意思?

默認情況下,Flex 項目不會縮小到其最小內容大小(最長單詞或固定大小元素的長度)以下。要更改此設置,需要設置 min-width 或者 min-height 屬性。

為了解決這個問題,我們可以使用visible之外的 overflow 值,或者在flex項上設置min-width:0

.card__name {
min-width: 0;
overflow-wrap: break-word;
}

6. CSS Grid 中的最小內容大小

與 Flexbox一樣,CSS grid 布局的也有最小內容大小的概念。但是,解決方案有所不同。

假設有一個帶有側邊的 wrapper 和一個帶有 CSS grid 的 section。

.wrapper {
display: grid;
grid-template-columns: 248px 1fr;
grid-gap: 40px;
}

此外,在 section 有一個滾動部分,這里使用了flexbox。

.section {
display: flex;
gap: 1rem;
overflow-x: auto;
}

這里沒有添加flex-wrap,因為希望 flex 項目位于同一行。然而,這并沒有起作用,卻導致了水平溢出。

我們需要使用 minmax() 來代替 1fr,這樣,主元素的最小內容大小就不會是 auto 了。

.wrapper {
display: grid;
grid-template-columns: 248px minmax(0, 1fr);
grid-gap: 40px;
}

7. 負邊距

位于屏幕外的元素可能會導致溢出。通常,這是因為元素的外邊距為負。在下面的示例中,我們有一個帶有負邊距的元素,文檔的語言是英語(即從左到右)。

.element {
position: absolute;
right: -100px;
}

有趣的是,當元素定位在左側時,就沒有發生溢出。這是為什么?

根據 CSS 規范:

UAs 必須在框的 block-start 和 inline-start 側剪切滾動容器的可滾動溢出區域。

對于英文文檔,inline-start 側是左側,因此位于左側屏幕外的任何元素都將被剪裁,因此不會溢出。

如果確實需要將元素放置在屏幕外,請確保將 overflow: hidden 應用于父元素以避免任何溢出。

8. 沒有設置 max-width 的圖片

如果你不提前處理大圖像,就可能會看到溢出。確保在所有圖像上設置 max-width: 100%

img {
max-width: 100%;
}

9. 視口單位

使用 100vw 有一個缺點,那就是當滾動條可見時,它可能會導致溢出。在macOS上,100vw 不會導致水平滾動。

在 Windows 上,默認情況下滾動條總是可見的,因此會發生溢出。

這是因為當值為100vw時,用戶不知道瀏覽器垂直滾動條的寬度。因此,寬度將等于100vw加上滾動條的寬度。然而,對此 CSS 并沒有解決方案去修復它。

我們可以使用 JavaScript 來計算視口的寬度,不包括滾動條。

function handleFullWidthSizing() {
const scrollbarWidth = window.innerWidth - document.body.clientWidth

document.querySelector('myElement').style.width = `calc(100vw - ${scrollbarWidth}px)`
}

原文:https://www.smashingmagazine.com/2021/04/css-overflow-issues/

作者:Ahmad Shadeed

譯者:CUGGZ

責任編輯:武曉燕 來源: 前端充電寶
相關推薦

2021-03-06 10:25:19

內存Java代碼

2017-01-13 09:54:52

2021-02-03 15:12:08

java內存溢出

2024-07-18 10:12:04

2024-03-19 14:14:27

線程開發

2015-12-28 11:41:57

JVM內存區域內存溢出

2018-07-09 15:11:14

Java逃逸JVM

2020-12-16 09:47:01

JavaScript箭頭函數開發

2016-08-31 15:50:50

PythonThreadLocal變量

2010-06-28 10:12:01

PHP匿名函數

2023-10-08 08:53:36

數據庫MySQL算法

2014-06-23 10:42:56

iOS開發UIScrollVie

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2013-11-05 13:29:04

JavaScriptreplace

2013-06-20 10:25:56

2025-03-06 12:44:45

2025-03-07 11:26:52

2022-04-26 08:32:36

CSS前端
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日本久久精 | 一级特黄a大片 | 亚洲国产欧美国产综合一区 | 91在线视频免费观看 | 国产精久久久久久久 | 精品久久久久一区二区国产 | 在线免费观看a级片 | 久久亚洲春色中文字幕久久久 | 国产日产欧产精品精品推荐蛮挑 | 在线观看av网站 | 国产综合区 | 免费国产视频 | 成人福利网站 | 欧美日产国产成人免费图片 | 中文字幕在线人 | 国产高清视频在线观看 | 91精品久久久久久久久久入口 | av一区二区三区四区 | 日韩欧美中文 | 91久久视频 | 亚洲欧美日韩精品久久亚洲区 | 日本一区视频在线观看 | 一区二区三区成人 | 久久久青草婷婷精品综合日韩 | 国产第二页| 午夜精品一区二区三区在线观看 | 亚洲精品免费视频 | 亚洲精品电影网在线观看 | 久久草在线视频 | 五月槐花香 | 亚洲在线中文字幕 | 国产一区二区电影网 | 99久久精品免费看国产小宝寻花 | 亚洲国产免费 | 狠狠色香婷婷久久亚洲精品 | 亚洲成色777777在线观看影院 | 国产精品美女久久久久aⅴ国产馆 | 国产精品九九九 | 中文字幕视频在线 | 91在线观看视频 | av天天干 |