@custom-media
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: ããã¯å®é¨çãªæ©è½ã§ãã
æ¬çªã§ä½¿ç¨ããåã«ãã©ã¦ã¶ã¼äºææ§ä¸è¦§è¡¨ããã§ãã¯ãã¦ãã ããã
@custom-media 㯠CSS ã®ã¢ããã«ã¼ã«ã§ãé·ãã¦è¤éãªã¡ãã£ã¢ã¯ã¨ãªã¼ã®å¥åãå®ç¾©ãã¾ããåã <media-query-list> ããã¼ãã³ã¼ãã§è¤æ°ã® @media ã¢ããã«ã¼ã«ã«ç¹°ãè¿ãè¨è¿°ãã代ããã«ã@custom-media ã¢ããã«ã¼ã«ã§ä¸åº¦å®ç¾©ãããã®ã¹ã¿ã¤ã«ã·ã¼ãå
ã§å¿
è¦ã«å¿ãã¦åç
§ã§ãã¾ãã
æ§æ
@custom-media <extension-name> [<media-query-list> | true | false ];
@custom-media --media-query-name (width < 1200px);
@custom-media --media-query-name (width < 1200px), (orientation: portrait);
å¤
<extension-name>-
<dashed-ident>ã§ãããã®ã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ãèå¥ããååã§ãã - 表ç¾ãããå¤
-
ã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ã§å¥åãä½ãå¤ãåãããå¤ã¯æ¬¡ã®éãã§ãã
<media-query-list>-
ã«ã³ãåºåãã®
<media-query>å¤ã®ãªã¹ãã§ãã true-
@custom-mediaã®å¤ã§ã常ã«trueã¨è©ä¾¡ããã¾ãã false-
@custom-mediaã®å¤ã§ã常ã«falseã¨è©ä¾¡ããã¾ãã
解説
ã¬ã¹ãã³ã·ãã¤ã³ã¿ã¼ãã§ã¤ã¹ãæ§ç¯ããéãåãã¡ãã£ã¢æ¡ä»¶ãè¤æ°ã® @media ã¢ããã«ã¼ã«ã§ç¹°ãè¿ãè¨è¿°ããå¿
è¦ããããã¨ãå¤ããæã«ã¯ç°ãªããã¡ã¤ã«ããã¼ã éã§éè¤ãããã¨ãããã¾ããã¡ãã£ã¢ã¯ã¨ãªã¼ãè¤è£½ããã¨ããã¹çºçãªã¹ã¯ãé«ã¾ãããªãã¡ã¯ã¿ãªã³ã°ãå°é£ã«ãªããä¸è¦ãªä¿å®ãªã¼ãã¼ããããçã¾ãã¾ããã¡ãã£ã¢ã¯ã¨ãªã¼ã夿´ããããã³ã«ããã¹ã¦ã®ã¤ã³ã¹ã¿ã³ã¹ãæåã§æ¢ãã¦æ´æ°ããªããã°ãªããªãã®ã§ãå¤§è¦æ¨¡ãªã³ã¼ããã¼ã¹ã§ã¯ã¨ã©ã¼ãçºçããå¯è½æ§ãé«ãã追跡ãå°é£ãªããã»ã¹ã¨ãªãã¾ãã
@custom-media ã¢ããã«ã¼ã«ã¯ãã¡ãã£ã¢ã¯ã¨ãªã¼ã®ååä»ãå¥åãå®ç¾©ã§ããããã«ãããã¨ã§ããã®åé¡ã«å¯¾å¦ãã¾ããã¡ãã£ã¢ã¯ã¨ãªã¼å
¨ä½ãåæã§ç¹°ãè¿ã代ããã«ãã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ã¨ãã¦ã¡ãã£ã¢æ¡ä»¶ãä¸åº¦å®£è¨ããã¹ã¿ã¤ã«ã·ã¼ãå
¨ä½ã§ãã®å¥åãåç
§ãã¾ããããã«ãããåºç¤ã¨ãªãã¡ãã£ã¢ã¯ã¨ãªã¼ãæ´æ°ããéã«ã¯ãåä¸ã®å¤æ´ã®ã¿ã§æ¸ã¿ã¾ãã
ã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ã¯ãã¡ãã£ã¢ã¯ã¨ãªã¼æ©è½å ã§ä»ã®ãã®ããå¥åãåç §ãããã¨ã§æ§æãããã¨ãã§ãã¾ããããã«ããããã表ç¾åè±ãã§é層åãããæ¡ä»¶ãæ§ç¯ãããã¨ãå¯è½ã«ãªãã¾ãããã ããã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ã¯èªèº«ãåç §ãããã¨ã¯ã§ãããã¾ã循ç°åç §ã®é£éã®ä¸é¨ãå½¢æãããã¨ãã§ãã¾ããã循ç°ä¾åé¢ä¿ãåå¨ããå ´åï¼ç´æ¥çã¾ãã¯éæ¥çãåããï¼ããã®ã«ã¼ãã«é¢ä¸ãããã¹ã¦ã®ã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ãç¡å¹ã¨ãªãã¾ãã
è¤æ°ã® @custom-media ã«ã¼ã«ãåã <dashed-ident> åãå®ç¾©ãã¦ããå ´åãã½ã¼ã¹é åºã«ãããæå¾ã®å®£è¨ã®ã¿ãé©ç¨ããã¾ãããã以åã®å®£è¨ã¯ãã¹ã¦ç¡è¦ããã¾ãã
è«çæ¼ç®åã§ã¡ãã£ã¢ã¯ã¨ãªã¼ãè©ä¾¡
ã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ã¯ãCSS ã®è«çæ¼ç®åã®å
¨è¬ãåãå
¥ãã¾ããããªãã¡ notãandãorï¼ã«ã³ãåºåãã¾ã㯠or ãã¼ã¯ã¼ã使ç¨ï¼ã§ãã
@custom-media ã®å¤ã¯é常㮠<media-query-list> ã§ãããããé常㮠@media ã«ã¼ã«ã¨åæ§ã«æ¡ä»¶ãçµã¿åãããããå転ãããããã°ã«ã¼ãåããããããã¨ãå¯è½ã§ãã
not æ¼ç®åã®ä½¿ç¨
not æ¼ç®åã¯ã¡ãã£ã¢æ¡ä»¶å
¨ä½ãå¦å®ãã¾ããç¹å®ã®æ¡ä»¶ã false ã®å ´åã«ã®ã¿ã«ã¼ã«ãé©ç¨ãããå ´åã«æç¨ã§ãã
@custom-media --no-script not (script);
@media (--no-script) {
}
and æ¼ç®åã®ä½¿ç¨
and æ¼ç®åã使ç¨ããã¨ããã¹ã¦ã true ã§ãªããã°ãªããªãè¤æ°ã®æ¡ä»¶ãçµã¿åããããã¨ãã§ãã¾ãã
@custom-media --medium-screen (min-width: 40em) and (max-width: 60em);
@media (--medium-screen) {
}
ãã®å¥åã¯ããã¥ã¼ãã¼ããæå®ãããå¹ ã®ç¯å²å ã«ããå ´åã«ã®ã¿ä¸è´ãã¾ãã
or æ¼ç®åã®ä½¿ç¨
è«ç or æ¼ç®åï¼ã¾ãã¯ãã®å¥åã§ããã«ã³ãï¼ã¯ãæ²è¼ããã¦ããæ¡ä»¶ã®ããããã true ã®å ´åã«ä¸è´ããã¡ãã£ã¢ã¯ã¨ãªã¼ã使ãã¾ãã
@custom-media --screen-or-print-1 screen, print;
@custom-media --screen-or-print-2 screen or print;
@media (--screen-or-print-1) {
}
@media (--screen-or-print-2) {
}
両æ¹ã®å¥åã¯åä¸ã§ãããããã¯ç»é¢ç°å¢ã¨å°å·ç°å¢ã®ä¸¡æ¹ã§æå¹ã«ãªãã¾ãã
形弿æ³
@custom-media =
@custom-media <extension-name> [ <media-query-list> | true | false ] ;
ä¾
>è¤æ°ã®ã¡ãã£ã¢ã¯ã¨ãªã¼ã®æ´æ°
ãã®ä¾ã§ã¯ãå
·ä½çãªãã¬ã¼ã¯ãã¤ã³ããè¤æ°ç®æã§ä½¿ç¨ããã¬ã¹ãã³ã·ãã¦ã§ããµã¤ãã§ã@custom-media ã¢ããã«ã¼ã«ã使ç¨ããã¦ãã¾ãã
@custom-media --narrow-window (width < 32em);
@media (--narrow-window) {
}
@media (--narrow-window) and (hover) {
}
@media (--narrow-window) and (orientation: portrait) {
}
ãã¬ã¼ã¯ãã¤ã³ãã夿´ããå¿ è¦ãããå ´åã1 ã¶æã§æ´æ°ããã°ãµã¤ãå ¨ä½ã®ä¾åããã¡ãã£ã¢ã¯ã¨ãªã¼ããã¹ã¦èª¿æ´ã§ãã¾ãã
è¤æ°ã®ã¬ã¹ãã³ã·ããã¬ã¼ã¯ãã¤ã³ãã®ã°ã«ã¼ãå
ããã§ã¯ã@custom-media ã¢ããã«ã¼ã«ã使ç¨ãã¦åä¸ã®å ´æã§è¤æ°ã®ãã¬ã¼ã¯ãã¤ã³ããè¨å®ãã¾ããããã«ããä¿å®æ§ãæ¹åãããè¤æ°ã®ã¹ã¿ã¤ã«ã·ã¼ãã«ã¾ãããã¬ã¹ãã³ã·ããã¶ã¤ã³ã®ç®¡çãç°¡ç´ åããã¾ãã
/* general.css */
@custom-media --mobile-screen (width < 480px);
@custom-media --tablet-screen (width < 768px);
@custom-media --laptop-screen (width < 1024px);
@custom-media --desktop-screen (width < 1440px);
@custom-media --widescreen (width > 1441px);
/* layout.css */
.container {
padding: 1rem;
}
@media (--mobile-screen) {
.container {
padding: 0.5rem;
}
}
@media (--laptop-screen) {
.container {
max-width: 1200px;
}
}
@media (--widescreen) {
.container {
max-width: 1400px;
padding: 2rem;
}
}
/* typography.css */
@media (--tablet-screen) {
.container {
font-size: 0.9rem;
}
}
@media (--laptop-screen) {
.container {
font-size: 1rem;
}
}
@media (--widescreen) {
.container {
font-size: 1.1rem;
}
}
ãã¹ã¦ã®ãã¬ã¼ã¯ãã¤ã³ããåä¸ã®å ´æã«ã¾ã¨ãããã¨ã§ãã¬ã¹ãã³ã·ããã¶ã¤ã³ã®ç¶æã容æã«ãªãã¾ãããã¬ã¼ã¯ãã¤ã³ãã®èª¿æ´ãå¿
è¦ãªå ´åã対å¿ãã @custom-media å®ç¾©ã 1 ã¶ææ´æ°ããã ãã§æ¸ã¿ããã¹ã¦ã®ã¹ã¿ã¤ã«ã·ã¼ãã§ä¸è²«æ§ãä¿ããã¾ãã
true ããã³ false ãã¼ã¯ã¼ã
次ã®ä¾ã¯ãtrue 㨠false ãã¼ã¯ã¼ãã @custom-media ã§ä½¿ç¨ããã¨ã常ã«ä¸è´ããã¡ãã£ã¢ã¯ã¨ãªã¼ã¨ã決ãã¦ä¸è´ããªãã¡ãã£ã¢ã¯ã¨ãªã¼ãããããçæã§ãããã¨ã示ãã¦ãã¾ãã
@custom-media --enabled true;
@custom-media --disabled false;
@media (--enabled) {
/* ãã®ã¹ã¿ã¤ã«ã¯å¸¸ã«é©ç¨ããã */
body {
background-color: blue;
}
}
@media (--disabled) {
/* ãã®ã¹ã¿ã¤ã«ã¯æ±ºãã¦é©ç¨ãããªã */
body {
background-color: red;
}
}
ããã¯ãæ©è½ãã©ã°ããã®ã¹ã¿ã¤ã«ã·ã¼ãå ã®æ¡ä»¶ä»ããã¸ãã¯ã«æçã§ãã
æ¢åã® @custom-media ã«ã¼ã«ã䏿¸ã
ãã®ä¾ã§ã¯ã1 ã¤ã® @custom-media ã«ã¼ã«ããåã <dashed-ident> åã使ç¨ããå¥ã® @custom-media ã«ã¼ã«ã«ãã£ã¦ä¸æ¸ãããã¦ãã¾ãã
@custom-media --mobile-breakpoint (width < 320px);
@media (--mobile-breakpoint) {
.container {
grid-template-columns: 2fr 1fr;
}
}
@custom-media --mobile-breakpoint (width < 480px);
--mobile-breakpoint ã®æåã®å®ç¾©ã¯ä¸æ¸ããããããç¡è¦ããã¾ããæçµçãªå®£è¨ãããã®ã«ã¹ã¿ã ã¡ãã£ã¢ã¯ã¨ãªã¼ãåç
§ãããã¹ã¦ã®è¦ç´ ã§ä½¿ç¨ãããæå¹ãªå¤ã¨ãªãã¾ãã
仿§æ¸
| Specification |
|---|
| Media Queries Level 5> # at-ruledef-custom-media> |
ãã©ã¦ã¶ã¼ã®äºææ§
é¢é£æ å ±
- CSS ã®
@mediaã¢ããã«ã¼ã« - CSS ã®
@importã¢ããã«ã¼ã« - ã¬ã¹ãã³ã·ããã¶ã¤ã³
- CSS ã¡ãã£ã¢ã¯ã¨ãªã¼ã¢ã¸ã¥ã¼ã«