æ»å¨å¸éçåºæ¬æ¦å¿µ
CSS æ»å¨å¸é模åä¸ç屿§å¯ä»¥å®ä¹ç¨æ·å¨æ»å¨ææ¡£æ¶æ»å¨å¸éå°æå®ç¹çæ¹å¼ã
æ»å¨å¸éç¹æ§å¯ä»¥å®ä¹å¸éä½ç½®ãæ»å¨å®¹å¨çæ»å¨å£å¨å®ææ»å¨æä½åå¯è½ä¼å卿âå¸éå°âè¿äºä½ç½®ã
CSS æ»å¨å¸éçå ³é®å±æ§
å¨å®ä¹æ»å¨å¸éåï¼éè¦å¨æ»å¨å®¹å¨ä¸å¯ç¨æ»å¨ãéè¿ç¡®ä¿æ»å¨å®¹å¨æå®äºå°ºå¯¸ä¸å¯ç¨ overflow å¯å¯ç¨æ»å¨ã
ç¶åå¯ä»¥å¨æ»å¨å®¹å¨ä¸ä½¿ç¨ä¸åå ³é®å±æ§å®ä¹æ»å¨å¸éï¼
scroll-snap-typeââ使ç¨è¿ä¸ªå±æ§å¯å®ä¹æ»å¨å¼è§å£æ¯å¦å¯è¢«å¸éãå¿ é¡»è¿æ¯å¯éå¸é以åå¸éåºå½åºç°å¨åªäºè½´ä¸ãscroll-snap-alignââè¿ä¸ªå±æ§è®¾ç½®å¨æ»å¨å®¹å¨çæ¯ä¸ªåå ç´ ä¸ï¼å¯ç¨äºå®ä¹æ¯ä¸ªåå ç´ çå¸éä½ç½®ææ²¡æå¸éä½ç½®ãscroll-snap-stopââè¿ä¸ªå±æ§ç¡®ä¿å¨æ»å¨ä¸å¸éå°è䏿¯è¶è¿æä¸ªåå ç´ ãscroll-marginââè¿ä¸ªå±æ§å¯ä»¥è®¾ç½®å¨å¨æ»å¨ä¸å¯ä»¥è¢«å¸éçåå ç´ ä¸ï¼ç¨äºå¨æå®çåä¸å建å¸éå¤è¾¹è·ãscroll-paddingââè¿ä¸ªå±æ§å¯ä»¥è®¾ç½®å¨æ»å¨å®¹å¨ä¸ï¼ç¨äºå建å¸éåç§»ã
ä¸åç¤ºä¾æ¼ç¤ºäºç± scroll-snap-type æå®ä¹ç纵轴æ¹åçæ»å¨å¸éãæ¤å¤ï¼scroll-snap-align 被åºç¨äº <section> å
ç´ çææåå
ç´ ï¼å³å®äºæ¯ä¸ªåå
ç´ çæ»å¨æ¢ç¹ã
<article class="scroller">
<section>
<h2>Section one</h2>
</section>
<section>
<h2>Section two</h2>
</section>
<section>
<h2>Section three</h2>
</section>
</article>
.scroller {
height: 300px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.scroller section {
scroll-snap-align: start;
}
ä½¿ç¨ scroll-snap-type
scroll-snap-type 屿§éè¦ç¥éå¨åªä¸ªæ¹å䏿æ»å¨å¸éãæ¹åå¯ä»¥æ¯ xãy æè
é»è¾å¯¹åºå
³ç³» blockãinlineãè¿å¯ä»¥ç¨å
³é®å both ä½¿ä¸¤ä¸ªè½´é½ææ»å¨å¸éã
ä½ è¿å¯ä»¥ä¼ å
¥å
³é®å mandatory æ proximityãå
³é®å mandatory åè¯æµè§å¨æ 论æ»å¨å°åªä¸ªä½ç½®ï¼å
容é½å¿
é¡»å¸éå°ç¹å®çç¹ï¼èå
³é®å proximity æå³çå
容å¯ä»¥å¸éè䏿¯å¿
é¡»å¸éå°ç¹ä¸ã
ä½¿ç¨ mandatory å¯ä»¥åé é常ä¸è´çæ»å¨ææââä½ ç¥éæµè§å¨æ»ä¼å¸éå°æ¯ä¸ªæå®çç¹ãè¿æå³çæææ¡ç¸ä¿¡å¨æ»å¨ç»ææ¶ï¼ä½ 叿åºç°å¨å±å¹é¡¶é¨çä¸è¥¿å°±ä¼åºç°å¨é£éãç¶èï¼å¦æå
容æ¯é¢æ³ç大ï¼é£ä¹ä¼äº§çé®é¢ââç¨æ·å¯è½ä¼æ²®ä¸§å°åç°ä»ä»¬æ°¸è¿æ æ³æ»å¨å¹¶æ¥çå
容ä¸ç¹å®çæå¤ãå æ¤ï¼ä½¿ç¨ mandatory åºå½ä»ç»èèï¼èä¸åªç¨äºä½ ç¥éå±å¹ä¸ææ»å¨å¼åºåå¨ä»»ä½æ¶å»æå¤å°å
容çæ
å½¢ã
夿³¨ï¼å¦ææä¸ªåå
ç´ çå
容伿º¢åºç¶å®¹å¨ï¼é£ä¹è¯·å¡å¿
ä¸è¦ä½¿ç¨ mandatoryï¼è¿æ¯å ä¸ºç¨æ·ä¼æ æ³ææº¢åºå
容æ»å
¥è§éã
proximity å¼åªå¨åå
ç´ é è¿æä¸ªä½ç½®æ¶æå®å¸éå°è¿ä¸ªä½ç½®ï¼å
·ä½çè·ç¦»ç±æµè§å¨å³å®ã
å¨ä¸å示ä¾ä¸ï¼å¯ä»¥å¨ mandatory å proximity ä¹é´æ¹ååå¼ï¼çç对æ»å¨äº§ççææã
<article class="scroller">
<section>
<h2>Section one</h2>
<p>
Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus
winter purslane kale. Celery potato scallion desert raisin horseradish
spinach carrot soko.
</p>
</section>
<section>
<h2>Section two</h2>
<p>
Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus
winter purslane kale. Celery potato scallion desert raisin horseradish
spinach carrot soko.
</p>
</section>
<section>
<h2>Section three</h2>
<p>
Turnip greens yarrow ricebean rutabaga endive cauliflower sea lettuce
kohlrabi amaranth water spinach avocado daikon napa cabbage asparagus
winter purslane kale. Celery potato scallion desert raisin horseradish
spinach carrot soko.
</p>
</section>
</article>
.scroller {
height: 300px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.scroller section {
scroll-snap-align: start;
}
å¨ä¸è¿°ç¤ºä¾ä¸çæ»å¨å®¹å¨ä¸åæ¶è®¾ç½®äº height: 300px; å overflow-y: scroll;ã
妿å å®¹æ²¡ææº¢åºå®¹å¨ï¼é£ä¹æ²¡æç¨äºæ»å¨çå 容ã
ä½¿ç¨ scroll-snap-align
scroll-snap-align 屿§çææå¼å
æ¬ startãendãcenter å noneãè¿äºå¼ç¨äºæ 示å
容åºå½å¸éå°æ»å¨å®¹å¨ä¸çåªä¸ªç¹ãå¨ä¸å示ä¾ä¸ï¼å¯ä»¥æ¹å scroll-snap-align çå¼ï¼ççæ»å¨è¡ä¸ºå¦ä½ååã
.scroller {
height: 200px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.scroller section {
scroll-snap-align: start;
}
妿 scroll-snap-type æ¯ mandatory èä¸æä¸ªåå
ç´ ä¸ç scroll-snap-align 被设置为 none æè
æªè¢«è®¾ç½®ï¼æ¤æ¶é»è®¤ä¸º noneï¼ï¼é£ä¹ç¨æ·ä¼æ æ³æè¿ä¸ªå
ç´ æ»å
¥è§éã
ä½¿ç¨ scroll-padding
å¦æä½ å¨ä½¿ç¨ start æ end æ¶ä¸æ³å°å
容æ°å¥½å¸éå°æ»å¨å®¹å¨çè¾¹ä¸ï¼æè
å¨ä½¿ç¨ center æ¶æ³è®©å¸éä½ç½®ç¥å¾®å离ä¸å¿ï¼è¯·ä½¿ç¨ scroll-padding 屿§æè
çä»·çå
¨ç§°å±æ§æ·»å ä¸ç¹å
è¾¹è·ã
å¨ä¸å示ä¾ä¸ï¼scroll-padding 被设置为 40pxãå½å
容å¸éå°ç¬¬äºå第ä¸èçå¼å¤´æ¶ï¼æ»å¨ä¼åå¨ç¦»ç« èå¼å¤´ 40 åç´ è¿çä½ç½®ãè¯è¯æ¹å scroll-padding çå¼ï¼ççè·ç¦»å¦ä½ååã
<article class="scroller">
<section>
<h2>Section one</h2>
</section>
<section>
<h2>Section two</h2>
</section>
<section>
<h2>Section three</h2>
</section>
</article>
.scroller {
height: 300px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
scroll-padding: 50px;
}
.scroller section {
scroll-snap-align: start;
}
妿æåå¯¼èªæ è¿ç§å¯è½é®çæ»å¨å
容çåºå®å
ç´ ï¼é£ä¹è¿ä¸ªå±æ§å¯ä»¥æ´¾ä¸ç¨åºãä½¿ç¨ scroll-padding å¯ä»¥ä¸ºåºå®å
ç´ çåºç©ºé´ãä¾å¦å¨ä¸å示ä¾ä¸ï¼å½å
å®¹å¨ <h1> å
ç´ ä¸æ¹æ»å¨æ¶ï¼<h1> å¨å±å¹ä¸ä¿æä¸å¨ãå¦ææ²¡æå
è¾¹è·ï¼é£ä¹å¨åçå¸éæ¶ï¼æ é¢ä¼é®çä¸äºå
容ã
.scroller h1 {
position: sticky;
top: 0;
min-height: 40px;
background-color: #000;
color: #fff;
margin: 0;
padding: 0;
}
.scroller h2 {
margin: 0;
padding: 0;
}
.scroller {
height: 300px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
scroll-padding: 50px;
}
.scroller section {
scroll-snap-align: start;
}
ä½¿ç¨ scroll-margin
å¨åå
ç´ ä¸å¯ä»¥è®¾ç½® scroll-margin 屿§æè
å
¨ç§°æ»å¨å¤è¾¹è·å¼ï¼ç¨äºå®ä¹æå®çåçå¤è¾¹è·ãè¿å¯ä»¥è®©ä¸åçåå
ç´ æä¸å大å°ç空é´ï¼èä¸å¯ä»¥åç¶å
ç´ ä¸ç scroll-padding ä¸èµ·ä½¿ç¨ãå¨ä¸å示ä¾ä¸å°è¯ä¸ä¸ã
.scroller {
height: 300px;
overflow-y: scroll;
scroll-snap-type: y mandatory;
}
.scroller section {
scroll-snap-align: start;
scroll-margin: 40px;
}
ä½¿ç¨ scroll-snap-stop
ä½¿ç¨ scroll-snap-stop 屿§å¯ä»¥æå®æ»å¨æ¯å¦å¿
é¡»å¸éå°æå®çå¸éç¹ãå¨ä¸è¿°ç¤ºä¾ä¸ï¼è¿æå³çæ»å¨ç©¶ç«æ¯ä¼å卿¯ä¸ªç« èçå¼å¤´è¿æ¯å¯ä»¥è·³è¿ç« èã
è¿ä¸ªå±æ§å¯ä»¥ç¡®ä¿ç¨æ·çè§æ»å¨åºåçæ¯ä¸ªç« èèä¸ä¼ä¸å°å¿æ»è¿ç« èãç¶èè¿ä¸ªè®¾ç½®ä¼é»æ¢ç¨æ·å¿«éæ»å¨å°æ³è¦çå 容ï¼å èå¯¹ç¨æ·ä½éªäº§çè´é¢å½±åã
åè§
- CSS æ»å¨å¸é模å
- ç¨ CSS æ»å¨å¸éæç¡®æ§å¶æ»å¨ï¼è½½äº web.devï¼2021 å¹´ï¼
- å®ç¨ CSS æ»å¨å¸éï¼è½½äº CSS-Tricksï¼2020 å¹´ï¼
- CSS æ»å¨å¸éï¼è½½äº 12 Days of Webï¼2019 å¹´ï¼
- æ»å¨å¸é示ä¾ï¼è½½äº Codepenï¼