CSSã®overscroll-behaviorã«é¢ããå æ¬çãªã¬ã€ããã¹ã¯ããŒã«é£éããšãã§ã¯ããé«åºŠãªãã¯ããã¯ãç¶²çŸ ãããã©ãŠã¶ãããã€ã¹éã§ããã¹ã ãŒãºã§å¶åŸ¡ããããŠãŒã¶ãŒäœéšãå®çŸããæ¹æ³ã解説ããŸãã
CSSã®overscroll-behaviorããã¹ã¿ãŒããïŒã¹ã¯ããŒã«é£éã®å¶åŸ¡
overscroll-behavior
CSSããããã£ã¯ããŠãŒã¶ãŒãã¹ã¯ããŒã«é åã®å¢çã«éãããšãã®åäœãå¶åŸ¡ããããã®ãWebéçºè
ã«ãšã£ãŠåŒ·åãªããŒã«ã§ããåã«ãããŠã³ã¹ããããããã©ãŠã¶ã¬ãã«ã®ã¢ã¯ã·ã§ã³ïŒã¢ãã€ã«ã§ã®ããŒãžæŽæ°ãªã©ïŒãããªã¬ãŒããããã代ããã«ãoverscroll-behavior
ã䜿çšããŠåäœãã«ã¹ã¿ãã€ãºããããã¹ã ãŒãºã§çŽæçãªãŠãŒã¶ãŒäœéšãäœæã§ããŸããããã¯ç¹ã«ã¢ãã€ã«ããã€ã¹ãã¿ãã察å¿ã¹ã¯ãªãŒã³ã§åœ¹ç«ã¡ãŸããããã¹ã¯ãããã¢ããªã±ãŒã·ã§ã³ã«ãæŽç·Žãããå±€ãå ããŸãã
ã¹ã¯ããŒã«é£éã®çè§£
overscroll-behavior
ã®è©³çްã«é£ã³èŸŒãåã«ãã¹ã¯ããŒã«é£éã®æŠå¿µãçè§£ããããšãéèŠã§ããã¹ã¯ããŒã«é£éãšã¯ãããã¹ã¯ããŒã«ã³ã³ãããã¹ã¯ããŒã«å¯èœé åã®çµããã«éãããšãã«ãã¹ã¯ããŒã«ã€ãã³ããã©ã®ããã«åŠçããããã®ããã»ã¹ãæããŸããç¹å¥ãªèšå®ããªãå Žåãã¹ã¯ããŒã«ã€ãã³ãã¯DOMããªãŒå
ã®æ¬¡ã®ã¹ã¯ããŒã«å¯èœãªç¥å
èŠçŽ ãžãšãé£éãããæçµçã«ã¯ã«ãŒãèŠçŽ ïŒ<html>
ãŸãã¯<body>
èŠçŽ ïŒã«å°éããå¯èœæ§ããããŸãã
äŸãã°ãé·ããªã¹ããå«ãã¢ãŒãã«ãŠã£ã³ããŠãæ³åããŠã¿ãŠãã ããããŠãŒã¶ãŒãã¢ãŒãã«å
ã®ãªã¹ãã®æäžéšãŸã§ã¹ã¯ããŒã«ãããšãããã©ã«ãã®åäœã§ã¯ã¢ãŒãã«ã®èåŸã«ããã³ã³ãã³ããã¹ã¯ããŒã«ãå§ããŸãããããã¯æãŸãããªãããšãå€ãã§ããoverscroll-behavior
ã䜿çšãããšããã®ã¹ã¯ããŒã«é£éãé²ããã¹ã¯ããŒã«ãã¢ãŒãã«å
ã«çããããšãã§ããŸãã
overscroll-behavior
ããããã£ïŒæ§æãšå€
overscroll-behavior
ããããã£ã¯ãäž»ã«3ã€ã®å€ãåãå
¥ããŸãïŒ
auto
: ããã©ã«ãå€ã§ããã¹ã¯ããŒã«é£éã¯éåžžéãçºçããŸããèŠçŽ ã®ã¹ã¯ããŒã«å¢çã«éãããšããã©ãŠã¶ã¯ã¹ã¯ããŒã«ã€ãã³ããDOMããªãŒã®äžäœã«äŒæãããŸããcontain
: 芪èŠçŽ ãžã®ã¹ã¯ããŒã«é£éãé²ããŸããå¢çã«éãããšããã©ãŠã¶ã¯ãã©ãŠã¶åºæã®ãªãŒããŒã¹ã¯ããŒã«å¹æïŒiOSãAndroidã§ã®ããŠã³ã¹ãªã©ïŒãå®è¡ããã¹ã¯ããŒã«ã®äŒæã忢ããŸããnone
:contain
ã«äŒŒãŠããŸããããã©ãŠã¶åºæã®ãªãŒããŒã¹ã¯ããŒã«å¹æ*ã*é²ããŸããã€ãŸããå¢çã«éããŠãäœãèµ·ãããŸããããããæ éã«äœ¿çšããªããšãã¹ã¯ããŒã«äœéšãããã¡ãªãæããããå¯èœæ§ãããããæ³šæãå¿ èŠã§ãã
overscroll-behavior
ããããã£ã«ã¯ãx軞ãšy軞ã®åäœãåå¥ã«å¶åŸ¡ããããã®ã·ã§ãŒããã³ãããããŸãïŒ
overscroll-behavior-x
overscroll-behavior-y
äŸãã°ãoverscroll-behavior: contain auto;
ã¯ãx軞ã§ã®ã¹ã¯ããŒã«é£éãé²ãã€ã€ãy軞ã§ã¯èš±å¯ããŸããåæ§ã«ãoverscroll-behavior-y: none;
ã¯ãy軞ã§ã®ã¿ãã©ãŠã¶ã®ãªãŒããŒã¹ã¯ããŒã«å¹æãšã¹ã¯ããŒã«é£éãé²ããŸãã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
äŸ1ïŒã¢ãŒãã«ãŠã£ã³ããŠ
åè¿°ã®éããã¢ãŒãã«ãŠã£ã³ããŠã¯overscroll-behavior
ã®äžè¬çãªãŠãŒã¹ã±ãŒã¹ã§ãããŠãŒã¶ãŒãã¢ãŒãã«ã®ã³ã³ãã³ãã®çµããã«éãããšãã«ãã¢ãŒãã«ã®èåŸã«ããã³ã³ãã³ããã¹ã¯ããŒã«ããã®ãé²ãã«ã¯ãã¢ãŒãã«ã®ã³ã³ããã«overscroll-behavior: contain;
ãé©çšããŸãã
.modal-container {
position: fixed;
top: 0;
left: 0;
width: 100%;
height: 100%;
overflow: auto; /* Or 'scroll' if you always want a scrollbar */
overscroll-behavior: contain;
}
äŸ2ïŒãã£ããã€ã³ã¿ãŒãã§ãŒã¹
ãã£ããã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒããã£ãããŠã£ã³ããŠããã«ããŠã³ãããšãã«ããŒãžãæŽæ°ãããã®ãé²ãããå ŽåããããŸãããã£ããã³ã³ããã«overscroll-behavior-y: contain;
ãé©çšããããšã§ãããå®çŸã§ããŸãã
.chat-window {
height: 400px;
overflow-y: auto;
overscroll-behavior-y: contain;
}
äŸ3ïŒå°å³ãšã€ã³ã¿ã©ã¯ãã£ãã³ã³ãã³ã
å°å³ïŒGoogleããããLeafletãªã©ïŒããã®ä»ã®ã€ã³ã¿ã©ã¯ãã£ããªã³ã³ãã³ããåã蟌ãéããŠãŒã¶ãŒãå°å³ãæäœãããšãã«åšå²ã®ããŒãžãã¹ã¯ããŒã«ããããšã¯éåžžæãŸãããããŸãããããã§ã¯overscroll-behavior: none;
ãèšå®ãããšäŸ¿å©ã§ãããããŠã³ã¹å¹æãç¡å¹ã«ãªãããããŠãŒã¶ãŒäœéšãæ
éã«èæ
®ããå¿
èŠããããŸãã
.map-container {
width: 100%;
height: 500px;
overscroll-behavior: none;
}
<body>
èŠçŽ ã«overscroll-behavior: none;
ãèšå®ããããšã¯ãäžè¬çã«*æšå¥šãããŸãã*ãããã«ãããç¹ã«ã¢ãã€ã«ããã€ã¹ã§ããã«ããŠã³ã«ããããŒãžæŽæ°æ©èœãå®å
šã«å€±ããããŠãŒã¶ãŒäœéšãèããæãªãããå¯èœæ§ããããŸãã
äŸ4ïŒã«ã¹ã¿ã ãªãŒããŒã¹ã¯ããŒã«å¹æã®å®è£
overscroll-behavior: contain;
ã¯ãã©ãŠã¶ã®ããã©ã«ã广ãæäŸããŸãããå®å
šã«ã«ã¹ã¿ã ãªãªãŒããŒã¹ã¯ããŒã«äœéšãäœæãããå Žåãããã§ãããããã®ããã«ã¯ãéåžžoverscroll-behavior: none;
ã䜿çšããŠããã©ã«ãã®ãã©ãŠã¶ã®åäœãç¡å¹ã«ããJavaScriptã䜿çšããŠãªãŒããŒã¹ã¯ããŒã«ã€ãã³ããæ€åºããã«ã¹ã¿ã ã¢ãã¡ãŒã·ã§ã³ãã¢ã¯ã·ã§ã³ãããªã¬ãŒããŸãã
ãã®ã¢ãããŒãã¯æå€§éã®æè»æ§ãæäŸããŸãããããå€ãã®éçºå·¥æ°ãå¿ èŠã«ãªããŸãã
é«åºŠãªãã¯ããã¯ãšèæ ®äºé
ã¹ã¯ããŒã«ã¹ããããã€ã³ããšã®çµã¿åãã
overscroll-behavior
ã¯ãCSSã¹ã¯ããŒã«ã¹ããããšå¹æçã«çµã¿åãããããšã§ããŠããŒã¯ãªã¹ã¯ããŒã«äœéšãäœæã§ããŸããäŸãã°ãã¹ã¯ããŒã«ã¹ããããã€ã³ããæã€ã³ã³ããã«overscroll-behavior: contain;
ã䜿çšããŠã誀ã£ãŠèŠªããŒãžã®ãªãã¬ãã·ã¥ãããªã¬ãŒããããšãªããã¹ã¯ããŒã«ãåžžã«æ¬¡ã®èŠçŽ ã«ã¹ãããããããã«ã§ããŸãã
ãã©ãŠã¶ã®äºææ§
overscroll-behavior
ã¯ãChromeãFirefoxãSafariãEdgeãå«ãææ°ã®ãã©ãŠã¶ã§åªãããµããŒãããããŸãããã ããææ°ã®äºææ§æ
å ±ãå€ããã©ãŠã¶åãã®ããªãã£ã«ã«ã€ããŠã¯ãåžžã«Can I useãŠã§ããµã€ãã§ç¢ºèªããããšããå§ãããŸãã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
overscroll-behavior
ã䜿çšããéã«ã¯ãã¢ã¯ã»ã·ããªãã£ãèæ
®ããããšãéèŠã§ããããã©ã«ãã®ãªãŒããŒã¹ã¯ããŒã«å¹æãç¡å¹ã«ããããšïŒç¹ã«overscroll-behavior: none;
ã䜿çšããå ŽåïŒã¯ããŠãŒã¶ãŒãç¹ã«éåé害ã®ãããŠãŒã¶ãŒãæ··ä¹±ãããå¯èœæ§ããããŸããããã©ã«ãã®å¹æãç¡å¹ã«ããå Žåã¯ãã¹ã¯ããŒã«ã®å¢çã«éããããšã瀺ã代æ¿ã®èŠèŠçãªåå³ããã£ãŒãããã¯ãæäŸããŠãã ããã
äŸãã°ãJavaScriptã䜿çšããŠãªãŒããŒã¹ã¯ããŒã«ã€ãã³ããæ€åºããèŠçŽ ã«åŸ®åŠãªã¢ãã¡ãŒã·ã§ã³ãèŠèŠçãªã€ã³ãžã±ãŒã¿ã远å ããããšãã§ããŸãã
ããã©ãŒãã³ã¹ãžã®åœ±é¿
overscroll-behavior
ã®äœ¿çšã¯ãäžè¬çã«ããã©ãŒãã³ã¹ãžã®åœ±é¿ã¯æå°éã§ããããããJavaScriptã§ã«ã¹ã¿ã ã®ãªãŒããŒã¹ã¯ããŒã«å¹æãå®è£
ããå Žåã¯ãã¢ãã¡ãŒã·ã§ã³ãã€ãã³ããªã¹ããŒã®ããã©ãŒãã³ã¹ãžã®åœ±é¿ã«æ³šæããŠãã ãããã¹ã¯ããŒã«ã€ãã³ããã³ãã©å
ã§ã®èšç®ã³ã¹ãã®é«ãæäœãé¿ããã¢ãã¡ãŒã·ã§ã³ãæé©åããããã«requestAnimationFrameãªã©ã®ãã¯ããã¯ã䜿çšããããšãæ€èšããŠãã ããã
ããããåé¡ã®ãã©ãã«ã·ã¥ãŒãã£ã³ã°
ã¹ã¯ããŒã«é£éãäŸç¶ãšããŠçºçãã
overscroll-behavior: contain;
ãèšå®ããŠãã¹ã¯ããŒã«é£éãäŸç¶ãšããŠçºçããå Žåã¯ãDOMéå±€ãå確èªããŠãã ãããããããã£ãæ£ããèŠçŽ ãã€ãŸãã¹ã¯ããŒã«å¯èœãªã³ã³ãã³ãã®çŽæ¥ã®èŠªããŸãã¯åé¢ãããã³ã³ããã«é©çšãããŠããããšã確èªããŠãã ããããŸããä»ã®CSSããããã£ãJavaScriptã³ãŒããã¹ã¯ããŒã«ã®åäœã«å¹²æžããŠããå¯èœæ§ããããŸãã
ç¹å®ã®ããã€ã¹ã§ã®äºæãã¬åäœ
ãªãŒããŒã¹ã¯ããŒã«å¹æã®ãã©ãŠã¶å®è£ ã¯ããªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãããã€ã¹ã«ãã£ãŠè¥å¹²ç°ãªãå ŽåããããŸããäžè²«ããåäœã確ä¿ããããã«ãåžžã«ããŸããŸãªããã€ã¹ã§å®è£ ããã¹ãããŠãã ãããççŸã解決ããããã«ããã©ãŠã¶åºæã®CSSããã¯ãJavaScriptã®åé¿çãå¿ èŠã«ãªãå ŽåããããŸãã
ç«¶åããCSSããããã£
ç¹å®ã®CSSããããã£ã¯ãoverscroll-behavior
ãšäºæãã¬åœ¢ã§çžäºäœçšããããšããããŸããäŸãã°ã芪èŠçŽ ã«overflow: hidden;
ãèšå®ãããŠããå Žåãoverscroll-behavior
ã®èšå®ã«é¢ä¿ãªãã¹ã¯ããŒã«é£éã劚ããããããšããããŸããCSSã«ãŒã«ãäºãã«ç«¶åããŠããªãããšã確èªããŠãã ããã
åºæ¬ãè¶ ããŠïŒåµé çãªå¿çš
overscroll-behavior
ã¯ãã¢ãŒãã«ã§ã®ã¹ã¯ããŒã«é£éã®é²æ¢ãªã©å®çšçãªç®çã§ãã䜿çšãããŸãããããåµé çã§é
åçãªãŠãŒã¶ãŒäœéšãäœãåºãããã«ã䜿çšã§ããŸãã
- ã«ã¹ã¿ã ã®Pull-to-RefreshïŒ ãã©ãŠã¶ã®ããã©ã«ãã®Pull-to-Refreshã«é Œã代ããã«ããŠãŒã¶ãŒãã³ã³ããããã«ããŠã³ãããšãã«å®å šã«ã«ã¹ã¿ã ãªã¢ãã¡ãŒã·ã§ã³ãã€ã³ã¿ã©ã¯ã·ã§ã³ãäœæã§ããŸãã
- ãªãŒããŒã¹ã¯ããŒã«æã®ãã©ã©ãã¯ã¹å¹æïŒ ãŠãŒã¶ãŒãã³ã³ããããªãŒããŒã¹ã¯ããŒã«ãããšãã«ããã©ã©ãã¯ã¹å¹æããã®ä»ã®èŠèŠçãªã¢ãã¡ãŒã·ã§ã³ãããªã¬ãŒããŸãã
- ã€ã³ã¿ã©ã¯ãã£ããªãã¥ãŒããªã¢ã«ïŒ ãªãŒããŒã¹ã¯ããŒã«ã€ãã³ãã䜿çšããŠãã€ã³ã¿ã©ã¯ãã£ããªãã¥ãŒããªã¢ã«ãã¬ã€ãã®ã¹ããããããªã¬ãŒããŸãã
çµè«ïŒã¹ã¯ããŒã«äœéšãå¶åŸ¡ãã
overscroll-behavior
ã¯ãæ¯èŒçã«ã·ã³ãã«ã§ãããªãããWebã¢ããªã±ãŒã·ã§ã³ã§ã®ã¹ã¯ããŒã«ã®æ¯ãèãã现ããå¶åŸ¡ã§ããéåžžã«åŒ·åãªCSSããããã£ã§ããã¹ã¯ããŒã«é£éã®æŠå¿µãšoverscroll-behavior
ã®ããŸããŸãªå€ãçè§£ããããšã§ãå¹
åºãããã€ã¹ããã©ãŠã¶ã§ãããã¹ã ãŒãºã§çŽæçããã€é
åçãªãŠãŒã¶ãŒäœéšãäœæã§ããŸãããã®ã¬ã€ãã§èª¬æããããŸããŸãªäŸããã¯ããã¯ã詊ããŠãoverscroll-behavior
ã®å¯èœæ§ãæå€§éã«åŒãåºããWebéçºã¹ãã«ãåäžãããŸãããã
åžžã«ã¢ã¯ã»ã·ããªãã£ãèæ ®ãããã¹ãŠã®ãŠãŒã¶ãŒã«ãšã£ãŠäžè²«ããæ¥œããäœéšãä¿èšŒããããã«ãå®è£ ã培åºçã«ãã¹ãããããšãå¿ããªãã§ãã ããã