CSS GridãšFlexboxã®å æ¬çãªæ¯èŒãã¢ãã³ãªWebã¬ã€ã¢ãŠãæ§ç¯ã®ããã®åŒ·ã¿ã匱ã¿ãæé©ãªãŠãŒã¹ã±ãŒã¹ãæ¢ããŸãã
CSS Grid vs FlexboxïŒé©åãªã¬ã€ã¢ãŠããéžæããããã®å®å šã¬ã€ã
é²åãç¶ããWebéçºã®äžçã§ã¯ãèŠèŠçã«é åçã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªWebãµã€ããäœæããããã«ãCSSã¬ã€ã¢ãŠãæè¡ãç¿åŸããããšãäžå¯æ¬ ã§ããããã§ã¯ãCSS GridãšFlexboxãšãã2ã€ã®åŒ·åãªããŒã«ãéç«ã£ãŠããŸããã©ã¡ããWebããŒãžäžã®èŠçŽ ã®ã¬ã€ã¢ãŠãã管çããããã«èšèšãããŠããŸãããã¿ã¹ã¯ãžã®ã¢ãããŒãã¯ç°ãªããããŸããŸãªã·ããªãªã«æé©ã§ãããã®å æ¬çãªã¬ã€ãã§ã¯ãCSS GridãšFlexboxã®è€éãªéšåãæãäžããæ¬¡ã®ãããžã§ã¯ãã«æé©ãªããŒã«ãéžæããããã®ç¥èãæäŸããŸãã
åºæ¬ã®çè§£
è©³çŽ°ãªæ¯èŒã«å ¥ãåã«ãCSS GridãšFlexboxãäœã§ãããã©ã®ããã«æ©èœããã®ãã«ã€ããŠã®åºæ¬çãªçè§£ã確ç«ããŸãããã
CSS Gridãšã¯ïŒ
CSS Grid Layoutã¯ã2次å ã¬ã€ã¢ãŠãã·ã¹ãã ã§ãããè€éãªã°ãªããããŒã¹ã®ã¬ã€ã¢ãŠããç°¡åã«äœæã§ããŸããWebããŒãžãã°ãªããã®è¡ãšåã«åå²ããèŠçŽ ãã°ãªããå ã«æ£ç¢ºã«é 眮ã§ããŸããããã¯ãããæè»æ§ãšå¶åŸ¡ãæäŸããã匷åãããããŒãã«ã®ãããªãã®ã§ãã
CSS Gridã®äž»ãªæ©èœïŒ
- 2次å ã¬ã€ã¢ãŠãïŒè¡ãšåãåæã«å¶åŸ¡ããŸãã
- æç€ºçãªã°ãªããå®çŸ©ïŒ`grid-template-rows`ã`grid-template-columns`ã`grid-template-areas`ã䜿çšããŠã°ãªããã®æ§é ãå®çŸ©ããŸãã
- ã¢ã€ãã é 眮ïŒ`grid-row-start`ã`grid-row-end`ã`grid-column-start`ã`grid-column-end`ã䜿çšããŠãã°ãªããå ã®èŠçŽ ãé 眮ããŸãã
- ã¬ã¹ãã³ã·ãïŒã¡ãã£ã¢ã¯ãšãªãš`fr`ïŒåæ°åäœïŒãªã©ã®æè»ãªã°ãªããåäœã䜿çšããŠãã¬ã¹ãã³ã·ãã¬ã€ã¢ãŠããäœæããŸãã
Flexboxãšã¯ïŒ
FlexboxïŒFlexible Box LayoutïŒã¯ãåäžã®è¡ãŸãã¯åã§ã¢ã€ãã ãé 眮ããããã«èšèšããã1次å ã¬ã€ã¢ãŠãã·ã¹ãã ã§ããã¹ããŒã¹ãé åžããã³ã³ããå ã®ã¢ã€ãã ãæããããšã«åªããŠãããããã²ãŒã·ã§ã³ã¡ãã¥ãŒãããŒã«ããŒããã®ä»ã®UIã³ã³ããŒãã³ãã®äœæã«çæ³çã§ãã
Flexboxã®äž»ãªæ©èœïŒ
- 1次å ã¬ã€ã¢ãŠãïŒäž»ã«åäžã®è»žïŒè¡ãŸãã¯åïŒã«æ²¿ã£ãŠã¢ã€ãã ãé 眮ããããšã«çŠç¹ãåœãŠãŠããŸãã
- æè»ãªã¢ã€ãã ïŒã¢ã€ãã ã¯ãå©çšå¯èœãªã¹ããŒã¹ãåããããã«æé·ãŸãã¯çž®å°ã§ããŸãã
- é 眮ãšé åžïŒ`justify-content`ã`align-items`ã`align-self`ãªã©ã®ããããã£ã䜿çšããŠãã¢ã€ãã ã®é 眮ãšé åžãå¶åŸ¡ããŸãã
- æ¹åå¶åŸ¡ïŒ`flex-direction`ããããã£ã䜿çšããŠãã¬ã€ã¢ãŠãã®æ¹åã倿ŽããŸãã
CSS Grid vs FlexboxïŒè©³çŽ°ãªæ¯èŒ
ããããã®ãã¯ãããžãŒã®åºæ¬çãªçè§£ãåŸããšããã§ããããã䞊ã¹ãŠæ¯èŒãããã®é·æãšçæã匷調ããŸãããã
æ¬¡å æ§
ããã¯ã2ã€ã®éã®æãæ ¹æ¬çãªéãã§ããGridã¯2次å ã§ãããè¡ãšåã®äž¡æ¹ãåæã«åŠçã§ããŸããFlexboxã¯äž»ã«1次å ã§ãããäžåºŠã«1ã€ã®è¡ãŸãã¯åã«çŠç¹ãåœãŠãŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- GridïŒè€éãªããŒãžã¬ã€ã¢ãŠããããã·ã¥ããŒããã¶ã€ã³ãã³ã³ãã³ãã°ãªãããäŸïŒããããŒããµã€ãããŒãã¡ã€ã³ã³ã³ãã³ããšãªã¢ãããã¿ãŒãã°ãªããæ§é ã«é 眮ãããã¥ãŒã¹ãµã€ãã
- FlexboxïŒããã²ãŒã·ã§ã³ããŒãããŒã«ããŒãç»åã®ã£ã©ãªãŒãããã³ã¢ã€ãã ãè¡ãŸãã¯åã§é 眮ããå¿ èŠããããã®ä»ã®ã³ã³ããŒãã³ããäŸïŒç»é¢ãµã€ãºã«åºã¥ããŠã¬ã€ã¢ãŠãã調æŽããã¬ã¹ãã³ã·ãããã²ãŒã·ã§ã³ããŒã
ã³ã³ãã³ã vs. ã¬ã€ã¢ãŠã
Flexboxã¯ã³ã³ãã³ããã¡ãŒã¹ããšèŠãªãããããšãå€ããã¢ã€ãã ã®ãµã€ãºãã¬ã€ã¢ãŠããæ±ºå®ããŸããäžæ¹ãGridã¯ã¬ã€ã¢ãŠããã¡ãŒã¹ãã§ãããæåã«ã°ãªããæ§é ãå®çŸ©ãããã®äžã«ã³ã³ãã³ããé 眮ããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- GridïŒç¹å®ã®ãã¶ã€ã³ããããèŠçŽ ã®æ£ç¢ºãªé 眮ãå¶åŸ¡ããå¿ èŠãããå ŽåãäŸïŒæ©èœã蚌èšãããã³ã³ãŒã«ãã¥ã¢ã¯ã·ã§ã³ãã¿ã³ã衚瀺ããããã®ç¹å®ã®ã»ã¯ã·ã§ã³ãäºåã«å®çŸ©ãããã°ãªããã«é 眮ããã補åã©ã³ãã£ã³ã°ããŒãžã
- FlexboxïŒã¢ã€ãã ãã³ã³ãã³ããšå©çšå¯èœãªã¹ããŒã¹ã«åºã¥ããŠãµã€ãºãšäœçœ®ãèªåçã«èª¿æŽããããã«ãããå ŽåãäŸïŒã¢ã¹ãã¯ãæ¯ãç¶æããªãããã³ã³ããã«åãŸãããã«ç»åãèªåçã«ãªãµã€ãºãããç»åã®ã£ã©ãªãŒã
è€éã
Gridã¯ãã°ãªããç·ããã©ãã¯ãé åãªã©ã®æŠå¿µãçè§£ããå¿ èŠããããããæåã¯åŠç¿ãããè€éã«ãªãåŸåããããŸããããããåºæ¬ãç¿åŸããã°ãéåžžã«è€éãªã¬ã€ã¢ãŠããåŠçã§ããŸããFlexboxã¯ãåçŽãªã¬ã€ã¢ãŠãã§ã¯äžè¬çã«åŠç¿ãšäœ¿çšã容æã§ãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- GridïŒè€æ°ã®ã»ã¯ã·ã§ã³ãšã³ã³ããŒãã³ãããããæ£ç¢ºãªå¶åŸ¡ãå¿ èŠãšããå€§èŠæš¡ã§è€éãªWebãµã€ããäŸïŒè€éãªã°ãªããæ§é ã«é 眮ããã補åãªã¹ãããã£ã«ã¿ãŒãã·ã§ããã³ã°ã«ãŒãã»ã¯ã·ã§ã³ãåããeã³ããŒã¹ãµã€ãã
- FlexboxïŒã³ã³ããå ã§æããããé åžãããå¿ èŠããããå°ããèªå·±å®çµããã³ã³ããŒãã³ããäŸïŒFlexboxã䜿çšããŠåçŽã«æããããã©ãã«ãšå ¥åãã£ãŒã«ããæã€é£çµ¡å ãã©ãŒã ã
ã¬ã¹ãã³ã·ã
GridãšFlexboxã¯ã©ã¡ããã¬ã¹ãã³ã·ãã¬ã€ã¢ãŠãã®äœæã«åªããŠããŸããGridã¯ã`fr`åäœãš`minmax()`ãªã©ã®æ©èœãæäŸããŠãããŸããŸãªç»é¢ãµã€ãºã«é©åããæè»ãªãã©ãã¯ãäœæããŸããFlexboxã¯ãã¢ã€ãã ãå©çšå¯èœãªã¹ããŒã¹ã«åºã¥ããŠæé·ãŸãã¯çž®å°ã§ããå¿ èŠã«å¿ããŠæ¬¡ã®è¡ã«æãè¿ãããšãã§ããŸãã
ãŠãŒã¹ã±ãŒã¹ïŒ
- GridïŒäžè²«ããã°ãªããæ§é ãç¶æããªãããããŸããŸãªç»é¢ãµã€ãºã«é©åããã¬ã¹ãã³ã·ãããŒãžã¬ã€ã¢ãŠãã®äœæãäŸïŒç»é¢å¹ ã«åºã¥ããŠåæ°ã調æŽããæè»ãªã¬ã€ã¢ãŠããæã€ããã°ãµã€ãã
- FlexboxïŒå°ããç»é¢ã§ãã³ããŒã¬ãŒã¡ãã¥ãŒã«æããããŸããã¬ã¹ãã³ã·ãããã²ãŒã·ã§ã³ã¡ãã¥ãŒã®äœæãäŸïŒã¡ãã£ã¢ã¯ãšãªãšFlexboxããããã£ã䜿çšããŠããŸããŸãªç»é¢ãµã€ãºã«é©åããããã²ãŒã·ã§ã³ããŒãæã€Webãµã€ãã
ãŠãŒã¹ã±ãŒã¹ãšå®è·µäŸ
CSS GridãšFlexboxã䜿çšããã¿ã€ãã³ã°ã瀺ãããã«ãããã€ãå®è·µçãªäŸãæ¢ã£ãŠã¿ãŸãããã
äŸ1ïŒWebãµã€ãããããŒ
ã·ããªãªïŒããŽãããã²ãŒã·ã§ã³ã¡ãã¥ãŒãæ€çŽ¢ããŒãåããWebãµã€ãããããŒã®äœæã
ãœãªã¥ãŒã·ã§ã³ïŒããããŒã¯åºæ¬çã«ãæããããé åžãããå¿ èŠãããã¢ã€ãã ã®åäžã®è¡ã§ãããããFlexboxã¯ãã®ã·ããªãªã«æé©ã§ãã`justify-content`ã䜿çšããŠããŽãããã²ãŒã·ã§ã³ã¡ãã¥ãŒãæ€çŽ¢ããŒéã®ã¹ããŒã¹ãå¶åŸ¡ãã`align-items`ã䜿çšããŠããããåçŽæ¹åã«äžå€®æãã§ããŸãã
<header class="header">
<div class="logo">My Website</div>
<nav class="nav">
<ul>
<li><a href="#">Home</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Services</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
<div class="search">
<input type="text" placeholder="Search...">
</div>
</header>
<style>
.header {
display: flex;
justify-content: space-between;
align-items: center;
padding: 20px;
background-color: #f0f0f0;
}
.nav ul {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
.nav li {
margin-right: 20px;
}
</style>
äŸ2ïŒè£œåãªã¹ãããŒãž
ã·ããªãªïŒEã³ããŒã¹ãµã€ãã§ã®è£œåã°ãªããã®è¡šç€ºã
ãœãªã¥ãŒã·ã§ã³ïŒCSS Gridã¯ãã®ã·ããªãªã«æé©ã§ããç¹å®ã®æ°ã®åãšè¡ãæã€ã°ãªãããå®çŸ©ããå補åãã°ãªããå ã«é 眮ã§ããŸããããã«ãããèŠèŠçã«é åçã§æŽçããã補åãªã¹ãããŒãžãäœæã§ããŸãã
<div class="product-grid">
<div class="product">Product 1</div>
<div class="product">Product 2</div>
<div class="product">Product 3</div>
<div class="product">Product 4</div>
<div class="product">Product 5</div>
<div class="product">Product 6</div>
</div>
<style>
.product-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
grid-gap: 20px;
}
.product {
padding: 20px;
border: 1px solid #ccc;
}
</style>
äŸ3ïŒãµã€ãããŒã¬ã€ã¢ãŠã
ã·ããªãªïŒã¡ã€ã³ã³ã³ãã³ããšãªã¢ãšãµã€ãããŒãåããWebããŒãžã®äœæã
ãœãªã¥ãŒã·ã§ã³ïŒããã«ã¯GridãŸãã¯Flexboxã®ã©ã¡ãã§ã䜿çšã§ããŸãããGridã¯å šäœçãªæ§é ã®å®çŸ©ã«ãããŠããç°¡åãªã¢ãããŒããæäŸããããšããããããŸããã¡ã€ã³ã³ã³ãã³ãçšã®åãšãµã€ãããŒçšã®åã®2ã€ãå®çŸ©ãããããã®åå ã«ã³ã³ãã³ããé 眮ã§ããŸãã
<div class="container">
<main class="main-content">
<h2>Main Content</h2>
<p>This is the main content of the page.</p>
</main>
<aside class="sidebar">
<h2>Sidebar</h2>
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
</ul>
</aside>
</div>
<style>
.container {
display: grid;
grid-template-columns: 70% 30%;
grid-gap: 20px;
}
.sidebar {
background-color: #f0f0f0;
padding: 20px;
}
</style>
äŸ4ïŒããã²ãŒã·ã§ã³ã¡ãã¥ãŒ
ã·ããªãªïŒå°ããç»é¢ã§ãã³ããŒã¬ãŒã¡ãã¥ãŒã«æããããŸããæ°Žå¹³ããã²ãŒã·ã§ã³ã¡ãã¥ãŒã®äœæã
ãœãªã¥ãŒã·ã§ã³ïŒFlexboxã¯ãæ°Žå¹³ããã²ãŒã·ã§ã³ã¡ãã¥ãŒã®äœæã«é©ããŠããŸãã`flex-direction: row`ã䜿çšããŠã¡ãã¥ãŒã¢ã€ãã ãè¡ã«äžŠã¹ã`justify-content`ã䜿çšããŠãããã®éã®ã¹ããŒã¹ãå¶åŸ¡ã§ããŸããå°ããç»é¢ã®ãã³ããŒã¬ãŒã¡ãã¥ãŒã«ã€ããŠã¯ãJavaScriptã䜿çšããŠã¡ãã¥ãŒã¢ã€ãã ã®è¡šç€ºãåãæ¿ããFlexboxã䜿çšããŠãã³ããŒã¬ãŒã¡ãã¥ãŒå ã®ã¢ã€ãã ãé 眮ã§ããŸãã
äŸ5ïŒãã©ãŒã ã¬ã€ã¢ãŠã
ã·ããªãªïŒã©ãã«ãšå ¥åãã£ãŒã«ããæã€ãã©ãŒã ã®æ§é åã
ãœãªã¥ãŒã·ã§ã³ïŒå¯äžã®æ¹æ³ã§ã¯ãããŸããããFlexboxã¯ãç¹ã«åçŽãªãã©ãŒã ã¬ã€ã¢ãŠãã§ã¯å¹æçã§ããGridããã©ãã«ãšå ¥åãã£ãŒã«ãã®é çœ®ãæ£ç¢ºã«å¶åŸ¡ããå¿ èŠãããè€éãªãã©ãŒã ã§ã¯äœ¿çšã§ããŸãã
ãã¹ããã©ã¯ãã£ã¹ãšãã³ã
- é©åãªããŒã«ã§å§ããïŒ2次å ã¬ã€ã¢ãŠãã«ã¯Gridã1次å ã¬ã€ã¢ãŠãã«ã¯FlexboxãéžæããŸãã
- GridãšFlexboxãçµã¿åãããïŒäž¡æ¹ã®ãã¯ãããžãŒãäžç·ã«äœ¿çšããããšãæããªãã§ãã ãããGridã䜿çšããŠå šäœçãªããŒãžæ§é ãäœæããFlexboxã䜿çšããŠåã ã®ã³ã³ããŒãã³ãå ã®ã¢ã€ãã ãé 眮ã§ããŸãã
- ã»ãã³ãã£ãã¯HTMLã䜿çšããïŒé©åãªHTMLèŠçŽ ã䜿çšããŠã³ã³ãã³ããæ§é åããŸããããã«ãããã³ãŒãã¯ããã¢ã¯ã»ã¹ãããããä¿å®ãããããªããŸãã
- ããŸããŸãªããã€ã¹ã§ãã¹ãããïŒã¬ã€ã¢ãŠããã¬ã¹ãã³ã·ãã§ãããããŸããŸãªç»é¢ãµã€ãºãããã€ã¹ã§ããŸãæ©èœããããšã確èªããŸãã
- ã¢ã¯ã»ã·ããªãã£ãèæ ®ããïŒã¬ã€ã¢ãŠããé害ã®ãããŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããé©åãªARIA屿§ã䜿çšããã³ã³ãã³ããèªã¿ããããããã²ãŒãå¯èœã§ããããšã確èªããŸãã
ã°ããŒãã«ãªèæ ®äºé
ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã®Webãµã€ããèšèšããéã¯ã次ã®ç¹ãèæ ®ããŠãã ããã
- èšèªïŒã¬ã€ã¢ãŠããããŸããŸãªèšèªãããã¹ãã®æ¹åïŒäŸïŒã¢ã©ãã¢èªãããã©ã€èªã®ãããªå³ããå·Šãžã®èšèªïŒããµããŒãããŠããããšã確èªããŸããFlexboxãšGridã¯ã`direction`ããããã£ã䜿çšããŠããã¹ãã®æ¹åã®å€æŽãåŠçã§ããŸãã
- ã³ã³ãã³ãå¯åºŠïŒããŸããŸãªæåã§ã³ã³ãã³ãå¯åºŠã®å¥œã¿ãããå ŽåããããŸãããŠãŒã¶ãŒãWebãµã€ãã®ã³ã³ãã³ãå¯åºŠã調æŽãããªãã·ã§ã³ãæäŸããããšãæ€èšããŠãã ããã
- æåçæ £ç¿ïŒè²ãç»åãã¬ã€ã¢ãŠãã«é¢ããæåçæ £ç¿ãèªèããŠãã ãããæ»æçãŸãã¯æåçã«äžå¿«ãªå¯èœæ§ã®ããèŠçŽ ã®äœ¿çšãé¿ããŠãã ãããããšãã°ãè²ã®é¢é£ä»ãã¯æåã«ãã£ãŠå€§ããç°ãªããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒWebãµã€ããããŸããŸãªåœã®é害ã®ãããŠãŒã¶ãŒã«ãšã£ãŠã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããWCAGïŒWeb Content Accessibility GuidelinesïŒãªã©ã®åœéçãªã¢ã¯ã»ã·ããªãã£æšæºãéµå®ããŠãã ããã
- ã¬ã¹ãã³ã·ãïŒããŸããŸãªå°åã§äžè¬çã«äœ¿çšãããŠããããã€ã¹ã§Webãµã€ãããã¹ãããŸããã¢ãã€ã«å©çšã¯åœã«ãã£ãŠå€§ããç°ãªããŸãã
çµè«
CSS GridãšFlexboxã¯ãã¢ãã³ãªWebã¬ã€ã¢ãŠããæ§ç¯ããããã®åŒ·åãªããŒã«ã§ãããããã®é·æãšçæãçè§£ããããšã¯ãé©åãªããŒã«ãéžæããäžã§äžå¯æ¬ ã§ããFlexboxã¯ãåäžã®ãã£ã¡ã³ã·ã§ã³ã§ã¢ã€ãã ãé 眮ããããšã«åªããŠãããããã²ãŒã·ã§ã³ã¡ãã¥ãŒãããŒã«ããŒããã®ä»ã®UIã³ã³ããŒãã³ãã®äœæã«çæ³çã§ããäžæ¹ãGridã¯ãè€éãªã°ãªããããŒã¹ã®ã¬ã€ã¢ãŠããç°¡åã«äœæã§ãã2次å ã¬ã€ã¢ãŠãã·ã¹ãã ã§ããäž¡æ¹ã®ãã¯ãããžãŒãç¿åŸããããšã§ãèŠèŠçã«é åçã§ãã¬ã¹ãã³ã·ãã§ãã¢ã¯ã»ã¹å¯èœã§ããã¹ãŠã®äººã«åªãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãæäŸããWebãµã€ããäœæã§ããŸãã
ã©ã¡ããäžæ¹ã«éå®ããªãã§ãã ããïŒæé«ã®Webéçºè ã¯ãæŽç·Žãããã¬ã¹ãã³ã·ããªãã¶ã€ã³ãäœæããããã«ãFlexboxãšGridã®äž¡æ¹ãçè§£ãããã°ãã°é£æºããŠæŽ»çšããŸããå®éšããç·Žç¿ãããããã®ã¬ã€ã¢ãŠãããŒã«ã®åãæŽ»çšããŠãã ããïŒ