CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ãç¿åŸããåçã§ã¬ã¹ãã³ã·ããªWebã¬ã€ã¢ãŠããå®çŸãçžå¯ŸçãªèŠçŽ é 眮ãå®çšäŸããã©ãŠã¶äºææ§ãåŠã³ãã°ããŒãã«ãªWebéçºã«æŽ»ãããŸãããã
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ïŒã¢ãã³Webãã¶ã€ã³ã§åçãªèŠçŽ é 眮ãå®çŸ
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ãWebããŒãžäžã®èŠçŽ ãä»ã®èŠçŽ ã«å¯ŸããŠçžå¯Ÿçã«é 眮ããããšãå¯èœã«ãã匷åãªæ©èœã§ãåçã§ã¬ã¹ãã³ã·ããªã¬ã€ã¢ãŠããäœæããŸããããã«ãããWebãã¶ã€ã³ã«ãšããµã€ãã£ã³ã°ãªå¯èœæ§ãåºãããéçºè ã¯ããã€ã³ã¿ã©ã¯ãã£ãã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšãæ§ç¯ã§ããŸãã
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ãšã¯ïŒ
ã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ãäž»ã«CSSã®`anchor()`颿°ãšé¢é£ããããã£ã«ãã£ãŠé§åããããã¢ã³ã«ãŒããšåŒã°ããä»ã®èŠçŽ ã®ãžãªã¡ããªã«åºã¥ããŠèŠçŽ ãé 眮ããã¡ã«ããºã ãæäŸããŸããããã¯ãäžæ¹ã®èŠçŽ ã®äœçœ®ãããäžæ¹ã®äœçœ®ã«åºã¥ããŠåçã«èª¿æŽãããã2ã€ã®èŠçŽ ãçµã³ã€ãããã¶ãŒïŒã€ãªãç¶±ïŒã®ãããªãã®ã ãšèããŠãã ãããããã¯ãã¢ã³ã«ãŒèŠçŽ ã®å®éã«ã¬ã³ããªã³ã°ãããäœçœ®ãšãµã€ãºãèæ ®ãããããåçŽãªçžå¯Ÿé 眮ã絶察é 眮ãè¶ ãããã®ã§ãã
åºå®åº§æšã芪åé¢ä¿ã«äŸåããåŸæ¥ã®CSSé çœ®æ¹æ³ãšã¯ç°ãªããã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ããæµåçã§é©å¿æ§ã®ããã¬ã€ã¢ãŠããå¯èœã«ããŸãããã¥ãŒããŒãå ã«çãŸãããã«èªåçã«åé 眮ãããããŒã«ãããããã£ãŒãã®ç¹å®ã®éšåãåžžã«æã瀺ãã³ãŒã«ã¢ãŠãããŸãã¯ç¹å®ã®ã³ã³ããã®ã¹ã¯ããŒã«äœçœ®ã«åºã¥ããŠåçã«äœçœ®ã調æŽããã¹ãã£ãããŒèŠçŽ ãæ³åããŠã¿ãŠãã ããã
äž»èŠãªæŠå¿µãšããããã£
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã«ã¯ãããã€ãã®äž»èŠãªæŠå¿µãšããããã£ãé¢ãã£ãŠããŸãïŒ
- `anchor-name` ããããã£ïŒ ãã®ããããã£ã¯ãèŠçŽ ã®ã¢ã³ã«ãŒãã€ã³ããå®çŸ©ããŸããèŠçŽ ã«äžæã®ååãå²ãåœãŠãä»ã®èŠçŽ ããããã¢ã³ã«ãŒãšããŠåç §ã§ããããã«ããŸããäŸïŒ`anchor-name: --my-anchor;`
- `position: absolute` ãŸã㯠`position: fixed` ã®èŠä»¶ïŒ é 眮ãããèŠçŽ ïŒã被é 眮èŠçŽ ãïŒã«ã¯ã`position: absolute` ãŸã㯠`position: fixed` ã®ãããããé©çšãããŠããå¿ èŠããããŸããããã¯ãã¢ã³ã«ãŒããžã·ã§ãã³ã°ãã¢ã³ã«ãŒã«å¯Ÿããæ£ç¢ºãªé 眮ã䌎ãããã§ãã
- `anchor()` 颿°ïŒ ãã®é¢æ°ã¯ã被é 眮èŠçŽ ã®`top`ã`right`ã`bottom`ã`left`ããããã£å ã§äœ¿çšãããã¢ã³ã«ãŒã«å¯Ÿãããã®äœçœ®ãæå®ããŸããåºæ¬çãªæ§æã¯`anchor(anchor-name, edge, fallback-value)`ã§ãã`edge`ã¯ã¢ã³ã«ãŒããã¯ã¹ã®ç¹å®ã®èŸºãè§ïŒäŸïŒ`top`, `bottom`, `left`, `right`, `center`, `top left`, `bottom right`ïŒã衚ããŸãã`fallback-value`ã¯ãã¢ã³ã«ãŒèŠçŽ ãèŠã€ãããªãããã¬ã³ããªã³ã°ãããŠããªãå Žåã«ããã©ã«ãã®äœçœ®ãæäŸããŸãã
- äºåå®çŸ©ãããã¢ã³ã«ãªã³ã°å€ïŒ CSSã¯ã`top`ã`bottom`ã`left`ã`right`ã`center`ã`top left`ã`top right`ã`bottom left`ã`bottom right`ãªã©ãäžè¬çãªã¢ã³ã«ãªã³ã°ã·ããªãªã®ããã«äºåå®çŸ©ãããããŒã¯ãŒããæäŸããŠãããé »ç¹ã«äœ¿çšãããé çœ®æ§æã®æ§æãç°¡çŽ åããŸãã
å®çšçãªãŠãŒã¹ã±ãŒã¹ãšäŸ
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã®åã瀺ãããã«ãããã€ãã®å®çšçãªãŠãŒã¹ã±ãŒã¹ãšã³ãŒãäŸãèŠãŠãããŸãããïŒ
1. åçãªããŒã«ããã
ããŒã«ãããã¯ãèŠçŽ ã«ããŠã¹ãªãŒããŒãããšãã«è¿œå æ å ±ãæäŸããäžè¬çãªUIèŠçŽ ã§ããã¢ã³ã«ãŒããžã·ã§ãã³ã°ã䜿çšãããšãã¿ãŒã²ããèŠçŽ ãç»é¢ã®ç«¯ã«è¿ããŠããããŒã«ããããåžžã«ãã¥ãŒããŒãå ã«åãŸãããã«ããããšãã§ããŸãã
äŸïŒ
/* Anchor Element */
.target-element {
position: relative;
anchor-name: --target;
}
/* Tooltip */
.tooltip {
position: absolute;
top: anchor(--target, bottom);
left: anchor(--target, left);
background-color: #f0f0f0;
border: 1px solid #ccc;
padding: 5px;
z-index: 10;
}
ãã®äŸã§ã¯ã`.tooltip`ã¯`.target-element`ã®äžã«é 眮ããããã®å·Šç«¯ã«æããããŸãã`.target-element`ãç»é¢ã®äžéšè¿ãã«ããå ŽåãããŒã«ãããã¯èªåçã«ãã®äœçœ®ã調æŽããŠãã¥ãŒããŒãå ã«çãŸããŸãïŒãšããžã±ãŒã¹ã广çã«åŠçããã«ã¯ãããªãããžãã¯ãå¿ èŠã§ãïŒã
2. ã³ãŒã«ã¢ãŠããšæ³šé
ã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ããã£ãŒããã°ã©ãããŸãã¯ç»åäžã®ç¹å®ã®èŠçŽ ãæã瀺ãã³ãŒã«ã¢ãŠããæ³šéãäœæããã®ã«æé©ã§ããã¬ã€ã¢ãŠãã倿Žããããšãã³ãŒã«ã¢ãŠãã¯åçã«ãã®äœçœ®ã調æŽããŸãã
äŸïŒ
/* Anchor Element (e.g., a point on a chart) */
.chart-point {
position: absolute;
top: 50%;
left: 75%;
anchor-name: --chart-point-1;
width: 10px;
height: 10px;
background-color: red;
border-radius: 50%;
}
/* Callout */
.callout {
position: absolute;
top: anchor(--chart-point-1, top);
left: anchor(--chart-point-1, right);
transform: translateX(10px) translateY(-50%); /* Adjust for visual alignment */
background-color: white;
border: 1px solid black;
padding: 5px;
}
ããã§ã¯ã`.callout`ã¯`.chart-point`ã®å³åŽã«é 眮ãããåçŽæ¹åã«äžå€®æããããŠããŸãããã£ãŒãã®ã¬ã€ã¢ãŠãã倿ŽãããŠããã³ãŒã«ã¢ãŠãã¯ç¹å®ã®ããŒã¿ãã€ã³ãã«åºå®ããããŸãŸã«ãªããŸãã
3. åçãªäœçœ®æå®ãæã€ã¹ãã£ãããŒèŠçŽ
åŸæ¥ãç¹å®ã®ã³ã³ããã®ã¹ã¯ããŒã«äœçœ®ã«åºã¥ããŠåçã«äœçœ®ã調æŽããã¹ãã£ãããŒèŠçŽ ãäœæããã«ã¯ãJavaScriptãå¿ èŠã§ãããã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ãCSSã®ã¿ã®ãœãªã¥ãŒã·ã§ã³ãæäŸããŸãã
äŸïŒ
/* Anchor Element (the container that triggers the sticky behavior) */
.scrollable-container {
height: 200px;
overflow-y: scroll;
position: relative;
}
.sticky-trigger {
position: absolute;
top: 100px;
anchor-name: --sticky-trigger;
}
/* Sticky Element */
.sticky-element {
position: fixed;
top: anchor(--sticky-trigger, bottom, 0);
left: 20px;
background-color: lightblue;
padding: 10px;
}
ãã®äŸã§ã¯ã`.sticky-trigger`èŠçŽ ã`.scrollable-container`ã®äžéšã«éãããšã`.sticky-element`ããã¥ãŒããŒãã«åºå®ãããŸãã`0`ã®`fallback-value`ã«ãããã¢ã³ã«ãŒããŸã 衚瀺ãããŠããªãå Žåãã¹ãã£ãããŒèŠçŽ ã¯æåã«ãã¥ãŒããŒãã®äžéšã«é 眮ãããŸããããè€éãªã·ããªãªã§ã¯ãã¹ã¯ããŒã«å¯èœãªã³ã³ããã®å¢çã«å¯Ÿããã¹ãã£ãããŒèŠçŽ ã®äœçœ®ãããæ£ç¢ºã«å¶åŸ¡ããããã«ãã¢ã³ã«ãŒå€ãšå ±ã«`calc()`ã䜿çšããããšãèããããŸãã
4. ã³ã³ããã¹ãã¡ãã¥ãŒãšããããªãŒããŒ
è€éãªã€ã³ã¿ãŒãã§ãŒã¹ãæ§ç¯ããéãã³ã³ããã¹ãã¡ãã¥ãŒãããããªãŒããŒããã°ãã°å¿ èŠã«ãªããŸããã¢ã³ã«ãŒããžã·ã§ãã³ã°ã䜿çšãããšãããŒãžã®ã¬ã€ã¢ãŠãã倿ŽãããŠãããããã®ã¡ãã¥ãŒãããªã¬ãŒèŠçŽ ã«å¯ŸããŠæ£ããå Žæã«è¡šç€ºãããããã«ããããšãã§ããŸãã
äŸïŒ
/* Trigger Element */
.trigger-element {
position: relative;
anchor-name: --menu-trigger;
}
/* Context Menu */
.context-menu {
position: absolute;
top: anchor(--menu-trigger, bottom);
left: anchor(--menu-trigger, left);
background-color: white;
border: 1px solid #ccc;
padding: 5px;
display: none; /* Initially hidden */
}
/* Show menu on click (requires JavaScript to toggle the display property) */
.trigger-element:active + .context-menu {
display: block;
}
ãã®äŸã§ã¯ã`.context-menu`ã`.trigger-element`ã®äžã«é 眮ããããã®å·Šç«¯ã«æããããŸãããŠãŒã¶ãŒã®æäœïŒäŸïŒããªã¬ãŒèŠçŽ ã®ã¯ãªãã¯ïŒãåŠçããã¡ãã¥ãŒã®è¡šç€º/é衚瀺ãåãæ¿ããã«ã¯JavaScriptãå¿ èŠã§ãã
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã䜿çšããã¡ãªãã
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã䜿çšãããšãããã€ãã®å©ç¹ããããŸãïŒ
- ã¬ã¹ãã³ã·ãæ§ã®åäžïŒ ã¢ã³ã«ãŒããžã·ã§ãã³ã°ã«ãããèŠçŽ ã¯ã¬ã€ã¢ãŠãã«åºã¥ããŠåçã«äœçœ®ã調æŽã§ããããã¬ã¹ãã³ã·ãã§é©å¿æ§ã®ãããã¶ã€ã³ãå®çŸããŸãã
- JavaScriptãžã®äŸå床ã®äœæžïŒ 以åã¯JavaScriptãå¿ èŠã ã£ãå€ãã®ã¬ã€ã¢ãŠãã·ããªãªããCSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã䜿çšããŠå®è£ ã§ããããã«ãªããã³ãŒãããŒã¹ãç°¡çŽ åãããããã©ãŒãã³ã¹ãåäžããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åäžïŒ åçãªããŒã«ããããã³ãŒã«ã¢ãŠããã¹ãã£ãããŒèŠçŽ ã¯ãæèã«å¿ããæ å ±ãæäŸããããã²ãŒã·ã§ã³ãæ¹åããããšã§ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãå€§å¹ ã«åäžãããããšãã§ããŸãã
- 宣èšçãªã¢ãããŒãïŒ CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ãèŠçŽ éã®é¢ä¿ãå®çŸ©ããããã®å®£èšçãªæ¹æ³ãæäŸããã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããŸãã
ãã©ãŠã¶ã®äºææ§ãšãã©ãŒã«ããã¯
2024幎åŸåçŸåšãCSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ãŸã æ¯èŒçæ°ããæ©èœã§ããããã¹ãŠã®ãã©ãŠã¶ã§å®å šã«ãµããŒããããŠããããã§ã¯ãããŸãããæ¬çªç°å¢ã§ã¢ã³ã«ãŒããžã·ã§ãã³ã°ãå®è£ ããåã«ãCan I useã®ãããªãŠã§ããµã€ãã§çŸåšã®ãã©ãŠã¶äºææ§ã¹ããŒã¿ã¹ã確èªããããšãéèŠã§ãã
ãã¹ãŠã®ãã©ãŠã¶ã§äžè²«ãããšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«ã以äžã®ãã©ãŒã«ããã¯æŠç¥ãæ€èšããŠãã ããïŒ
- `@supports`ã«ããæ©èœæ€åºïŒ `@supports`ã«ãŒã«ã䜿çšããŠããã©ãŠã¶ãã¢ã³ã«ãŒããžã·ã§ãã³ã°ããµããŒãããŠãããã©ãããæ€åºããŸãããµããŒãããŠããªãå Žåã¯ãåŸæ¥ã®äœçœ®æå®æ¹æ³ãJavaScriptã䜿çšããŠåæ§ã®ã¬ã€ã¢ãŠããå®çŸãã代æ¿ã®CSSã¹ã¿ã€ã«ãæäŸããŸãã
- èšå®ã®ããã®CSS倿°ïŒ CSS倿°ãå©çšããŠã¢ã³ã«ãŒåãšãã©ãŒã«ããã¯å€ãä¿åããŸããããã«ãããã¢ã³ã«ãŒããžã·ã§ãã³ã°ãšãã©ãŒã«ããã¯ã¹ã¿ã€ã«ã®åãæ¿ãã容æã«ãªããŸãã
- ããªãã£ã«ïŒæ³šæããŠäœ¿çšïŒïŒ æ°ããCSSæ©èœã§ã¯ããŸãäžè¬çã§ã¯ãããŸããããããªãã£ã«ã䜿çšããŠå€ããã©ãŠã¶ã§ã¢ã³ã«ãŒããžã·ã§ãã³ã°ã®åäœããšãã¥ã¬ãŒãããããšãã§ããŸãããã ããããªãã£ã«ã¯å€§ããªãªãŒããŒãããã远å ããå¯èœæ§ãããããã€ãã£ãå®è£ ãå®å šã«åçŸã§ããªãå ŽåããããŸããããªãã£ã«ã䜿çšããåã«ãããã©ãŒãã³ã¹ãžã®åœ±é¿ãæ éã«è©äŸ¡ããŠãã ããã
- ããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãïŒ ãŸãã¢ã³ã«ãŒããžã·ã§ãã³ã°ãªãã§ãååã«æ©èœããããã«ãŠã§ããµã€ããèšèšããããããµããŒããããã©ãŠã¶ã«å¯ŸããŠäœéšãåäžãããŸããããã«ããããã¹ãŠã®ãŠãŒã¶ãŒãã³ã¢æ©èœã«ã¢ã¯ã»ã¹ã§ããã¢ãã³ãªãã©ãŠã¶ã䜿çšãããŠãŒã¶ãŒã¯ããæŽç·Žãããåçãªã¬ã€ã¢ãŠãã享åã§ããŸãã
@supports (anchor-name: --test) {
/* Anchor positioning styles */
}
@supports not (anchor-name: --test) {
/* Fallback styles */
}
广çãªã¢ã³ã«ãŒããžã·ã§ãã³ã°ã®ããã®ãã³ã
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã广çã«äœ¿çšããããã®ãã³ããããã€ã玹ä»ããŸãïŒ
- ã¬ã€ã¢ãŠããèšç»ããïŒ ã³ãŒããæžãå§ããåã«ãã¢ã³ã«ãŒãããèŠçŽ éã®é¢ä¿ãæ éã«èšç»ããŠãã ãããã¬ã€ã¢ãŠããç°ãªãç»é¢ãµã€ãºãåãã«ã©ã®ããã«é©å¿ããããèæ ®ããŸãã
- æå³ã®ããã¢ã³ã«ãŒåãéžã¶ïŒ ã³ãŒãã®å¯èªæ§ãšä¿å®æ§ãåäžãããããã«ãèšè¿°çã§äžè²«æ§ã®ããã¢ã³ã«ãŒåã䜿çšããŸããäŸãã°ã`--anchor1`ã®ä»£ããã«`--product-image-anchor`ã䜿çšããŸãã
- ãã©ãŒã«ããã¯å€ã䜿çšããïŒ ã¢ã³ã«ãŒèŠçŽ ãèŠã€ãããªããã¬ã³ããªã³ã°ãããŠããªãå Žåã«ãé 眮ãããèŠçŽ ã劥åœãªããã©ã«ãäœçœ®ãæã€ããã«ãåžžã«`anchor()`颿°ã«ãã©ãŒã«ããã¯å€ãæäŸããŸãã
- Z-Indexãèæ ®ããïŒ ç¹ã«`absolute`ãŸãã¯`fixed`ã§é 眮ãããèŠçŽ ãæ±ãéã«ã¯ã`z-index`ããããã£ã«æ³šæããŠãã ãããã¢ã³ã«ãŒãããèŠçŽ ãã¹ã¿ããã³ã°é åºã§æ£ããé 眮ãããããã«ããŸãã
- 培åºçã«ãã¹ãããïŒ äžè²«æ§ã®ããä¿¡é Œæ§ã®é«ããšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«ãããŸããŸãªãã©ãŠã¶ãããã€ã¹ã§ã¢ã³ã«ãŒããžã·ã§ãã³ã°ã®å®è£ ããã¹ãããŸãã
- åç調æŽã«CSS倿°ã䜿çšããïŒ CSS倿°ã`calc()`åŒå ã®ã¢ã³ã«ãŒå€ãšå ±ã«äœ¿çšããŠãç»é¢ãµã€ãºããŠãŒã¶ãŒã®å¥œã¿ãªã©ã®ããŸããŸãªèŠå ã«åºã¥ããŠåçãªèª¿æŽãè¡ãããšãã§ããŸããããã«ãããé 眮åäœããã现ããå¶åŸ¡ã§ããŸãã
CSS Houdiniãšå°æ¥ã®å¯èœæ§
CSS Houdiniã¯ãCSSãšã³ãžã³ã®äžéšãå ¬éããäœã¬ãã«APIã®éåã§ãããéçºè ã匷åãªæ°ããæ¹æ³ã§CSSãæ¡åŒµããã³ã«ã¹ã¿ãã€ãºã§ããããã«ããŸããHoudiniã¯ãã«ã¹ã¿ã ã¢ã³ã«ãªã³ã°é¢æ°ã®äœæããè€éãªèšç®ãã¢ãã¡ãŒã·ã§ã³ã«åºã¥ããŠã¢ã³ã«ãŒäœçœ®ãåçã«èª¿æŽãããªã©ãã¢ã³ã«ãŒããžã·ã§ãã³ã°ã«ãšããµã€ãã£ã³ã°ãªå¯èœæ§ãéããŸãã
Houdiniã®ãµããŒãã¯ãŸã é²åäžã§ãããããã¯CSSã®æªæ¥ã代衚ãããã®ã§ãããã¢ã³ã«ãŒããžã·ã§ãã³ã°ããã®ä»ã®é«åºŠãªã¬ã€ã¢ãŠãæè¡ã®é²åã«ãããŠéèŠãªåœ¹å²ãæããããšã«ãªãã§ãããã
çµè«
CSSã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ãåçã§ã¬ã¹ãã³ã·ããªWebã¬ã€ã¢ãŠããäœæããããã®è²ŽéãªããŒã«ã§ããäž»èŠãªæŠå¿µãããããã£ããŠãŒã¹ã±ãŒã¹ãçè§£ããããšã§ãéçºè ã¯Webãã¶ã€ã³ã®æ°ããªå¯èœæ§ãè§£ãæŸã¡ãããé åçã§ãŠãŒã¶ãŒãã¬ã³ããªãŒãªäœéšãæ§ç¯ã§ããŸãããã©ãŠã¶ã®äºææ§ã¯äŸç¶ãšããŠèæ ®äºé ã§ãããããã°ã¬ãã·ããšã³ãã³ã¹ã¡ã³ãæŠç¥ãšçµã¿åãããããšã§ãã¢ã³ã«ãŒããžã·ã§ãã³ã°ã®å©ç¹ã¯ãããã³ããšã³ãéçºè ã®ããŒã«ãããã«å ãã䟡å€ã®ãããã®ã«ãªããŸãããã©ãŠã¶ã®ãµããŒããåäžããCSS Houdiniãæ®åããã«ã€ããŠãã¢ã³ã«ãŒããžã·ã§ãã³ã°ã¯ééããªãçŸä»£ã®Webéçºã«ãããŠããã«äžå¯æ¬ ãªéšåãšãªãã§ãããããã®åŒ·åãªæ©èœãåãå ¥ããWebãã¶ã€ã³ã®èœåãæ°ããªé«ã¿ãžãšåŒãäžããŠãã ããïŒ
ãããªãåŠç¿ãªãœãŒã¹
- MDN Web Docs: anchor-name
- CSS Anchor Positioning Module Level 1 (Editor's Draft)
- Can I use... Support tables for HTML5, CSS3, etc ('anchor-positioning'ã§æ€çŽ¢)
- web.dev (Googleã®WebéçºãªãœãŒã¹)