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

現代 CSS 解決方案:Modern CSS Reset

開發 前端
到今天,我們更多聽到現代 CSS 解決方案一詞。它除去頁面樣式最基本的呈現外,同時也關注用戶體驗與可訪問性。這也可能是過去,我們在寫 CSS 的時候比較容易忽略的環節。

在早年間(其實也不是很早),寫過幾篇關于 CSS Reset 的文章 - reset.css 知多少[1]。

詳細描述了當時業界比較常用的,兩個 CSS reset 方案:reset.css 與 Normalize.css。

以更為推薦的 Normalize.css 為例,它的核心思想是:

  1. 統一了一些元素在所有瀏覽器下的表現,保護有用的瀏覽器默認樣式而不是完全清零它們,讓它們在各個瀏覽器下表現一致。
  2. 為大部分元素提供一般化的表現。
  3. 修復了一些瀏覽器的 Bug ,并且讓它們在所有瀏覽器下保持一致性。
  4. 通過一些巧妙的細節提升了 CSS 的可用性。
  5. 提供了詳盡的文檔讓開發者知道,不同元素在不同瀏覽器下的渲染規則。

如今,Normalize 已經出到了第八版 -- normalize.css V8.0.1[2],而隨之而變的是瀏覽器市場環境的巨大變化。

IE 已經逐漸退出歷史舞臺,處理各個瀏覽器之間巨大差異、不同兼容性問題的日子像是一去不復返了。雖然今天不同廠商在對待標準仍然存在差異,一些細節上仍舊有出入,但是我們已經不需要再像過去般大肆地對瀏覽器默認樣式進行重置。

到今天,我們更多聽到現代 CSS 解決方案一詞。它除去頁面樣式最基本的呈現外,同時也關注用戶體驗與可訪問性。這也可能是過去,我們在寫 CSS 的時候比較容易忽略的環節。

Modern CSS Reset

我最近比較喜歡的一個 CSS Reset 方案,源自于 -- Modern-CSS-Reset[3]。

它的核心觀點是:

  1. 重置合理的默認值。
  2. 關注用戶體驗。
  3. 關注可訪問性。

整個 Reset 的源碼比較簡單:

