CSSã®scroll-startããããã£ã䜿ãããŠã§ãéçºã«ãããåæã¹ã¯ããŒã«äœçœ®ãæ£ç¢ºã«å¶åŸ¡ããæ¹æ³ã解説ããŠãŒã¶ãŒäœéšãšã¢ã¯ã»ã·ããªãã£ãåäžãããŸãã
CSS scroll-startïŒåæã¹ã¯ããŒã«äœçœ®ã®å¶åŸ¡ããã¹ã¿ãŒãã
çŸä»£ã®ãŠã§ãéçºã«ãããŠãé åçã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšãçã¿åºãããšã¯ãäºçްãªããã匷åãªãã£ããŒã«ã«ããã£ãŠããŸããèŠéããããã¡ãªãã£ããŒã«ã®äžã€ããããŒãžãèŠçŽ ã®åæã¹ã¯ããŒã«äœçœ®ã§ãããŠãŒã¶ãŒãäžèªç¶ãªãžã£ã³ããåããã«ããã¬ã€ã¢ãŠããªãã«ãç®çã®å Žæã«æ£ç¢ºã«ãã©ãçããããã«ããããšã¯ããŠã§ããµã€ããšã®ã€ã³ã¿ã©ã¯ã·ã§ã³ãå€§å¹ ã«åäžãããŸããCSSã®scroll-starté¢é£ããããã£ãå ·äœçã«ã¯ `scroll-padding`ã`scroll-margin`ããããŠïŒéæ¥çã«ïŒã¹ã¯ããŒã«ã¢ã³ã«ãŒã¯ããŠãŒã¶ãŒã€ã³ã¿ãŒãã§ãŒã¹ãã¶ã€ã³ã®ãã®éèŠãªåŽé¢ããã¹ã¿ãŒããããã®ããŒã«ãæäŸããŸãããã®å æ¬çãªã¬ã€ãã§ã¯ããããã®ããããã£ããã®çšéããããŠå®è£ ã®ãã¹ããã©ã¯ãã£ã¹ã«ã€ããŠæ¢æ±ããŸãã
åæã¹ã¯ããŒã«äœçœ®å¶åŸ¡ã®å¿ èŠæ§ãçè§£ãã
é·ãèšäºã®ç¹å®ã®ã»ã¯ã·ã§ã³ã«ç§»åããããã®ãªã³ã¯ãã¯ãªãã¯ãããšæ³åããŠã¿ãŠãã ãããé¢é£ããèŠåºãã«çŽæ¥ç§»åãã代ããã«ãåºå®ããããŒã«é ããŠæ°æ®µèœäžã«è¡šç€ºãããããæã®éäžã«åçªã«é 眮ããããããŸãããã®ãã©ã¹ãã¬ãŒã·ã§ã³ã®ããŸãäœéšã¯ãåæã¹ã¯ããŒã«äœçœ®ãå¶åŸ¡ããããšã®éèŠæ§ãæµ®ã圫ãã«ããŸãã
åæã¹ã¯ããŒã«äœçœ®ã®å¶åŸ¡ãéèŠãšãªãäžè¬çãªã·ããªãªã«ã¯ã以äžã®ãããªãã®ããããŸãïŒ
- ã¢ã³ã«ãŒãªã³ã¯/ç®æ¬¡ïŒ ã¢ã³ã«ãŒãªã³ã¯ãä»ããŠããã¥ã¡ã³ãå ã®ç¹å®ã®ã»ã¯ã·ã§ã³ã«ç§»åããã
- ã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒïŒ ã«ãŒãé·ç§»äžã«ã¹ã¯ããŒã«äœçœ®ã®äžè²«æ§ãç¶æããã
- ã³ã³ãã³ãã®èªã¿èŸŒã¿ïŒ ã³ã³ãã³ããåçã«èªã¿èŸŒãŸããéã«ã¹ã ãŒãºãªé·ç§»ã確ä¿ããäºæããªããžã£ã³ããé²ãã
- ã¢ã¯ã»ã·ããªãã£ïŒ é害ãæã€ãŠãŒã¶ãŒãç¹ã«æ¯æŽæè¡ã䜿çšããŠãããŠãŒã¶ãŒã«ãäºæž¬å¯èœã§ä¿¡é Œæ§ã®é«ãäœéšãæäŸããã
- ã¢ãã€ã«ããã²ãŒã·ã§ã³ïŒ ã¡ãã¥ãŒæäœåŸã«ã³ã³ãã³ããæ£ãã衚瀺ããåºå®ããã²ãŒã·ã§ã³ããŒãšã®éãªããé¿ããã
äž»èŠãªCSSããããã£ïŒ`scroll-padding` ãš `scroll-margin`
ã¹ã¯ããŒã«ã¹ããããã¿ãŒã²ããäœçœ®ã®èŠèŠçãªãªãã»ããã管çããäž»èŠãªCSSããããã£ã¯ã`scroll-padding` ãš `scroll-margin` ã®2ã€ã§ãããããã®éããçè§£ããããšããæãŸãã广ãåŸãããã®éµãšãªããŸãã
`scroll-padding`
`scroll-padding` ã¯ãæé©ãªã¹ã¯ããŒã«äœçœ®ãèšç®ããããã«äœ¿çšããããã¹ã¯ããŒã«ããŒãïŒã¹ã¯ããŒã«ã³ã³ããã®å¯èŠé åïŒããã®å åŽã®ãªãã»ãããå®çŸ©ããŸããããã¯ãã¹ã¯ããŒã«å¯èœãªé åã®*å åŽ*ã«ããã£ã³ã°ã远å ãããããªãã®ã ãšèããŠãã ããããã®ããã£ã³ã°ã¯ã`scroll-snap` ãªã©ã®æ©èœã䜿çšãããããã©ã°ã¡ã³ãèå¥åïŒã¢ã³ã«ãŒãªã³ã¯ïŒã«ç§»åãããããéã«ãèŠçŽ ããã¥ãŒã«ã¹ã¯ããŒã«ãããæ¹æ³ã«åœ±é¿ãäžããŸãã
æ§æïŒ
`scroll-padding:
- `<length>`: ããã£ã³ã°ãåºå®é·ïŒäŸïŒ`20px`, `1em`ïŒã§æå®ããŸãã
- `<percentage>`: ããã£ã³ã°ãã¹ã¯ããŒã«ã³ã³ããã®ãµã€ãºã®ããŒã»ã³ããŒãžïŒäŸïŒ`10%`ïŒã§æå®ããŸãã
- `auto`: ãã©ãŠã¶ãããã£ã³ã°ã決å®ããŸããå€ãã®å Žå `0px` ãšåçã§ãã
å蟺ã®ããã£ã³ã°ãåå¥ã«èšå®ããããšãã§ããŸãïŒ
- `scroll-padding-top`
- `scroll-padding-right`
- `scroll-padding-bottom`
- `scroll-padding-left`
äŸïŒ
é«ã60pxã®åºå®ããããŒããããŠã§ããµã€ããèããŠã¿ãŸãããã`scroll-padding` ããªããšãã»ã¯ã·ã§ã³ãžã®ã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ãããšãã»ã¯ã·ã§ã³ã®èŠåºããããããŒã«é ããŠããŸãå¯èœæ§ãé«ããªããŸãã
```css /* ã«ãŒãèŠçŽ ãŸãã¯ç¹å®ã®ã¹ã¯ããŒã«å¯èœãªã³ã³ããã«é©çš */ :root { scroll-padding-top: 60px; } ```ãã®CSSã«ãŒã«ã¯ãã¹ã¯ããŒã«ããŒãã®äžéšã«60pxã®ããã£ã³ã°ã远å ããŸãããŠãŒã¶ãŒãã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ãããšããã©ãŠã¶ã¯ã¿ãŒã²ããèŠçŽ ããã¥ãŒã«ã¹ã¯ããŒã«ãããã®èŠçŽ ãã¹ã¯ããŒã«ããŒãã®äžéšãã60pxäžã«é 眮ãããããã«ããŸããããã«ãããåºå®ããããŒãèŠçŽ ãèŠã£ãŠããŸãã®ã广çã«é²ããŸãã
`scroll-margin`
`scroll-margin` ã¯ãèŠçŽ ã衚瀺é åã«ç§»åãããéã®æé©ãªã¹ã¯ããŒã«äœçœ®ãèšç®ããããã«äœ¿çšãããããã®èŠçŽ ã®ããŒãžã³ãå®çŸ©ããŸããããã¯ãã¿ãŒã²ããèŠçŽ èªäœã®*å€åŽ*ã«ããŒãžã³ã远å ãããããªãã®ã ãšèããŠãã ãããèŠçŽ ãã¹ã¯ããŒã«ããŒãã®ç«¯ã«è¿ãããªãããã«ããããã®ãªãã»ãããšããŠæ©èœããŸãã`scroll-margin` ã¯ãèŠçŽ ã«ã¹ã¯ããŒã«ããåŸã«ãã®åšå²ã«ããããã®ã¹ããŒã¹ã確ä¿ãããå Žåã«ç¹ã«äŸ¿å©ã§ãã
æ§æïŒ
`scroll-margin: <length> | <percentage>`
- `<length>`: ããŒãžã³ãåºå®é·ïŒäŸïŒ`20px`, `1em`ïŒã§æå®ããŸãã
- `<percentage>`: ããŒãžã³ãé¢é£ããæ¬¡å ã®ããŒã»ã³ããŒãžïŒäŸïŒèŠçŽ ã®å¹ ãŸãã¯é«ãã® `10%`ïŒã§æå®ããŸãã
`scroll-padding` ãšåæ§ã«ãå蟺ã®ããŒãžã³ãåå¥ã«å®çŸ©ã§ããŸãïŒ
- `scroll-margin-top`
- `scroll-margin-right`
- `scroll-margin-bottom`
- `scroll-margin-left`
äŸïŒ
ã¹ã¯ããŒã«å¯èœãªã³ã³ããå ã«äžé£ã®ã«ãŒãããããšããŸããããã²ãŒã·ã§ã³ãã¿ã³ãªã©ã䜿ã£ãŠã«ãŒãããã¥ãŒã«ã¹ã¯ããŒã«ããããšãã«ããããã³ã³ããã®ç«¯ã«ãŽã£ãããšãã£ã€ããªãããã«ããããšããŸãã
```css .card { scroll-margin: 10px; } ```ãã®CSSã«ãŒã«ã¯ãåã«ãŒãã®å šèŸºã«10pxã®ããŒãžã³ãé©çšããŸããã«ãŒãããã¥ãŒã«è¡šç€ºããããšããã©ãŠã¶ã¯ã«ãŒãã®ç«¯ãšã¹ã¯ããŒã«ã³ã³ããã®ç«¯ãšã®éã«å°ãªããšã10pxã®ééãããããšãä¿èšŒããŸãã
äž»ãªéãã®èŠçŽ
æç¢ºã«åºå¥ããããã«ïŒ
- `scroll-padding` ã¯*ã¹ã¯ããŒã«ã³ã³ãã*ã«é©çšãããã³ã³ãã*å *ã®å©çšå¯èœãªã¹ã¯ããŒã«ã¹ããŒã¹ã«åœ±é¿ãäžããŸãã
- `scroll-margin` ã¯ãã¥ãŒã«ã¹ã¯ããŒã«ããã*ã¿ãŒã²ããèŠçŽ *ã«é©çšããããã®èŠçŽ ã®*åšå²*ã«ã¹ããŒã¹ã远å ããŸãã
ã¹ã¯ããŒã«ã¢ã³ã«ãŒïŒäºæããªãã¹ã¯ããŒã«ãžã£ã³ãã®é²æ¢
ã¹ã¯ããŒã«ã¢ã³ã«ãŒã¯ãçŸåšã®ã¹ã¯ããŒã«äœçœ®ããäžã®ã³ã³ãã³ãã倿Žããããšãã«ãèªåçã«ã¹ã¯ããŒã«äœçœ®ã調æŽãããã©ãŠã¶ã®æ©èœã§ããããã«ãããã³ã³ãã³ããåçã«è¿œå ãŸãã¯åé€ãããå ŽåïŒäŸïŒç»åã®èªã¿èŸŒã¿ãåºåã®è¡šç€ºãã³ã³ãã³ãã®å±é/æãããã¿ïŒã«ããŠãŒã¶ãŒãããŒãžäžã®çŸåšå°ãèŠå€±ãã®ãé²ããŸãã
`scroll-padding` ã `scroll-margin` ã«ãã£ãŠçŽæ¥å¶åŸ¡ãããããã§ã¯ãããŸããããã¹ã¯ããŒã«ã¢ã³ã«ãŒããããã®ããããã£ãšã©ã®ããã«çžäºäœçšããããçè§£ããããšãäžå¯æ¬ ã§ããå€ãã®å Žåã`scroll-padding` ãš `scroll-margin` ãé©åã«äœ¿çšããããšã§ãã¹ã¯ããŒã«ã¢ã³ã«ãŒã®å¿ èŠæ§ã*æžãã*ããå°ãªããšããã®åäœãããäºæž¬å¯èœã«ããããšãã§ããŸãã
ããã©ã«ãã§ã¯ãã»ãšãã©ã®ã¢ãã³ãã©ãŠã¶ã¯ã¹ã¯ããŒã«ã¢ã³ã«ãŒãæå¹ã«ããŠããŸãããã ãã`overflow-anchor` CSSããããã£ã䜿çšããŠå¶åŸ¡ããããšãã§ããŸãã
æ§æïŒ
`overflow-anchor: auto | none`
- `auto`: ã¹ã¯ããŒã«ã¢ã³ã«ãŒãæå¹ã«ããŸãïŒããã©ã«ãïŒã
- `none`: ã¹ã¯ããŒã«ã¢ã³ã«ãŒãç¡å¹ã«ããŸããæ³šæããŠäœ¿çšããŠãã ããïŒã¹ã¯ããŒã«ã¢ã³ã«ãŒãç¡å¹ã«ãããšãã³ã³ãã³ããåçã«å€æŽãããå Žåã«ãŠãŒã¶ãŒäœéšãæãªãããå¯èœæ§ããããŸãã
äŸïŒ
éå°ãªã¹ã¯ããŒã«ã¢ã³ã«ãŒããã¶ã€ã³ã®åŠšãã«ãªã£ãŠããåé¡ãçºçããŠããå Žåã¯ãéžæçã«ç¡å¹ã«ããããšãæ€èšãããããããŸãããã*ãŠãŒã¶ãŒäœéšã培åºçã«ãã¹ãããåŸã«ã®ã¿*è¡ã£ãŠãã ããã
```css .my-element { overflow-anchor: none; /* ãã®ç¹å®ã®èŠçŽ ã®ã¹ã¯ããŒã«ã¢ã³ã«ãŒãç¡å¹å */ } ```å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
`scroll-padding` ãš `scroll-margin` ã广çã«äœ¿çšããæ¹æ³ã説æããããã«ãããã€ãã®å®è·µçãªã·ããªãªãèŠãŠã¿ãŸãããã
1. åºå®ããããŒãšã¢ã³ã«ãŒãªã³ã¯
ããã¯æãäžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ããããŒãžã®äžéšã«åºå®ããããŒãããããŠãŒã¶ãŒãã¢ã³ã«ãŒãªã³ã¯ãã¯ãªãã¯ãããšãã«ãã¿ãŒã²ããã»ã¯ã·ã§ã³ãããããŒã®åŸãã«é ããªãããã«ãããå Žåã§ãã
```htmlç§ã®ãŠã§ããµã€ã
ã»ã¯ã·ã§ã³1
ã»ã¯ã·ã§ã³1ã®ã³ã³ãã³ã...
ã»ã¯ã·ã§ã³2
ã»ã¯ã·ã§ã³2ã®ã³ã³ãã³ã...
ã»ã¯ã·ã§ã³3
ã»ã¯ã·ã§ã³3ã®ã³ã³ãã³ã...
解説ïŒ
- `scroll-padding-top: 80px;` ã `:root`ïŒãŸã㯠`html` ã `body` èŠçŽ ïŒã«é©çšãããŸããããã«ããããã©ãŠã¶ããã©ã°ã¡ã³ãèå¥åã«ã¹ã¯ããŒã«ããéã«ãåºå®ããããŒã®é«ããèæ ®ããããã«ãªããŸãã
- åã»ã¯ã·ã§ã³å ã«ã¢ã³ã«ãŒ `span` ã远å ãããã¹ã¯ããŒã«éå§ã®ã¿ãŒã²ãããã€ã³ããäœæãããŸãã
- åãªã³ã¯ã®ã¹ã¯ããŒã«äœçœ®ãæ£ãããªãã»ããããããã«ã`anchor` ã¹ã¿ã€ã«ã远å ãããŠããŸãã
2. ã¹ããŒã¹ä»ãã®ã¹ã¯ããŒã«å¯èœãªã«ãŒãã«ã«ãŒã»ã«
ã«ãŒããæ°Žå¹³ã«ã¹ã¯ããŒã«ããã«ã«ãŒã»ã«ãæ³åããŠãã ãããåã«ãŒãããã¥ãŒã«ã¹ã¯ããŒã«ããããšãã«ããã®åšãã«ããããã®ã¹ããŒã¹ã確ä¿ããããšããŸãã
```html解説ïŒ
`scroll-margin: 10px;` ãå `.card` èŠçŽ ã«é©çšãããŸããããã«ãããã«ãŒããïŒäŸãã°JavaScriptã§ããã°ã©ã çã«ã¹ã¯ããŒã«ãããŠïŒãã¥ãŒã«è¡šç€ºãããéã«ãã«ãŒãã®å šèŸºã«10pxã®ããŒãžã³ã確ä¿ãããŸãã
3. ã«ãŒãé·ç§»ã䌎ãã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒ
SPAã§ã¯ãã¹ã ãŒãºãªãŠãŒã¶ãŒäœéšã®ããã«ãã«ãŒãé·ç§»ããŸããã§äžè²«ããã¹ã¯ããŒã«äœçœ®ãç¶æããããšãéèŠã§ãã`scroll-padding` ã䜿çšããŠãã«ãŒã倿ŽåŸã«ã³ã³ãã³ããåºå®ããããŒãããã²ãŒã·ã§ã³ããŒã«é ãããªãããã«ããããšãã§ããŸãã
ãã®äŸã¯JavaScriptã«å€§ããäŸåããŸãããCSSãéèŠãªåœ¹å²ãæãããŸãã
```javascript // æ¶ç©ºã®SPAãã¬ãŒã ã¯ãŒã¯ã䜿çšããäŸ // ã«ãŒãã倿ŽããããšãïŒ function onRouteChange() { // ã¹ã¯ããŒã«äœçœ®ãäžéšïŒãŸãã¯ç¹å®ã®äœçœ®ïŒã«ãªã»ãã window.scrollTo(0, 0); // äžéšã«ã¹ã¯ããŒã« // ãªãã·ã§ã³ã§ããã©ãŠã¶ãèªåçã«ã¹ã¯ããŒã«äœçœ®ã埩å ããã®ãé²ãããã« // history.scrollRestoration = 'manual' ãäœ¿çš } // CSSã§ã«ãŒãèŠçŽ ã«scroll-paddingãæ£ããé©çšãããŠããããšã確èªïŒ :root { scroll-padding-top: 50px; /* ããããŒã®é«ãã«å¿ããŠèª¿æŽ */ } ```解説ïŒ
- `onRouteChange` 颿°ã¯ããŠãŒã¶ãŒãSPAå ã®æ°ããã«ãŒãã«ç§»åãããã³ã«ããªã¬ãŒãããŸãã
- `window.scrollTo(0, 0)` ã¯ãã¹ã¯ããŒã«äœçœ®ãããŒãžã®æäžéšã«ãªã»ããããŸããããã¯ãåã«ãŒãã§äžè²«ããéå§ç¹ã確ä¿ããããã«éèŠã§ãã
- `:root { scroll-padding-top: 50px; }` ã¯ãã¹ã¯ããŒã«äœçœ®ããªã»ãããããåŸãã³ã³ãã³ããåºå®ããããŒã®äžã«æ£ããé 眮ãããããšãä¿èšŒããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšèæ ®äºé
`scroll-padding` ãš `scroll-margin` ã䜿çšããéã«çæãã¹ããã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãïŒ
- æ£ããèŠçŽ ã«é©çšããïŒ `scroll-padding` ã¯*ã¹ã¯ããŒã«ã³ã³ãã*ã«ã`scroll-margin` ã¯*ã¿ãŒã²ããèŠçŽ *ã«é©çšãããããšãå¿ããªãã§ãã ãããééã£ãèŠçŽ ã«é©çšããŠã广ã¯ãããŸããã
- åçãªã³ã³ãã³ããèæ ®ããïŒ åºå®ããããŒãããã²ãŒã·ã§ã³ããŒã®é«ããåçã«å€åããå ŽåïŒäŸïŒã¬ã¹ãã³ã·ããã¶ã€ã³ããŠãŒã¶ãŒèšå®ã«ããïŒãJavaScriptã䜿çšã㊠`scroll-padding` ã®å€ãæŽæ°ããå¿ èŠããããããããŸããã
- ã¢ã¯ã»ã·ããªãã£ïŒ `scroll-padding` ã `scroll-margin` ã®äœ¿çšãã¢ã¯ã»ã·ããªãã£ã«æªåœ±é¿ãäžããªãããã«ããŠãã ãããæ¯æŽæè¡ã§ãã¹ããããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠã¹ã¯ããŒã«åäœãäºæž¬å¯èœã§äœ¿ãããããã®ã§ããããšã確èªããŠãã ããã
- CSS倿°ã䜿çšããïŒ ä¿å®æ§ãé«ããããã«ãCSS倿°ã䜿çšã㊠`scroll-padding` ãš `scroll-margin` ã®å€ãå®çŸ©ããããšãæ€èšããŠãã ãããããã«ãããã¹ã¿ã€ã«ã·ãŒãå šäœã§å€ãæŽæ°ãããããªããŸãã
- 培åºçã«ãã¹ãããïŒ ããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§å®è£ ããã¹ãããäžè²«ããåäœã確èªããŠãã ãããç¹ã«ãã¹ã ãŒãºã¹ã¯ããŒã«ãã¹ã¯ããŒã«ã¢ã³ã«ãŒãªã©ã®æ©èœãšã®çžäºäœçšã«æ³šæãæã£ãŠãã ããã
- ããã©ãŒãã³ã¹ïŒ `scroll-padding` ãš `scroll-margin` ã¯äžè¬çã«ããã©ãŒãã³ã¹ãé«ãã§ãããã¹ã¯ããŒã«ã¢ã³ã«ãŒã®é床ã®äœ¿çšïŒãŸãã¯äžé©åãªç¡å¹åïŒã¯ãããã©ãŒãã³ã¹ã®åé¡ã«ã€ãªããããšããããŸãããŠã§ããµã€ãã®ããã©ãŒãã³ã¹ãç£èŠããæœåšçãªåé¡ãç¹å®ããŠå¯ŸåŠããŠãã ããã
åºæ¬ãè¶ ããŠïŒé«åºŠãªãã¯ããã¯
`scroll-padding` ãš `scroll-snap` ã®äœ¿çš
`scroll-snap` ã䜿çšãããšããŠãŒã¶ãŒãã¹ã¯ããŒã«ãçµäºãããšãã«ã¹ã¯ããŒã«ã³ã³ããããã¹ãããããã¹ãç¹ãå®çŸ©ã§ããŸãã`scroll-padding` ãšçµã¿åãããããšã§ãããæŽç·ŽãããèŠèŠçã«é åçãªã¹ã¯ããŒã«ã¹ãããäœéšãäœæã§ããŸãã
```css .scroll-container { overflow-x: auto; scroll-snap-type: x mandatory; scroll-padding-left: 20px; /* äŸïŒå·ŠåŽã«ããã£ã³ã°ã远å */ } .scroll-item { scroll-snap-align: start; } ```ãã®äŸã§ã¯ã`scroll-padding-left` ããæåã® `scroll-item` ãã³ã³ããã®å·Šç«¯ã«ãŽã£ãããšã¹ãããããªãããã«ããŸãã
`scroll-margin` ãš Intersection Observer API ã®çµã¿åãã
Intersection Observer API ã䜿çšãããšãèŠçŽ ããã¥ãŒããŒãã«åºå ¥ãããã¿ã€ãã³ã°ãæ€åºã§ããŸãããã®APIã `scroll-margin` ãšçµã¿åãããŠäœ¿çšããããšã§ãèŠçŽ ã®å¯èŠæ§ã«åºã¥ããŠã¹ã¯ããŒã«åäœãåçã«èª¿æŽã§ããŸãã
```javascript const observer = new IntersectionObserver((entries) => { entries.forEach(entry => { if (entry.isIntersecting) { // èŠçŽ ã衚瀺ãããŠãããšãäœãããã console.log('èŠçŽ ã衚瀺ãããŸããïŒ'); } else { // èŠçŽ ã衚瀺ãããŠããªããšãã«äœãããã } }); }); const element = document.querySelector('.my-element'); observer.observe(element); ```ãã®äŸã¯ `scroll-margin` ãçŽæ¥å€æŽãããã®ã§ã¯ãããŸããããIntersection Observer ã䜿çšããŠããã¥ãŒããŒãã«å¯ŸããèŠçŽ ã®äœçœ®ã«åºã¥ããŠç°ãªã `scroll-margin` å€ãé©çšããã¯ã©ã¹ãåçã«è¿œå ãŸãã¯åé€ããããšãã§ããŸãã
çµè«ïŒããè¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ããã®ã¹ã¯ããŒã«äœçœ®ã®ç¿åŸ
`scroll-padding` ãš `scroll-margin` ã¯ãã¹ã¯ããŒã«ã¢ã³ã«ãŒã®çè§£ãšãšãã«ãåæã¹ã¯ããŒã«äœçœ®ãå¶åŸ¡ããããæŽç·ŽããããŠãŒã¶ãŒãã¬ã³ããªãŒãªãŠã§ãäœéšãåµé ããããã®åŒ·åãªããŒã«ã§ãããããã®ããããã£ã®ãã¥ã¢ã³ã¹ãçè§£ããææ ®æ·±ãé©çšããããšã§ããŠã§ããµã€ãã®ãŠãŒã¶ããªãã£ãšã¢ã¯ã»ã·ããªãã£ãå€§å¹ ã«åäžããããŠãŒã¶ãŒãåžžã«ç®çã®å Žæã«æ£ç¢ºã«ãã©ãçããããã«ããããšãã§ããŸãã
培åºçãªãã¹ããåçã³ã³ãã³ãã®èæ ®ããããŠã¢ã¯ã»ã·ããªãã£ã®åªå ãå¿ããã«è¡ããããã€ã¹ããã©ãŠã¶ããŸãã¯æ¯æŽæè¡ã®å¥œã¿ã«é¢ãããããã¹ãŠã®ãŠãŒã¶ãŒã«è¯å®çãªäœéšãæäŸããŠãã ããã
ãããªãåŠç¿ãªãœãŒã¹
- MDN Web Docs: scroll-padding
- MDN Web Docs: scroll-margin
- CSS-Tricks: scroll-padding
- CSS-Tricks: scroll-margin