ã¬ã¹ãã³ã·ããã¶ã¤ã³ã®ããã« resize ã¤ãã³ãã使ãã®ã¯ãã㦠matchMedia ã¡ã½ããã使ãã
ã¬ã¹ãã³ã·ããã¶ã¤ã³ã®ããã« CSS ã¡ãã£ã¢ã¯ã¨ãªã使ããã¨ãå¤ãã¨æãã¾ãã CSS å´ã ãã§å®çµãããããã®ã§ãããJavaScript å´ã§ãç»é¢ãµã¤ãºã®å¤æ´ãæ¤ç¥ãããã£ãããç»é¢ãµã¤ãºä»¥å¤ã®ã¡ãã£ã¢ã¯ã¨ãªç¸å½ã®ãã¨ãããããªã£ãããããã¨ã¯ããã¾ãããã
ç»é¢ãµã¤ãºã®å¤æ´èªä½ã¯ window
ã«çºçãã resize
ã¤ãã³ã (window.onresize
ã¤ãã³ããã³ãã©) ã§æ¤ç¥ã§ãã¾ãããCSS ã¡ãã£ã¢ã¯ã¨ãªã¨ãããçµã¿åããã¦ã¬ã¹ãã³ã·ã対å¿ãããã¨ããã¨ä»¥ä¸ã®åé¡ãã§ã¦ãã¾ãã
- ã¦ã£ã³ãã¦ãµã¤ãºå¤æ´æã«
resize
ã¤ãã³ããé«é »åº¦ã§çºçããã®ã§ãresize
ã¤ãã³ãã®ãªã¹ãã§ã³ã¹ãã®ãããå¦çãè¡ãã®ã¯ãããªãã¨ãããã (Throttling ãããã¨ãæ¨å¥¨ãããã)- åè : resize | MDN
- CSS ã¡ãã£ã¢ã¯ã¨ãªã¨å®å ¨ã«å¯¾å¿ãããã®ã§ã¯ãªãã®ã§ãCSS å´ã¨ã®å¯¾å¿ãåãã¥ããã
ä¸ã®æ¹ã¯ã¾ã throttling ããã°ããã®ã§ãããä¸ã®åé¡ã¯ã©ããããããªãã§ããã
window.matchMedia
ã¡ã½ãã㨠MediaQueryList
ããã§å¥ã®æ¹æ³ã¨ãã¦ãããããããã®ã window.matchMedia
ã¡ã½ããã¨ãã®è¿ãå¤ã® MediaQueryList
ãªãã¸ã§ã¯ãã§ãã æ¨æºåã«ã¤ãã¦ã¯ã¾ã å®äºãã¦ããããCSSOM View Module ã§ä½æ¥ããã¦ããããã§ãã ã¨ã¯ããæè¿ã®ãã©ã¦ã¶ã ã¨ã©ã®ãã©ã¦ã¶ã§ã使ããã¿ãããªã®ã§ãå®ç¨çã«ä½¿ã£ã¦ãããç¶æ³ã«ãªã£ã¦ãããã¨æãã¾ãã (IE 9 ã¨ãå°ãå¤ãã® Android ã®ãã©ã¦ã¶ã¨ãã§ã¯ä½¿ããªãã®ã§ãããã辺ã®ãµãã¼ããå¿
è¦ãªãã¾ã 使ãã¾ãããï¼ï¼)
window.matchMedia
ã¡ã½ããã®å¼æ°ã¨ãã¦ã¡ãã£ã¢ã¯ã¨ãªã®ãªã¹ã (media query list: ã¡ãã£ã¢ã¯ã¨ãªãã«ã³ãåºåãã§ç¹ãããã®) ãæ¸¡ãã¨ããããã®ã¡ãã£ã¢ã¯ã¨ãªã®ãªã¹ãã表ã MediaQueryList
ãªãã¸ã§ã¯ããè¿ããã¾ãã MediaQueryList#matches
ããããã£ã使ããã¨ã§ããªã¹ãä¸ã®ã¡ãã£ã¢ã¯ã¨ãªã®ãã¡å°ãªãã¨ã 1 ã¤ä»¥ä¸ãçã«ãªã£ã¦ãããããããã¯ãã¹ã¦ãå½ã§ããããå¤å¥ã§ãã¾ãã
ã¾ããMediaQueryList#addListenr
ã¡ã½ããã§ã¤ãã³ããªã¹ããè¨å®ãããã¨ã§ãmatches
ã®å¤ã®å¤åãæ¤ç¥ãããã¨ãã§ãã¾ãã
// TypeScript ã§ãã // 縦 600px 以ä¸ãã¾ãã¯æ¨ª 600px 以ä¸ã®å ´åã« matches state ãçã«ãªãã¡ãã£ã¢ã¯ã¨ãªãªã¹ãã var mql = window.matchMedia("(max-width: 600px), (max-height: 600px)"); // ã¡ãã£ã¢ã¯ã¨ãªãªã¹ãã® matches state ã«å¿ããå¦çãè¡ã颿°ã function handleMediaQueryListMatchesState(matches: boolean) { if (matches) { // ã¡ãã£ã¢ã¯ã¨ãªãªã¹ãã® matches state ãçã®å ´åã®å¦çã } else { // å½ã®å ´åã®å¦çã } } // ã¤ãã³ããªã¹ããè¨å®ã㦠matches state ã®å¤åãæ¤ç¥ã mql.addListener((evt) => handleMediaQueryListMatchesState(evt.matches)); // åæåã handleMediaQueryListMatchesState(mql.matches);
便å©ã§ããã é対å¿ãã©ã¦ã¶ãåã£ã¦ããããã§ãããã©ãã©ã使ã£ã¦ããã¾ãããã
æ´å²ççµç·¯ï¼
ã¨ããã§ MediaQueryList
㯠addEventListener
ã¡ã½ãããæã£ã¦ããã¯ããªã®ã«ãããã¨ã¯å¥ã« addListener
ã¡ã½ãããæã£ã¦ãã¦ã©ããªã£ã¦ããã ãããã¨æãã¾ãããã ç§ãæãã¾ããã ã©ãããæã¯ MediaQueryList
ã¯ç¬èªã®ã³ã¼ã«ããã¯ã®ä»çµã¿ã使ã£ã¦ãã¦ãaddEventListener
ãæã£ã¦ããªãã£ãããã§ãã ã¾ããã³ã¼ã«ããã¯ã¡ã½ããã«å¼æ°ã¨ãã¦æ¸¡ãããå¤ã MediaQueryListEvent
ã§ã¯ãªããMediaQueryList
ãªãã¸ã§ã¯ãããã®ã¾ã¾æ¸¡ããã¦ããããã§ãã
Note: This specification initially had a custom callback mechanism with
CSSOM View Module, 4.2. The MediaQueryList InterfaceaddListener()
andremoveListener()
, and the callback was invoked with the associated media query list as argument. Now the normal event mechanism is used instead. For backwards compatibility, theaddListener()
andremoveListener()
methods are basically aliases foraddEventListener()
andremoveEventListener()
, respectively, and the change event masquerades as aMediaQueryList
.
å®éã«è©¦ããã¨ãããFirefox 49.0.1 ã Edge 38.14393.0.0 ã§ã¯å¤ãæåã«ãªã£ã¦ãã¾ããã Chrome 53.0.2785.116m ã¯ææ°ã® CSSOM View Module ã«ãã£ãå®è£
ã«ãªã£ã¦ãã¾ããã Firefox ã Edge ã®å®è£
ã¯ã¾ã ææ°ã® CSSOM View Module ã«ãã£ãå®è£
ã«ãªã£ã¦ããªãã®ã§ããã°ãã㯠addListener
ã¡ã½ããã使ã£ã¦ããããã«ããã®ãè¯ãããã§ãã
ä»ã®æ¹æ³
CSS å´ã§ã¡ãã£ã¢ã¯ã¨ãªã使ã£ã¦ç¹å®è¦ç´ ã®ããããã£ã夿´ãããªã©ãã¦ãJS å´ããã¯ãã®ããããã£ãè¦ããã¨ã§ã©ã®ã¡ãã£ã¢ã¯ã¨ãªãæå¹ã«ãªã£ã¦ãã®ãæ¤æ»ããã®ãä»ã®ã¨ããã¯å®å®ãã¨ãã話ãã IE 9 ãå¤ãã® Android 端æ«ããµãã¼ããããªãããããæ¹æ³ãè¯ãããã§ãã (ã¨ãããã¨ã§ãããï¼ ä»ã®çç±ããããªãæãã¦ãã ããï¼)
ã¬ã¹ãã³ã·ããã¶ã¤ã³ã®ããã« resize ã¤ãã³ãã使ãã®ã¯ãã㦠matchMedia ã¡ã½ããã使ãã - ã²ã ã¾ãã½ã±ããã¯å£ããªãä»ã¯ã¾ã ç»é¢ãµã¤ãºæ¤ç¥ç¨ã®è¦ç´ ä½ã£ã¦ãfont-familyã¨ããã¡ãã£ã¢ã¯ã¨ãªã§å¤æ´ããã®ãä¸çªæ¥½ããªãfont-family: "sp";ã¨ããresizeã¤ãã³ãå´ã¯fontåãè¦ãã ãããã ã¤ãã³ãã§å¤åãæ¤ç¥ã§ããã®ã¯ãããªã
2016/10/02 14:57
matchMedia使ãããã対象ã¡ãã£ã¢ã¯ã¨ãªå ã§ç¹å®è¦ç´ ã®displsyããããã£ãæ¤æ»ããæ¹ãå®å ¨ã§ç°¡åãªå ´åãå¤ãããªãhttps://t.co/WZ3VhfpJfQ
— h. kitago (@hkitago) October 2, 2016
åè
- CSSOM View Module : æ¨æºå使¥ä¸ã®ææ¸ã
- æ¬è¨äºè¨è¿°ã®ããã«åèã«ãããã¼ã¸ã§ã³ã¯ こちらã
- スクリプトからのメディアクエリの使用 - ウェブデベロッパーガイド | MDN : MDN ä¸ã®
matchMedia
ã¡ã½ããã¨MediaQueryList
ã®èª¬æã - Responsive Web Design Basics | Web | Google Developers : ã¬ã¹ãã³ã·ããã¶ã¤ã³ã®å ¨ä½çãªè©±ã (JS ä¸ã§ã®ã¡ãã£ã¢ã¯ã¨ãªã®è©±ã¯ãªããã©åèã«ã)
- Media Queries : ã¡ãã£ã¢ã¯ã¨ãªã«ã¤ãã¦ã® W3C å§åã
- GitHub - paulirish/matchMedia.js: matchMedia polyfill for testing media queries in JS :
matchMedia
ã® polyfilã - ããã°è¨äºãããã¤ãããã¾ãã
- JavaScript でメディアクエリを行う window.matchMedia の使い方 | Mozilla Developer Street (modest)
- やるやんwindow.matchmedia - FICC Workbook
- $(window).resize()は使わず、window.matchMediaを使って、jsでのメディアクエリー的な事をしてみよう的なお話 ~ 適当な感じでプログラミングとか! : ãµã³ãã«ã³ã¼ãã§ãæ¯å
matchMedia
ã¡ã½ãããå¼ãã§ãã®ãå¾®å¦ã - レスポンシブWeb制作時に便利なmatchMediaメソッド | while(isプログラマ) : ãµã³ãã«ã³ã¼ãä¸ã« ãã¤ãã³ããªã¹ãã§å®è¡ãããå ´åã¯ãå¿ ãtrueã ã£ã¦æ¸ããã¦ããã©å®éã¯ãããªãã¨ã¯ãªãã
- matchMediaを使ってみる | cly7796.net :
resize
ã¤ãã³ãã®ãªã¹ãã®ä¸ã§matchMedia
ã¡ã½ããã使ã£ã¦ãã¦å¾®å¦ã