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

使用 CSS Snap 優(yōu)化滾動,提升用戶體驗

開發(fā) 前端
你是否經(jīng)常希望有一個CSS特性可以輕松創(chuàng)建一個可滾動的容器? CSS scroll snap 可以做到這一點(diǎn)。在早期的前端開發(fā)中,我依靠 JS 插件來創(chuàng)建滑塊組件。有時,我們需要一種簡單的方法來快速將元素制作成可滾動的容器。現(xiàn)在,多虧了 CSSS scroll snap ,我們可以簡單做到這一點(diǎn)。

 [[375256]]

你是否經(jīng)常希望有一個CSS特性可以輕松創(chuàng)建一個可滾動的容器? CSS scroll snap 可以做到這一點(diǎn)。在早期的前端開發(fā)中,我依靠 JS 插件來創(chuàng)建滑塊組件。有時,我們需要一種簡單的方法來快速將元素制作成可滾動的容器。現(xiàn)在,多虧了 CSSS scroll snap ,我們可以簡單做到這一點(diǎn)。

為什么要使用 CSS Scroll Snap

隨著移動設(shè)備和平板設(shè)備的興起,我們需要設(shè)計和構(gòu)建可以輕觸的組件。以圖庫組件為例。用戶可以輕松地向左或向右滑動以查看更多圖像,而不是分層結(jié)構(gòu)。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

根據(jù)CSS規(guī)范,為開發(fā)者提供良好控制的滾動體驗是引入 CSS scroll snap的主要原因之一。它增強(qiáng)了用戶體驗,并使其更容易實現(xiàn)滾動體驗。

滾動容器的基礎(chǔ)知識

要創(chuàng)建一個滾動容器,以下是我們需要做的基本內(nèi)容

  • 使用 overflow
  • 一種將項目彼此相鄰顯示(內(nèi)聯(lián))的方法