/* Box sizing rules */
*,
*::before,
*::after {
box-sizing: border-box;
}
/* Remove default margin */
body,
h1,
h2,
h3,
h4,
p,
figure,
blockquote,
dl,
dd {
margin: 0;
}
/* Remove list styles on ul, ol elements with a list role, which suggests default styling will be removed */
ul[role='list'],
ol[role='list'] {
list-style: none;
}
/* Set core root defaults */
html:focus-within {
scroll-behavior: smooth;
}
/* Set core body defaults */
body {
min-height: 100vh;
text-rendering: optimizeSpeed;
line-height: 1.5;
}
/* A elements that don't have a class get default styles */
a:not([class]) {
text-decoration-skip-ink: auto;
}
/* Make images easier to work with */
img,
picture {
max-width: 100%;
display: block;
}
/* Inherit fonts for inputs and buttons */
input,
button,
textarea,
select {
font: inherit;
}
/* Remove all animations, transitions and smooth scroll for people that prefer not to see them */
@media (prefers-reduced-motion: reduce) {
html:focus-within {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

其中一些比較有意思的點,單看盒子模型:

*,
*::before,
*::after {
box-sizing: border-box;
}

Normalize.css 是不推薦這么做的,大部分元素的 box-sizing 其實都是 content-box,但是,對于實際開發,全部元素都設置為 border-box 其實是更便于操作的一種方式。

再看看在用戶體驗及可訪問性方面的一些做法:

html:focus-within {
scroll-behavior: smooth;
}

scroll-behavior: smooth 意為平滑滾動,當然這里是設置給了 html:focus-within 偽類,而不是直接給 html 賦予平滑滾動,這樣做的目的是只對使用鍵盤 tab 鍵切換焦點頁面時,讓頁面進行平滑滾動切換,帶來更好的使用體驗。

如果我們設置了如下 CSS:

html {
scroll-behavior: smooth;
}

可能會起到一起副作用,譬如,當我們在頁面查找元素時候(使用 Ctrl + F、或者 Mac 的 Commond + F),這段 CSS 代碼可能會嚴重延緩我們的查找速度:

再看看這段代碼:

@media (prefers-reduced-motion: reduce) {
html:focus-within {
scroll-behavior: auto;
}
*,
*::before,
*::after {
animation-duration: 0.01ms !important;
animation-iteration-count: 1 !important;
transition-duration: 0.01ms !important;
scroll-behavior: auto !important;
}
}

我曾經在 使用 CSS prefers-* 規范,提升網站的可訪問性與健壯性[4] 介紹過 prefers-reduced-motion。

prefers-reduced-motion 規則查詢用于減弱動畫效果,除了默認規則,只有一種語法取值 prefers-reduced-motion: reduce,開啟了該規則后,相當于告訴用戶代理,希望他看到的頁面,可以刪除或替換掉一些會讓部分視覺運動障礙者不適的動畫類型。

規范原文:Indicates that user has notified the system that they prefer an interface that removes or replaces the types of motion-based animation that trigger discomfort for those with vestibular motion disorders。

vestibular motion disorders 是一種視覺運動障礙患者,翻譯出來是前庭運動障礙,是一種會導致眩暈的一類病癥,譬如一個動畫一秒閃爍多次,就會導致患者的不適。

使用方法,還是上面那段代碼:

.ele {
animation: aniName 5s infinite linear;
}
@media (prefers-reduced-motion: reduce) {
.ele {
animation: none;
}
}

如果我們有一些類似這樣的動畫:

在用戶開啟了 prefers-reduced-motion: reduce 時,就應該把這個動畫去掉。

而上述 Reset 中的那段代碼,正是用于當用戶開啟對應選項后,減弱頁面上的所有動畫效果。屬于對可訪問性的考慮。

結合實際環境

當然,結合實際環境,目前國內整體不太注重可訪問性相關的內容。

而且,許多業務根本無法拋棄一些老舊瀏覽器,仍然需要兼容 IE 系列。

因此,對于現階段的 Reset 方案,可以靈活搭配:

  1. 如果你的業務場景仍然需要考慮一些老舊瀏覽器,依舊需要兼容 IE 系列,Normalize.css 的大部分功能都還是非常好的選擇。
  2. 如果你的業務場景只專注于 Chrome 或者是 Chromium 內核,Normalize.css 內的許多內容其實可能是一些實際中根本不會遇到或者用上的兼容適配,可以進行必要的精簡。
  3. 如果你的業務是全球化,面向的用戶不僅僅在國內,你應該開始考慮更多可訪問性相關的內容,上述的 Modern CSS Reset 可以借鑒一下。

因此,更應該的情況是,根據實際的業務需要,吸收多個業界比較常見/知名的 Reset 方案形成自己業務適用的。

這里再羅列一些常見及現代 CSS Reset 方案:

你會看到,其實大家都號稱自己是現代 CSS Reset 解決方案,但其實其內部做的 Reset 工作很多是我們根本用不上的。有人喜歡小而美,有人喜歡大而全,實際使用的時候需要具體取舍,魔改合并成適合自己的才是最好的。

最后

好了,本文到此結束,希望對你有幫助 :)

參考資料

[1]reset.css 知多少: https://github.com/chokcoco/iCSS/issues/5。

[2]normalize.css V8.0.1: https://github.com/necolas/normalize.css。

[3]Modern-CSS-Reset: https://github.com/hankchizljaw/modern-css-reset。

[4]使用 CSS prefers-* 規范,提升網站的可訪問性與健壯性: https://github.com/chokcoco/iCSS/issues/118。

[5]normalize.css: https://github.com/necolas/normalize.css。

[6]sanitize.css: https://github.com/csstools/sanitize.css。

[7]reseter.css: https://github.com/resetercss/reseter.css。

[8]Modern-CSS-Reset: https://github.com/hankchizljaw/modern-css-reset。

[9]Github -- iCSS: https://github.com/chokcoco/iCSS。

責任編輯:姜華 來源: iCSS前端趣聞
相關推薦

2022-04-19 06:27:13

CSS數學函數calc

2023-09-11 07:11:04

CSSNesting

2022-12-22 08:34:22

CSS不規則圖形

2022-04-28 07:00:09

min()max()clamp()

2010-09-06 14:46:25

CSSXHTML

2010-09-16 09:26:57

CSS display

2010-08-31 16:09:04

DIV+CSS

2010-09-06 13:51:38

CSS失效CSS

2010-08-26 14:00:28

CSSmargin

2010-09-01 10:49:57

CSS水平居中垂直居中

2009-08-03 18:06:28

JS性能問題

2017-10-11 16:55:32

CSSWebpackLighthouse

2010-09-07 09:08:03

DIV彈出層

2010-08-26 10:56:16

CSStextarea

2010-09-09 16:47:49

CSS paddingFirefox

2023-12-09 09:44:07

MetaFacebook開源

2010-08-26 12:59:29

marginCSS

2010-08-23 14:06:57

DIV+CSS

2010-09-07 13:24:18

CSS

2010-09-02 15:18:42

CSSASP.NET
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91福利在线观看 | 亚洲免费精品 | 国产va| 中文字幕一二三区 | 国产日产精品一区二区三区四区 | 97国产爽爽爽久久久 | 久久亚洲天堂 | 亚洲资源在线 | 国产在线1 | 国产成人精品一区二区三区四区 | 91看片| av永久免费 | 黄色国产区 | 国产在线麻豆精品入口 | 天堂中文在线观看 | 在线免费观看视频你懂的 | 色站综合| 欧美日韩精品综合 | 四虎永久在线精品免费一区二 | 免费观看成人鲁鲁鲁鲁鲁视频 | 国产精品久久久久久久久久免费看 | 九九热这里 | 亚洲精品一区二区冲田杏梨 | 日韩在线观看 | 热99精品视频 | 99精品久久久 | 亚洲国产成人一区二区 | 在线色网 | 精品视频久久久 | 国产人成在线观看 | 日本精a在线观看 | 亚洲欧美日韩中文字幕一区二区三区 | 日本在线视频一区二区 | 国产福利视频 | 亚洲成人福利视频 | 天天操天天操 | 草久免费视频 | 国产极品车模吞精高潮呻吟 | 夜夜精品视频 | 国产精品日韩一区二区 | av超碰 |