ç°å¢å¤æ°ã®ä½¿ç¨
CSS ç°å¢å¤æ°ã¢ã¸ã¥ã¼ã« ã§ã¯ãCSS ã«ç°å¢å¤æ°ã®æ¦å¿µãå°å
¥ããç°å¢å¤æ°ã使ç¨ã§ããããã«ãã env() 颿°ãå®ç¾©ãã¦ãã¾ãããã®ã¬ã¤ãã§ã¯ãç°å¢å¤æ°ã¨ã¯ä½ãããã©ã¦ã¶ã¼å®ç¾©ã®ç°å¢å¤æ°ãenv() 颿°ã使ã£ãç°å¢å¤æ°ã®ä½¿ãæ¹ ã«ã¤ãã¦è¦ã¦ããã¾ãã
ç°å¢å¤æ°ã¨ã¯ä½ã
CSSç°å¢å¤æ°ã¯ã°ãã¼ãã«å¤æ°ã§ãããææ¸å
¨ä½ã«ã¹ã³ã¼ããé©ç¨ããã¾ãããããã¯ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«ãã£ã¦å®ç¾©ããã¾ããç°å¢å¤æ°ã¯ããã©ã¦ã¶ã¼ããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ãæä¾ããç¹å¥ãªå¤ã§ãããã¹ã¿ã¤ã«ãã¦ã¼ã¶ã¼ã®ç«¯æ«ã ã³ã³ããã¹ãã«é©å¿ãããã®ã«å½¹ç«ã¡ã¾ãããããã¯ãenv()ã颿°ã使ç¨ãã¦ã¢ã¯ã»ã¹ãã¾ãã
ç°å¢å¤æ°ã¯ãã«ã¹ã¿ã ããããã£ã var() 颿°ã¨åæ§ã«æ©è½ãã¾ãããã°ãã¼ãã«ã«å®ç¾©ããã¹ã³ã¼ããè¨å®ããã¾ããããã¯ãè¦ç´ åä½ã§ã¹ã³ã¼ããè¨å®ãããã«ã¹ã¿ã ããããã£ã¨ã¯ç°ãªããå¸¸ã«ææ¸å
¨ä½ãã¹ã³ã¼ãã¨ãªãã¨ãããã¨ã§ããããã«ãã«ã¹ã¿ã ããããã£ã¯å¤æ´å¯è½ã§ããã®ã«å¯¾ããç°å¢å¤æ°ã¯èªã¿åãå°ç¨ã§ãã
ã«ã¹ã¿ã ããããã£ã¨åæ§ã«ãç°å¢å¤æ°ã¯å¤§æåå°æåãåºå¥ãã¾ãã宣è¨ã®å¤ã§ã¯ä½¿ç¨ã§ããªãã«ã¹ã¿ã ããããã£ã¨ã¯ç°ãªããenv() 颿°ã¯ããããã£å¤ã®ä»»æã®é¨åãã¾ãã¯è¨è¿°åã®ä»»æã®é¨åï¼ã¡ãã£ã¢ã¯ã¨ãªã¼ã«ã¼ã«å
ãªã©ï¼ã§ä½¿ç¨ãããã¨ãã§ãã¾ãã
æ´å²
Apple ãæåã« iOS ã® Safari ãã©ã¦ã¶ã¼ã«ç°å¢å¤æ°ãå°å
¥ããã®ã¯ãéçºè
ãããããæ²é¢ã¨ãã¸ãªã©ä¸å®å½¢ã®ç«¯æ«ç»é¢åãã«ã¬ã¤ã¢ã¦ããæé©åã§ããããã«ããããã§ããããªãªã¸ãã«ã® safe-area-inset-* ç°å¢å¤æ°ã«ãããéçºè
ã¯ã¦ã¼ã¶ã¼ã使ç¨ãã端æ«ããã©ã¦ã¶ã¼ã«é¢ä¿ãªããã³ã³ãã³ãããã¥ã¼ãã¼ãã®å®å
¨é åå
ã«é
ç½®ã§ãã¾ãã
ç¨é
ç°å¢å¤æ°ã使ç¨ãããã¨ã§è§£æ±ºã§ããä¸è¬çãªåé¡ã«ã¯ã以ä¸ã®ãããªãã®ãããã¾ãã
- 端æ«ã®éç¥ãã¢ããªã®ã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¤ã¹ã®ä¸é¨ãè¦ãé ãã
- åçãã¼ãã¼ãã®è¡¨ç¤ºã»é表示æã®ãã¥ã¼ãã¼ããµã¤ãºå¤æ´ã®å¦çã
- ããã°ã¬ãã·ãã¦ã§ãã¢ã㪠(PWA) ãã¤ã³ã¹ãã¼ã«ãããå¾ãã¿ã¤ãã«ãã¼ããã£ãä½ç½®ã«è¦ç´ ãé ç½®ããã³ã³ãã³ããã¦ã£ã³ãã¦å¶å¾¡ãã¿ã³ã¨å¹²æ¸ããªãããã«ãããã¨ãããã¯ç¹ã«ãã¹ã¯ããããã©ã¦ã¶ã¼ã§åé¡ã¨ãªãã¾ãã
ãã©ã¦ã¶ã¼å®ç¾©ã®ç°å¢å¤æ°
CSS ç°å¢å¤æ°ã®ä»æ§æ¸ã§ã¯ã大æåå°æåãåºå¥ããããã¤ãã®å¤æ°ãå®ç¾©ããã¦ãã¾ããããã«ã¯ä»¥ä¸ã®ãããªãã®ãããã¾ãã
preferred-text-scale-
preferred-text-scaleç°å¢å¤æ°ã¯ãã¦ã¼ã¶ã¼ã®å¥½ã¿ã®ããã¹ãæ¡å¤§çã表ãã¾ããããã¯ããªãã¬ã¼ãã£ã³ã°ã·ã¹ãã ã¾ãã¯ã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã®ãããã©ã«ãããã©ã³ããµã¤ãºã«å¯¾ãã¦è¡ããã調æ´ã§ããtext-size-adjustãæå¹ãªç«¯æ«ã ãã©ã¦ã¶ã¼ã§ã¯ãããã¯text-size-adjust: autoã«ãã£ã¦é©ç¨ãããåçã§ããä¾ãã°ãtext-size-adjust: autoãããã¹ããµã¤ãºã 2 åã«ããå ´åãenv(preferred-text-scale)ã¯2ã¨è§£æ±ºããã¾ãã safe-area-inset-*-
4 ã¤ã®å®å ¨é åã¤ã³ã»ããç°å¢å¤æ°ã
safe-area-inset-topãsafe-area-inset-rightãsafe-area-inset-bottomãsafe-area-inset-leftã¯ããã¥ã¼ãã¼ãã®ç«¯ããã®ä¸é¨ãå³å´ãä¸é¨ãå·¦å´ã®ã¤ã³ã»ããã«ãã£ã¦é·æ¹å½¢ã®å®å ¨é åãå®ç¾©ãã¾ãããã®é åå ã«ã³ã³ãã³ããé ç½®ããã°ãç©å½¢ä»¥å¤ã®ãã£ã¹ãã¬ã¤å½¢ç¶ã«ãã£ã¦ã³ã³ãã³ããåæãããå¿é ãããã¾ãããé常ã®ãã¹ã¯ãããããã¼ããã½ã³ã³ã®ã¢ãã¿ã¼ãªã©ãç©å½¢ã§é害ç©ã®ãªããã¥ã¼ãã¼ãã®å ´åãããã 4 ã¤ã®å¤ã¯ãã¹ã¦0ã«ãªãã¾ããç©å½¢ã§ã¯ãªããã£ã¹ãã¬ã¤ï¼ãã«ãµã¤ãºã®ç»é¢ãæã¤è§ä¸¸ã®ç«¯æ«ããè§ä¸¸ã¾ãã¯åå½¢ãã£ã¹ãã¬ã¤ã®ã¹ãã¼ãã¦ã©ãããªã©ï¼ã§ã¯ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã«ãã£ã¦è¨å®ãããããã 4 ã¤ã®å¤ããç©å½¢å ã®ãã¹ã¦ã®ã³ã³ãã³ããå¯è¦ãã¤é®ãããªãããã«ç©å½¢ãå½¢æãã¾ãã safe-area-max-inset-*-
4 ã¤ã®å®å ¨é åæå¤§ã¤ã³ã»ããç°å¢å¤æ°ã
safe-area-max-inset-topãsafe-area-max-inset-rightãsafe-area-max-inset-bottomãsafe-area-max-inset-leftã¯ããããã対å¿ããåç夿°safe-area-inset-*ã®éçãªæå¤§å¤ã表ãã¾ãããããã¯ããã¹ã¦ã®åçãªã¦ã¼ã¶ã¼ã¤ã³ã¿ã¼ãã§ã¤ã¹æ©è½ãåç´ãããç¶æ ã«ãããsafe-area-inset-*対å¿å¤æ°ã®æå¤§å¤ã示ãã¾ããä¾ãã°ãä¸é¨ã®ãã©ãããã©ã¼ã ã§ã¯ä¸ä¸ã¹ã¯ãã¼ã«æã«ãã¿ã³ãã¼ã表示ãããsafe-area-inset-*ã®å¤ãå¤åããå ´åãããã¾ããsafe-area-inset-*ã®å¤ã¯ç¾å¨è¡¨ç¤ºããã¦ããã³ã³ãã³ãé åã®å¤åã«å¿ãã¦å¤åãã¾ãããsafe-area-max-inset-*ã®å¤ã¯å¸¸ã«ä¸å®ã§ãã viewport-segment-*-
ãããã®å¤æ°ã¯ãæãããã¿å¼ã¹ãã¼ããã©ã³ãªã©ãè¤æ°ã®é¨åãæã¤ç«¯æ«ã«ã®ã¿é¢é£ãã¾ãã
viewport-segment-bottomãviewport-segment-leftãviewport-segment-rightãviewport-segment-top夿°ãããã³viewport-segment-heightã¨viewport-segment-widthã¯ããã¥ã¼ãã¼ãã®è«ççã«åé¢ãããé åã®ä½ç½®ã¨å¯¸æ³ãå®ç¾©ãã¾ãããããã®å¤æ°ã¯ããã¥ã¼ãã¼ããå°ãªãã¨ã 2 ã¤ã®ã»ã°ã¡ã³ãã«åå²ããã¦ããå ´åã«ã®ã¿å®ç¾©ããã¾ãããããã¯ãè¤æ°ã»ã°ã¡ã³ã端æ«ã®ç°ãªãã»ã°ã¡ã³ãã« UI ã®ç°ãªãé¨åãé©åã«é ç½®ããæãç³ã¿é¨åã§ã³ã³ãã³ããåæãããã®ãé²ãããã«ä½¿ç¨ããã¾ãã
ãã®ä»ã®ä»æ§æ¸ã§ã追å ã®ç°å¢å¤æ°ãå®ç¾©ããã¦ãã¾ãã
ã¦ã£ã³ãã¦ã³ã³ããã¼ã«ãªã¼ãã¼ã¬ã¤ API ã¯ããã¹ã¯ããã端æ«ã«ã¤ã³ã¹ãã¼ã«ãããããã°ã¬ãã·ãã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ (PWA) ã«ãããã¿ã¤ãã«ãã¼é åã®å½¢ç¶ã«é¢ããæ
å ±ãå
¬éãã WindowControlsOverlay ã¤ã³ã¿ã¼ãã§ã¤ã¹ãå®ç¾©ãã¾ããwindow-controls-overlay ã® display_override å¤ã使ç¨ããå ´åã以ä¸ã®ç°å¢å¤æ°ãå®ç¾©ããã¾ãã
titlebar-area-*-
titlebar-area-xãtitlebar-area-yãtitlebar-area-widthãtitlebar-area-height夿°ã¯ããã¹ã¯ãããç°å¢ã§å®è¡ãããã¤ã³ã¹ãã¼ã«æ¸ã¿ã¦ã§ãã¢ããªã±ã¼ã·ã§ã³ã«ããã¦ãé常ã¿ã¤ãã«ãã¼ãå æããé åãå®ç¾©ãã¾ããtitlebar-area-*夿°ã使ç¨ãããã¨ã§ãã³ã³ãã³ããã¦ã£ã³ãã¦å¶å¾¡ãã¿ã³ï¼æå°åãæå¤§åãéããï¼ã¨éãªããªãããã«ãããã¨ãã§ãã¾ãã keyboard-inset-*-
keyboard-inset-topãkeyboard-inset-rightãkeyboard-inset-bottomãkeyboard-inset-leftãkeyboard-inset-widthãkeyboard-inset-height夿°ã¯ãç»é¢ä¸ã®ä»®æ³ãã¼ãã¼ãã®ä½ç½®ã¨ãµã¤ãºãå ·ä½çã«ã¯ãã¥ã¼ãã¼ãã®ç«¯ããã®ä¸é¨ãå³å´ãä¸é¨ãå·¦å´ã®ã¤ã³ã»ããã«é¢ããæ å ±ãæä¾ãã¾ã ï¼å¹ ã¨é«ãã®ã¤ã³ã»ããã¯ä»ã®ã¤ã³ã»ããããè¨ç®ããã¾ãï¼ã詳細ã¯ä»®æ³ãã¼ãã¼ã API ãåç §ãã¦ãã ããã
ããã¾ã§ã®å¤æ°åã«ã¯ãã¹ã¦ãleft, right, top, bottom, height, width ã¨ãã£ãç©ççãªç¨èªãå«ã¾ãã¦ãããã¨ã«æ°ã¥ããããããã¾ããããããã®å¤æ°åã¯è¡¨ç¤ºãããã¦ã§ããµã¤ãã§ã¯ãªãã端æ«ãã¼ãã¦ã§ã¢ã®ç©ççç¹æ§ãæãã¦ãããããè«ççãªå¯¾å¿é¢ä¿ã¯å¿ è¦ããã¾ããã
env() 颿°
env() 颿°ã¯ãç°å¢å¤æ°ã®å¤ã CSS ã®ã³ã³ããã¹ãã«æ¿å
¥ããããã«ä½¿ç¨ããã¾ããenv() 颿°ã¯ãä»»æã®è¦ç´ ã®ä»»æã®ããããã£ã«ãããå¤ã®ä»»æã®é¨åãã¾ãã¯ä»»æã®ã¢ããã«ã¼ã«ã®è¨è¿°åã«ãããå¤ã®ä»»æã®é¨åï¼ã«ã¹ã¿ã ããããã£å¤å
ãå«ãï¼ã®ä»£ããã«ä½¿ç¨ã§ãã¾ããCSS å¤ã許å¯ãããå ´æã§ããã°ã©ãã§ã使ç¨å¯è½ã§ãã
åºæ¬çãªæ§æã¯æ¬¡ã®éãã§ãã
env( <environment-variable-name> )
env( <environment-variable-name>, <fallback-value> )
ãã®é¢æ°ã¯ã大æåå°æåãåºå¥ããç°å¢å¤æ°åã¨ããªãã·ã§ã³ã§ã¯ãããä¸è¬çã«æ¨å¥¨ããã代æ¿å¤ãåãåãã¾ãã
line-height: env(preferred-text-scale, 2);
margin: env(safe-area-inset-top, 0) env(safe-area-inset-right, auto)
env(safe-area-inset-bottom, 3em) env(safe-area-inset-left, auto);
æåã®å¼æ°ã¯ç½®æå¯¾è±¡ã®ç°å¢å¤æ°åã§ããã«ã³ãã®å¾ã«æå®ããã弿°ã¯ä»£æ¿å¤ã§ãããæåã®å¼æ°ã§åç
§ãããç°å¢å¤æ°ãåå¨ããªãå ´åã«ä½¿ç¨ããã¾ãããããã®ä¾ã§ã¯ããã©ã¦ã¶ã¼ã« preferred-text-scale ç°å¢å¤æ°ãåå¨ããªãå ´åãline-height 㯠2 ã«è¨å®ããã¾ããã¾ãããã©ã¦ã¶ã¼ã« safe-area-inset-* ã®å¤ããªãå ´åãmargin 㯠margin: 0 auto 3em auto ã«è¨å®ããã¾ãã
代æ¿å¤ã®æ§æã¯ã«ã¹ã¿ã ããããã£ã®æ§æã¨åæ§ã«ãè¤æ°ã®ã«ã³ãã使ç¨å¯è½ã§ããæåã®ã«ã³ããã颿°ã®çµããã¾ã§ã®é¨åã¯ãã¹ã¦ä»£æ¿å¤ã¨è¦ãªããã¾ãããã ããããããã£å¤ã¾ãã¯è¨è¿°åãã«ã³ãã«é対å¿ã®å ´åããã®å¤ã¯ç¡å¹ã¨ãªãã¾ãã
ããããã£ã¾ãã¯è¨è¿°åãæ§æçã«æå¹ãª env() 颿°ãå«ãå ´åãæ§æè§£ææã«æå¹ã§ããã¨ã¿ãªããã¾ããæ§æãã§ãã¯ã¯ãenv() 颿°ããã©ã¦ã¶ãæä¾ããå¤ã«ç½®æãããå¾ã®è¨ç®æã«ã®ã¿è¡ããã¾ããæåã®å¼æ°ã¨ãã¦æ¸¡ãããç°å¢å¤æ°ãèªèãããªãç°å¢å¤æ°åã§ããå ´åã代æ¿å¤ã使ç¨ããã¾ãã代æ¿å¤ã¯å¥ã®ç°å¢å¤æ°ã§ãããããã®å¤æ°èªä½ã«ä»£æ¿å¤ãè¨å®ããã¦ãã¦ãæ§ãã¾ããã代æ¿å¤ãæä¾ããã¦ããªãå ´åãenv() 颿°ãå«ãããããã£ã¾ãã¯è¨è¿°åã¯è¨ç®æã«ããã¦ç¡å¹ã¨ãªãã¾ãã
ç°å¢å¤æ°ã¨ env() ã®ä½¿ç¨ä¾
ç°å¢å¤æ°ã使ç¨ãããã¨ã§ãåºå®ã¢ããªãã¼ã«ãã¼ã端æ«ä¸é¨ã«è¡¨ç¤ºãããéç¥ã«ãã£ã¦é ããªãããã«ã§ãã¾ããç»é¢ä¸é¨ã«éç¥ã表示ãã端æ«ã§ã¯ãã¦ã¼ã¶ã¼ã¨ã¼ã¸ã§ã³ãã safe-area-inset-bottom ç°å¢å¤æ°ã®å¤ãããã¥ã¼ãã¼ããé®ãè¦ç´ ã®ä¸ç«¯ãããã¥ã¼ãã¼ãä¸ç«¯ã¾ã§ã®è·é¢ã«è¨å®ãã¾ãããã®ä¾ã§ã¯ã表示ããã¦ããéç¥ã®é«ãã«ãªãå¯è½æ§ãé«ãã§ããé·æ¹å½¢ã®ãã¹ã¯ãããã¢ãã¿ã¼ã§ã¯ãsafe-area-inset-bottomã¯é常0ã§ãããã®å¤ãå©ç¨ãã¦ãã³ã³ãã³ããé ããã«éç¥ã表示ããããã®ç©ºéããã¥ã¼ãã¼ãä¸é¨ã«ç¢ºä¿ãã¾ãã
ãã® <body> ã«ã¯ 2 ã¤ã®åãããã¾ãã <main> <footer> ãã¼ã«ãã¼ä»¥å¤ã®ã¢ããªã±ã¼ã·ã§ã³å
¨ä½ãå«ã¾ãã¦ãã¾ãã
<body>
<main>ã¢ããªã±ã¼ã·ã§ã³</main>
<footer>ãã¼ã«ãã¼</footer>
</body>
<body> ã¯ããã¥ã¼ãã¼ãã®é«ããåãããã¬ãã¯ã¹ã³ã³ããã¼ã¨ãã¦å®ç¾©ããã¾ãã<main> ã¢ããªã±ã¼ã·ã§ã³ã¯ããã®å
å¼è¦ç´ ã§ãã <footer> ãå æãã¦ããªã空éãåããããã«æ¡å¤§ãããã¨ã許å¯ããã¦ãã¾ãã
body {
display: flex;
flex-flow: column nowrap;
height: 100vh;
}
main {
flex: 1;
padding: 1em;
overflow-y: auto;
}
<footer> ã¯ãã¥ã¼ãã¼ãã®ä¸é¨ã«åºå®ãããããã«é
ç½®ããã¾ããposition: sticky 宣è¨ã¯ã<body>ï¼ã¹ã¯ãã¼ã«å¯è½ãªç¥å
è¦ç´ ã㤠å
å«ãããã¯ï¼ãåºæºã«ãbottom ã®å¤ 0 ã«åºã¥ãã¦è¦ç´ ããªãã»ãããã¾ãã<footer> ã«å辺ãã¹ã¦ã« 1em ã® padding å¤ãè¨å®ãã¾ãããã®å¾ã䏿¹åã®ããã£ã³ã° 1em ã« safe-area-inset-bottom ã®å¤ã追å ãã代æ¿ã¨ã㦠1em ãæå®ãã¾ãã
footer {
position: sticky;
bottom: 0;
padding: 1em;
padding-bottom: calc(1em + env(safe-area-inset-bottom, 1em));
}
ç°¡æ½ã«ããããã追å ã® CSS ã¯é表示ã«ãã¦ãã¾ãã
ããã¿ã¼ã®ä¸é¨ããã£ã³ã°ã¯ãsafe-area-inset-bottom ç°å¢å¤æ°ã®å¤ã 0 ãã大ãã端æ«ã§ã¯ 1em ãè¶
ãã¦æ¡å¼µããã¾ãããã® CSS ã¯ãéç¥ãç»é¢ã®ãããã端æ«ã®è§ãæ£æ¹å½¢ã§ãªãå ´åãªã©ãå¿
è¦ã«å¿ãã¦ããã¿ã¼ãæ¡å¤§ããããã®ä½åãªããã£ã³ã°ãæä¾ãã¾ãã
å°æ¥çã«ãéçºè å®ç¾©ã®ç°å¢å¤æ°ã¸ã®å¯¾å¿ãå®ç¾ãããå¯è½æ§ãããã¾ãããç¾æç¹ã§ã¯ã¾ã å®ç¾©ãå®è£ ãããã¦ãã¾ããã
é¢é£æ å ±
var()@mediashapeè¨è¿°å- CSS ç°å¢å¤æ°ã¢ã¸ã¥ã¼ã«
- CSS round displayã¢ã¸ã¥ã¼ã«
- CSS ã«ã¹ã±ã¼ã夿°ã®ããã® CSS ã«ã¹ã¿ã ããããã£ã¢ã¸ã¥ã¼ã«