舉個例子:

  1. <div class="section"
  2.   <div class="section__item">Item 1</div> 
  3.   <div class="section__item">Item 2</div> 
  4.   <div class="section__item">Item 3</div> 
  5.   <div class="section__item">Item 4</div> 
  6.   <div class="section__item">Item 5</div> 
  7. </div> 

  1. .section { 
  2.   white-space: nowrap; 
  3.   overflow-x: auto; 

 多年來,使用white-space: nowrap是一種流行的CSS解決方案,用于強(qiáng)制元素保持內(nèi)聯(lián)。不過,現(xiàn)在我們基本都使用 Flexbox :

  1. .section { 
  2.   display: flex; 
  3.   overflow-x: auto; 

 「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

這是創(chuàng)建滾動容器的基本方法。然而,這還不夠,這不是一個可用的滾動容器。

滾動容器有什么問題

問題是,與滑動相比,它們并不能提供良好的體驗。在觸摸屏上滑動手勢的主要好處是,我們可以用一根手指水平或垂直滾動。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

實際上需要將每個項目移動到它自己的位置。這并不是滑動,這是一種非常糟糕的體驗,通過使用CSS scroll snap,我們可以通過簡單地定義snap points來解決這個問題,它將使用戶更容易地水平或垂直滾動。

接著,我們來看看如何使用CSS scroll snap。

CSS Scroll Snap 簡介

要在容器上使用scroll snap,它的子項目應(yīng)該內(nèi)聯(lián)顯示,這可以用我上面解釋的方法之一來實現(xiàn)。我選擇CSS flexbox:

  1. <div class="section"
  2.   <div class="section__item">Item 1</div> 
  3.   <div class="section__item">Item 2</div> 
  4.   <div class="section__item">Item 3</div> 
  5.   <div class="section__item">Item 4</div> 
  6.   <div class="section__item">Item 5</div> 
  7. </div> 
  1. .section { 
  2.   display: flex; 
  3.   overflow-x: auto; 

看了這個,我們需要添加另外兩個屬性來讓scroll snap工作。我們應(yīng)該在哪里添加它們?

首先,我們需要將scroll-snap-type添加到滾動容器中。在我們的示例中,是.section元素。然后,我們需要向子項(即.section__item)添加scrolln-snap-align。

  1. .section { 
  2.   display: flex; 
  3.   overflow-x: auto; 
  4.   scroll-snap-type: x mandatory; 
  5.  
  6. .section__item { 
  7.   scroll-snap-align: start; 

 這里你可能想知道x mandatory和start是干嘛用的。不用擔(dān)心,這是本文的核心,下面會對其進(jìn)行深入的講解。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

這一刻,我對CSS scroll snap非常興奮,它使?jié)L動更加自然。現(xiàn)在,讓我們深入研究scroll snap 屬性。

Scroll Snap Type

根據(jù)CSS規(guī)范,**scroll-snap-type ** 屬性定義在滾動容器中的一個臨時點(diǎn)(snap point)如何被嚴(yán)格的執(zhí)行。

滾動容器的軸線

滾動容器的軸表示滾動方向,它可以是水平或垂直的,x值表示水平滾動,而y表示垂直滾動。

  1. /* 水平*/ 
  2. .section { 
  3.   display: flex; 
  4.   overflow-x: auto; 
  5.   scroll-snap-type: x; 
  6.  
  7. /* 垂直*/ 
  8. .section { 
  9.   height: 250px; 
  10.   overflow-y: auto; 
  11.   scroll-snap-type: y; 

 「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

Scroll Snap 容器的嚴(yán)格性

我們不僅可以定義Scroll Snap的方向,還可以定義它的嚴(yán)格程度。這可以通過使用scroll-snap-type值的andatory | proximity來實現(xiàn)。

  • mandatory:如果它當(dāng)前沒有被滾動,這個滾動容器的可視視圖將靜止在臨時點(diǎn)上。意思是當(dāng)滾動動作結(jié)束,如果可能,它會臨時在那個點(diǎn)上。如果內(nèi)容被添加、移動、刪除或者重置大小,滾動偏移將被調(diào)整為保持靜止在臨時點(diǎn)上。

mandatory關(guān)鍵字意味著瀏覽器必須捕捉到每個滾動點(diǎn)。假設(shè)roll-snap-align屬性有一個start值。這意味著,滾動必須對齊到滾動容器的開始處。

在下圖中,每次用戶向右滾動時,瀏覽器都會將項目捕捉到容器的開頭。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗
  1. .section { 
  2.   display: flex; 
  3.   overflow-x: auto; 
  4.   scroll-snap-type: x mandatory; 
  5.  
  6. .section__item { 
  7.   scroll-snap-align: start; 

  「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

試著在下面的演示中向右滾動。如果你使用的是手機(jī)或平板電腦,可以向右移動滾動條或使用觸摸。應(yīng)該能感受到每個項目是如何從其容器的開始抓取的。

演示地址:https://codepen.io/shadeed/pen/RwGaXKB

但是,如果該值是proximity,則瀏覽器將完成這項工作,它可能會吸附到定義的點(diǎn)(在我們的例子中start)。注意,proximity 是默認(rèn)值,但是為了清晰起見,我們這里還是聲明一下它。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗
  1. .section { 
  2.   display: flex; 
  3.   overflow-x: auto; 
  4.   /* proximity is the default value, I added it for clarity reasons */ 
  5.   scroll-snap-type: x proximity; 

 ã€Œå¹²è´§ã€ä½¿ç”¨ CSS  Snap 优化滚动,提升用户体验

Scroll Snapping Alignment

滾動容器的子項目需要一個對齊點(diǎn),它們可以對齊到這個點(diǎn)。我們可以用start, center或end。

為了更容易理解,下面是它的工作原理。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

假設(shè)我們在滾動容器上有一塊磁鐵,這將有助于我們控制捕捉點(diǎn)。如果scroll-snap-type是垂直的,則對齊對齊將是垂直的。參見下圖:

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

滾動容器的 start

子項目將吸附到其水平滾動容器的開始處。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

滾動容器的 center

子項目將吸附到其滾動容器的中心。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

滾動容器的 end

子項將對齊到其滾動容器的末尾。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

使用 Scroll-Snap-Stop

有時,我們可能需要一種方法來防止用戶在滾動時意外跳過一些重要的項。如果用戶滾動太快,就有可能跳過某些項。

  1. .section__item { 
  2.   scroll-snap-align: start; 
  3.   scroll-snap-stop: normal; 

 無法動太快可能會跳過三個或四個項目,如下所示:

「干货」使用 CSS  Snap 优化滚动,提升用户体验

scroll-snap-stop的默認(rèn)值是normal,要強(qiáng)制滾動捕捉到每個可能的點(diǎn),應(yīng)使用always。

  1. .section__item { 
  2.   scroll-snap-align: start; 
  3.   scroll-snap-stop: always; 

 這樣,用戶可以一次滾動到一個捕捉點(diǎn),這種方式有助于避免跳過重要內(nèi)容。想象每個停止點(diǎn)都有一個停止標(biāo)志,參見下面的動畫:

演示地址:https://codepen.io/shadeed/pen/JjRbXza

Scroll Snap Padding

scroll-padding設(shè)置所有側(cè)面的滾動邊距,類似于padding屬性的工作方式。在下圖中,滾動容器的左側(cè)有50px的內(nèi)邊距。結(jié)果,子元素將從左側(cè)邊緣捕捉到50px

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

直滾動也是如此。參見下面的示例:

  1. .section { 
  2.   overflow-y: auto; 
  3.   scroll-snap-type: y mandatory; 
  4.   scroll-padding: 50px 0 0 0; 

 「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

Scroll Snap Margin

scroll-margin設(shè)置滾動容器的子項之間的間距。在向元素添加邊距時,滾動將根據(jù)邊距對齊。參見下圖:

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

.item-2具有scroll-margin-left: 20px。結(jié)果,滾動容器將在該項目之前對齊到20px。請注意,當(dāng)用戶再次向右滾動時,.item-3會捕捉到滾動容器的開頭,這意味著僅具有邊距的元素將受到影響。

CSS Scroll Snap 用例

圖片列表

scroll snap 的一個很好的用例是圖像列表,使用 scroll snap 提供更好的滾動體驗。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗
  1. .images-list { 
  2.   display: flex; 
  3.   overflow-x: auto; 
  4.   scroll-snap-type: x; 
  5.   gap: 1rem; 
  6.   -webkit-overflow-scrolling: touch; /* Important for iOS devices */ 
  7.  
  8. .images-list img { 
  9.   scroll-snap-align: start; 

 注意,我使用x作為scroll-snap-type的值。

事例地址:https://codepen.io/shadeed/pen/jOMrxYO

好友清單

滾動捕捉的另一個很好的用例是朋友列表。下面的示例摘自Facebook(一個真實的示例)。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗
  1. .list { 
  2.   display: flex; 
  3.   overflow-x: auto; 
  4.   scroll-snap-type: x mandatory; 
  5.   gap: 1rem; 
  6.   scroll-padding: 48px; 
  7.   padding-bottom: 32px; 
  8.   -webkit-overflow-scrolling: touch; 
  9.  
  10. .list-item { 
  11.   scroll-snap-align: start; 

 請注意,滾動容器的padding-bottom:32px。這樣做的目的是提供額外的空間,以便box-shadow可以按預(yù)期顯示。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

頭像列表

對于此用例,我感興趣的是將center作為scroll-snap-align的值。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗
  1. .list { 
  2.   display: flex; 
  3.   overflow-x: auto; 
  4.   scroll-snap-type: x mandatory; 
  5.   -webkit-overflow-scrolling: touch; 
  6.  
  7. .list-item { 
  8.   scroll-snap-align: center; 

 這在一個角色列表中是很有用的,角色在滾動容器的中間是很重要的

「干货」使用 CSS  Snap 优化滚动,提升用户体验

演示地址:https://codepen.io/shadeed/pen/KKgMJWa

全屏展示

使用scroll snap也可以用于垂直滾動,全屏展示就是一個很好的例子。

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗
  1. <main> 
  2.   <section class="section section-1"></section
  3.   <section class="section section-2"></section
  4.   <section class="section section-3"></section
  5.   <section class="section section-4"></section
  6.   <section class="section section-5"></section
  7. </main> 

  1. main { 
  2.   height: 100vh; 
  3.   overflow-y: auto; 
  4.   scroll-snap-type: y mandatory; 
  5.   -webkit-overflow-scrolling: touch; 
  6.  
  7. .section { 
  8.   height: 100vh; 
  9.   scroll-snap-align: start; 

 「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

塊和內(nèi)聯(lián)

值得一提的是,對于scroll-snap-type,可以使用inline和block邏輯值。參見下面的示例

  1. main { 
  2.   scroll-snap-type: inline mandatory; 

 可讀性

使用 CSS scroll snap時,請確保可訪問性。這是滾動對齊的一種不好用法,它阻止用戶自由滾動內(nèi)容以讀取內(nèi)容。

  1. .wrapper { 
  2.   scroll-snap-type: y mandatory; 
  3.  
  4. h2 { 
  5.   scroll-snap-align: start; 

 「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

「干貨」使用 CSS  Snap 優(yōu)化滾動,提升用戶體驗

請務(wù)必不要這樣做。

總結(jié)

這是我剛剛學(xué)到的一個新的CSS特性的長篇文章。我希望它對你有用。

 

責(zé)任編輯:姜華 來源: 今日頭條
相關(guān)推薦

2010-03-18 20:19:16

2020-02-03 13:50:17

Windows 10Windows技巧

2021-07-05 07:49:14

CSS自定義滾動條CSS技巧

2015-07-22 17:24:18

交互設(shè)計提升體驗

2015-08-06 09:55:52

用戶體驗

2011-06-30 17:13:17

SEO用戶體驗

2011-11-17 09:24:27

HTML 5

2015-08-21 17:35:26

2015-08-07 10:11:47

Web用戶設(shè)計要點(diǎn)

2013-06-28 15:35:41

華為eSpace統(tǒng)一通信華為

2013-02-26 11:00:26

華為SQIMBB

2022-03-25 10:23:40

用戶體驗APP優(yōu)化

2024-10-22 08:00:00

2024-04-17 08:23:50

WebView技巧優(yōu)化

2023-03-15 21:38:43

短視頻服務(wù)器

2023-09-11 16:54:17

谷歌開發(fā)

2016-05-27 10:25:47

F5聽云

2009-03-24 15:18:39

智能化應(yīng)用交付行為分析

2010-08-26 20:54:15

互聯(lián)網(wǎng)身份認(rèn)證天威誠信
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 天天干,夜夜操 | 精品国产乱码久久久久久蜜柚 | 久久久久久国产一区二区三区 | 日韩视频中文字幕 | 色久在线 | 野狼在线社区2017入口 | 国产一区二区三区免费观看视频 | 久久手机视频 | 欧美日韩不卡 | 天天综合操 | 久久福利电影 | 夜夜爽99久久国产综合精品女不卡 | 国产午夜精品久久久久免费视高清 | 久久久久久国产免费视网址 | 日本中文字幕日韩精品免费 | 久久神马 | 国产aⅴ爽av久久久久久久 | 亚洲一区久久 | 手机av免费在线 | 99久久久99久久国产片鸭王 | 精品一区二区视频 | 中文字幕久久精品 | 国产专区在线 | 精品www| av在线天天 | 超碰av人人 | 欧美一级二级三级视频 | 午夜精品久久久 | 亚洲精品乱码久久久久久黑人 | 日韩欧美国产一区二区三区 | 国产探花在线精品一区二区 | 精品久久久久久久久久久久 | 欧美精品乱码久久久久久按摩 | 成人精品视频在线 | 日韩精品久久久久久 | 在线国产视频观看 | 精品日韩在线 | 久久久精品影院 | 成人久久 | 国产精品一区二区在线 | 国产精品美女久久久久aⅴ国产馆 |