Visual Viewport APIã®å æ¬çã¬ã€ããã¬ã€ã¢ãŠããã¥ãŒããŒãæ å ±ãæŽ»çšãã倿§ãªããã€ã¹ã§ã¬ã¹ãã³ã·ããªWebéçºãšåªãããŠãŒã¶ãŒäœéšãå®çŸããæ¹æ³ã解説ããŸãã
Visual Viewport APIã®è§£æïŒã¬ã€ã¢ãŠããã¥ãŒããŒãæ å ±ãæŽ»çšãã
Visual Viewport APIã¯ãçã«ã¬ã¹ãã³ã·ãã§é©å¿æ§ã®é«ãWebäœéšãåµé ããããšãç®æãWebéçºè ã«ãšã£ãŠåŒ·åãªããŒã«ã§ããããã«ããããŠãŒã¶ãŒã«çŸåšè¡šç€ºãããŠããWebããŒãžã®éšåã§ããããžã¥ã¢ã«ãã¥ãŒããŒãã«ããã°ã©ã ã§ã¢ã¯ã»ã¹ããæäœããããšãã§ããŸããããžã¥ã¢ã«ãã¥ãŒããŒãèªäœã¯çŽæ¥èŠããé åã§ããããã®APIã¯ãçŸåšç»é¢å€ã«ããé åãå«ãWebããŒãžå šäœã衚ãã¬ã€ã¢ãŠããã¥ãŒããŒãã«é¢ããéèŠãªæ å ±ãæäŸããŸããã¬ã€ã¢ãŠããã¥ãŒããŒããçè§£ããããšã¯ãç¹ã«ã¢ãã€ã«ããã€ã¹ãããŸããŸãªç»é¢ãµã€ãºãæ±ãéã«ãå€ãã®é«åºŠãªWebéçºæè¡ã«ãšã£ãŠäžå¯æ¬ ã§ãã
ã¬ã€ã¢ãŠããã¥ãŒããŒããšã¯ïŒ
ã¬ã€ã¢ãŠããã¥ãŒããŒãã¯ãæŠå¿µçã«ã¯ãWebããŒãžãã¬ã³ããªã³ã°ãããå®å šãªãã£ã³ãã¹ã§ããç¹ã«ã¢ãã€ã«ããã€ã¹ã§ã¯ãéåžžããžã¥ã¢ã«ãã¥ãŒããŒãããã倧ãããªããŸãããã©ãŠã¶ã¯ã¬ã€ã¢ãŠããã¥ãŒããŒãã䜿çšããŠãããŒãžã®åæãµã€ãºãšã¹ã±ãŒã«ã決å®ããŸãããºãŒã ãã¹ã¯ããŒã«ãé©çšãããåã®ãåºç€ãšãªãããã¥ã¡ã³ããµã€ãºãšèããŠãã ãããäžæ¹ãããžã¥ã¢ã«ãã¥ãŒããŒãã¯ããŠãŒã¶ãŒãã¬ã€ã¢ãŠããã¥ãŒããŒããèŠãããã®çªã§ãã
ããžã¥ã¢ã«ãã¥ãŒããŒããšã¬ã€ã¢ãŠããã¥ãŒããŒãã®é¢ä¿ã¯ãHTMLã®viewportã¡ã¿ã¿ã°ã«ãã£ãŠå®çŸ©ãããŸããæ£ããèšå®ãããviewportã¡ã¿ã¿ã°ããªããšãã¢ãã€ã«ãã©ãŠã¶ã¯ããŠã§ããµã€ããã¯ããã«å°ããç»é¢çšã«èšèšããããã®ããã«ã¬ã³ããªã³ã°ãããŠãŒã¶ãŒã¯ã³ã³ãã³ããèªãããã«ãºãŒã ã€ã³ããå¿ èŠãåºãŠããŸããããã¯ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®äœäžã«ã€ãªãããŸãã
äŸãã°ãå¹ 980ãã¯ã»ã«ã®ã¬ã€ã¢ãŠããã¥ãŒããŒãã§èšèšããããŠã§ããµã€ããèããŠã¿ãŸããããç©ççãªç»é¢å¹ ã375ãã¯ã»ã«ã®ã¢ãã€ã«ããã€ã¹ã§ã¯ããã©ãŠã¶ã¯æåã980ãã¯ã»ã«å¹ ã®ç»é¢ã§èŠãŠãããã®ããã«ããŒãžãã¬ã³ããªã³ã°ãããããããŸããããã®å ŽåããŠãŒã¶ãŒã¯ã³ã³ãã³ããã¯ã£ãããšèŠãããã«ãºãŒã ã€ã³ããå¿ èŠããããŸããVisual Viewport APIã䜿çšãããšãäž¡æ¹ã®ãã¥ãŒããŒãã®ãµã€ãºãšäœçœ®ã«ã¢ã¯ã»ã¹ã§ãããŠãŒã¶ãŒã®ããã€ã¹ã«æé©åããããã«ã¬ã€ã¢ãŠããšã¹ã¿ã€ãªã³ã°ãåçã«èª¿æŽã§ããŸãã
Visual Viewport APIã§ã¬ã€ã¢ãŠããã¥ãŒããŒãæ å ±ã«ã¢ã¯ã»ã¹ãã
Visual Viewport APIã¯ãã¬ã€ã¢ãŠããã¥ãŒããŒãã«é¢ããæ
å ±ãååŸã§ããããã€ãã®ããããã£ãæäŸããŸãããããã®ããããã£ã¯window.visualViewportãªããžã§ã¯ããä»ããŠå©çšã§ããŸãïŒäœ¿çšããåã«ãã©ãŠã¶ã®ãµããŒãã確èªããŠãã ããïŒïŒ
offsetLeft: ã¬ã€ã¢ãŠããã¥ãŒããŒãã®å·Šç«¯ããããžã¥ã¢ã«ãã¥ãŒããŒãã®å·Šç«¯ãŸã§ã®è·é¢ïŒCSSãã¯ã»ã«åäœïŒãoffsetTop: ã¬ã€ã¢ãŠããã¥ãŒããŒãã®äžç«¯ããããžã¥ã¢ã«ãã¥ãŒããŒãã®äžç«¯ãŸã§ã®è·é¢ïŒCSSãã¯ã»ã«åäœïŒãpageLeft: ããŒãžã®åç¹ãåºæºãšããããžã¥ã¢ã«ãã¥ãŒããŒãã®å·Šç«¯ã®x座æšïŒCSSãã¯ã»ã«åäœïŒã泚æïŒãã®å€ã«ã¯ã¹ã¯ããŒã«ãå«ãŸããå ŽåããããŸããpageTop: ããŒãžã®åç¹ãåºæºãšããããžã¥ã¢ã«ãã¥ãŒããŒãã®äžç«¯ã®y座æšïŒCSSãã¯ã»ã«åäœïŒã泚æïŒãã®å€ã«ã¯ã¹ã¯ããŒã«ãå«ãŸããå ŽåããããŸããwidth: ããžã¥ã¢ã«ãã¥ãŒããŒãã®å¹ ïŒCSSãã¯ã»ã«åäœïŒãheight: ããžã¥ã¢ã«ãã¥ãŒããŒãã®é«ãïŒCSSãã¯ã»ã«åäœïŒãscale: çŸåšã®ãºãŒã åçãå€ã1ã®å Žåã¯ãºãŒã ãªãã瀺ããŸãã1ãã倧ããå€ã¯ãºãŒã ã€ã³ã1æªæºã®å€ã¯ãºãŒã ã¢ãŠãã瀺ããŸãã
ãããã®ããããã£ã¯*ããžã¥ã¢ã«*ãã¥ãŒããŒãã«çŽæ¥é¢é£ããŠããŸãããããžã¥ã¢ã«ãã¥ãŒããŒããšã¬ã€ã¢ãŠããã¥ãŒããŒãã®é¢ä¿ãçè§£ããããã«ã¯éåžžã«éèŠã§ããscaleãoffsetLeftãoffsetTopãç¥ãããšã§ãããžã¥ã¢ã«ãã¥ãŒããŒãã«å¯Ÿããã¬ã€ã¢ãŠããã¥ãŒããŒãã®å
šäœçãªãµã€ãºãšäœçœ®ã«é¢ããæ
å ±ãæšæž¬ã§ããŸããäŸãã°ã次ã®åŒã䜿çšããŠã¬ã€ã¢ãŠããã¥ãŒããŒãã®å¯žæ³ãèšç®ã§ããŸãïŒãã ããããã¯*è¿äŒŒå€*ã§ããããšã«æ³šæããŠãã ããïŒïŒ
layoutViewportWidth = visualViewport.width / visualViewport.scale;
layoutViewportHeight = visualViewport.height / visualViewport.scale;
ãããã®èšç®ã¯è¿äŒŒå€ã§ããããã©ãŠã¶ã®å®è£
ããã®ä»ã®èŠå ã«ããå®å
šã«æ£ç¢ºã§ã¯ãªãå¯èœæ§ãããããšã«æ³šæããŠãã ãããã¬ã€ã¢ãŠããã¥ãŒããŒãã®æ£ç¢ºãªãµã€ãºã«ã€ããŠã¯ãdocument.documentElement.clientWidthãšdocument.documentElement.clientHeightã䜿çšããŠãã ããã
å®è·µçãªäŸãšãŠãŒã¹ã±ãŒã¹
ã¬ã€ã¢ãŠããã¥ãŒããŒãæ å ±ãçè§£ããããšãéåžžã«äŸ¡å€ã®ããå®è·µçãªã·ããªãªãããã€ãèŠãŠãããŸãããïŒ
1. ã³ã³ãã³ãã®åçãªã¹ã±ãŒãªã³ã°ãšé©å¿
倧ããªç»åãã€ã³ã¿ã©ã¯ãã£ããªå°å³ã衚瀺ããå¿
èŠãããWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããŠãããšæ³åããŠãã ãããããã€ã¹ããºãŒã ã¬ãã«ã«é¢ä¿ãªããã³ã³ãã³ããåžžã«è¡šç€ºç»é¢é åå
ã«åãŸãããã«ãããã§ããããããžã¥ã¢ã«ãã¥ãŒããŒãã®widthãheightãscaleããããã£ã«ã¢ã¯ã»ã¹ããããšã§ãã³ã³ãã³ãã®ãµã€ãºãšäœçœ®ãåçã«èª¿æŽããã¯ã¿åºããåãåãããé²ãããšãã§ããŸããããã¯ãã¬ã³ããªã³ã°ã«JavaScriptãå€çšããã·ã³ã°ã«ããŒãžã¢ããªã±ãŒã·ã§ã³ïŒSPAïŒã«ãšã£ãŠç¹ã«éèŠã§ãã
äŸïŒ
function adjustContent() {
if (!window.visualViewport) return;
const visualViewportWidth = window.visualViewport.width;
const visualViewportHeight = window.visualViewport.height;
const visualViewportScale = window.visualViewport.scale;
const contentElement = document.getElementById('myContent');
// ããžã¥ã¢ã«ãã¥ãŒããŒãã«åºã¥ããŠç®çã®å¹
ãšé«ããèšç®
const desiredWidth = visualViewportWidth / visualViewportScale;
const desiredHeight = visualViewportHeight / visualViewportScale;
// ã¹ã¿ã€ã«ãé©çš
contentElement.style.width = desiredWidth + 'px';
contentElement.style.height = desiredHeight + 'px';
}
// åæèªã¿èŸŒã¿æãšããžã¥ã¢ã«ãã¥ãŒããŒã倿޿ã«adjustContentãåŒã³åºã
adjustContent();
window.visualViewport.addEventListener('resize', adjustContent);
ãã®ã³ãŒãã¹ããããã¯ãããžã¥ã¢ã«ãã¥ãŒããŒãã®å¯žæ³ãšã¹ã±ãŒã«ãååŸãããããã䜿çšããŠã³ã³ãã³ãèŠçŽ ã®ç®çã®å¹
ãšé«ããèšç®ããŸããæ¬¡ã«ããããã®ã¹ã¿ã€ã«ãèŠçŽ ã«é©çšããåžžã«è¡šç€ºç»é¢é åå
ã«åãŸãããã«ããŸããresizeã€ãã³ããªã¹ããŒã¯ãããžã¥ã¢ã«ãã¥ãŒããŒãã倿Žããããã³ïŒäŸïŒãºãŒã ãåãã®å€æŽã«ããïŒã«ã³ã³ãã³ããå調æŽãããããšãä¿èšŒããŸãã
2. ã«ã¹ã¿ã ãºãŒã æ©èœã®å®è£
ãã©ãŠã¶ã«ã¯çµã¿èŸŒã¿ã®ãºãŒã æ©èœããããŸãããããã«ã¹ã¿ãã€ãºããããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®ããã«ãã«ã¹ã¿ã ãºãŒã ã³ã³ãããŒã«ãå®è£
ãããå ŽåããããããããŸãããäŸãã°ãç¹å®ã®å¢åã§ãºãŒã ã€ã³ãããºãŒã ãã¿ã³ãäœæãããããºãŒã ã¹ã©ã€ããŒãå®è£
ããããããå ŽåããããŸããVisual Viewport APIã䜿çšãããšããºãŒã ã¬ãã«ïŒscaleïŒã«ããã°ã©ã ã§ã¢ã¯ã»ã¹ããæäœããããšãã§ããŸãã
äŸïŒ
function zoomIn() {
if (!window.visualViewport) return;
const currentScale = window.visualViewport.scale;
const newScale = currentScale + 0.2; // ãºãŒã ã20%å¢å
// æå€§ãºãŒã ã¬ãã«ãå¶é
if (newScale <= 5) {
window.visualViewport.scale = newScale;
}
}
function zoomOut() {
if (!window.visualViewport) return;
const currentScale = window.visualViewport.scale;
const newScale = currentScale - 0.2; // ãºãŒã ã20%æžå°
// æå°ãºãŒã ã¬ãã«ãå¶é
if (newScale >= 0.2) {
window.visualViewport.scale = newScale;
}
}
// ãããã®é¢æ°ããºãŒã ãã¿ã³ã«ã¢ã¿ãã
document.getElementById('zoomInButton').addEventListener('click', zoomIn);
document.getElementById('zoomOutButton').addEventListener('click', zoomOut);
ãã®ã³ãŒãã¹ããããã¯ããºãŒã ã¬ãã«ãäžå®é墿žããã2ã€ã®é¢æ°zoomInãšzoomOutãå®çŸ©ããŠããŸãããŸãããŠãŒã¶ãŒããºãŒã ã€ã³ãããããããºãŒã ã¢ãŠããããããããã®ãé²ãããã®å¶éãå«ãŸããŠããŸãããããã®é¢æ°ã¯ãã¿ã³ã«ã¢ã¿ããããããŠãŒã¶ãŒã¯ã«ã¹ã¿ã ã³ã³ãããŒã«ãéããŠãºãŒã ã¬ãã«ãå¶åŸ¡ã§ããŸãã
3. å°å³ãã²ãŒã ã®ããã®æ²¡å ¥åäœéšã®åµé
WebããŒã¹ã®å°å³ãã²ãŒã ã§ã¯ããã¥ãŒããŒããšã¹ã±ãŒãªã³ã°ã«å¯Ÿããæ£ç¢ºãªå¶åŸ¡ããã°ãã°å¿ èŠã§ããVisual Viewport APIã¯ããŠãŒã¶ãŒã®ã€ã³ã¿ã©ã¯ã·ã§ã³ã«åºã¥ããŠãã¥ãŒããŒããåçã«èª¿æŽã§ããããã«ããããšã§ãæ²¡å ¥åã®äœéšãäœæããããã«å¿ èŠãªããŒã«ãæäŸããŸããäŸãã°ãå°å³ã¢ããªã±ãŒã·ã§ã³ã§ã¯ããŠãŒã¶ãŒãç»é¢ãã¹ã¯ããŒã«ããããã³ããããããã®ã«åãããŠãAPIã䜿çšããŠå°å³ãã¹ã ãŒãºã«ãºãŒã ã€ã³ã»ãºãŒã ã¢ãŠããããããšãã§ããŸãã
4. position: fixedèŠçŽ ã®ç®¡ç
position: fixedãæã€èŠçŽ ã¯ããã¥ãŒããŒããåºæºã«é
眮ãããŸãããŠãŒã¶ãŒããºãŒã ã€ã³ãããšãããžã¥ã¢ã«ãã¥ãŒããŒãã¯çž®å°ããŸãããCSSã®ã¿ã䜿çšããŠããå Žåãåºå®èŠçŽ ã¯æ£ãã調æŽãããªãããšããããŸããVisual Viewport APIã¯ãåºå®èŠçŽ ã®äœçœ®ãšãµã€ãºã調æŽããŠãããžã¥ã¢ã«ãã¥ãŒããŒããšäžè²«æ§ãä¿ã€ã®ã«åœ¹ç«ã¡ãŸãã
5. ã¢ãã€ã«ããã€ã¹ã§ã®ããŒããŒãåé¡ãžã®å¯ŸåŠ
ã¢ãã€ã«ããã€ã¹ã§ã¯ãããŒããŒãã衚瀺ãããšããžã¥ã¢ã«ãã¥ãŒããŒãã®ãµã€ãºã倿Žãããå
¥åãã£ãŒã«ããä»ã®éèŠãªUIèŠçŽ ãé ããŠããŸãããšããããŸããããžã¥ã¢ã«ãã¥ãŒããŒãã®resizeã€ãã³ãããªãã¹ã³ããããšã§ãããŒããŒãã衚瀺ãããããšãæ€åºããå
¥åãã£ãŒã«ãã衚瀺ããç¶ããããã«ã¬ã€ã¢ãŠãã調æŽã§ããŸããããã¯ãã¢ãã€ã«ããã€ã¹ã§ã·ãŒã ã¬ã¹ã§äœ¿ããããäœéšãæäŸããããã«éåžžã«éèŠã§ãããŸããããã¯WCAGã¬ã€ãã©ã€ã³ãéµå®ããããã«ãäžå¯æ¬ ã§ãã
äŸïŒ
window.visualViewport.addEventListener('resize', () => {
const keyboardVisible = window.visualViewport.height < window.innerHeight;
if (keyboardVisible) {
// å
¥åãã£ãŒã«ããèŠããããã«ã¬ã€ã¢ãŠãã調æŽ
document.getElementById('myInputField').scrollIntoView();
} else {
// ã¬ã€ã¢ãŠãã®èª¿æŽãå
ã«æ»ã
}
});
ãã®äŸã§ã¯ãããžã¥ã¢ã«ãã¥ãŒããŒãã®é«ãããŠã£ã³ããŠã®é«ãããå°ãããã©ããããã§ãã¯ããããŒããŒãã衚瀺ãããŠããå¯èœæ§ãé«ãããšã瀺ããŸããæ¬¡ã«ãscrollIntoView()ã¡ãœããã䜿çšããŠå
¥åãã£ãŒã«ãããã¥ãŒã«ã¹ã¯ããŒã«ããããŒããŒãã«ãã£ãŠé ãããªãããã«ããŸããããŒããŒããé衚瀺ã«ãªã£ããšããã¬ã€ã¢ãŠãã®èª¿æŽã¯å
ã«æ»ãããšãã§ããŸãã
ãã©ãŠã¶ã®ãµããŒããšèæ ®äºé
Visual Viewport APIã¯ãææ°ã®ãã©ãŠã¶ã§è¯å¥œã«ãµããŒããããŠããŸãããã ããã³ãŒãã§äœ¿çšããåã«ãã©ãŠã¶ã®ãµããŒãã確èªããããšãéèŠã§ããããã¯ãwindow.visualViewportãªããžã§ã¯ããååšãããã©ããããã§ãã¯ããããšã§è¡ããŸããAPIããµããŒããããŠããªãå Žåã¯ãã¡ãã£ã¢ã¯ãšãªãwindow.innerWidthãwindow.innerHeightãªã©ã®ä»£æ¿æè¡ã䜿çšããŠåæ§ã®çµæãåŸãããšãã§ããŸããããããã®æ¹æ³ã¯ããã»ã©æ£ç¢ºã§ã¯ãªããããããŸããã
äŸïŒ
if (window.visualViewport) {
// Visual Viewport APIã䜿çšãã
} else {
// ä»£æ¿æè¡ã䜿çšãã
}
Visual Viewport APIã䜿çšããéã®æœåšçãªããã©ãŒãã³ã¹ãžã®åœ±é¿ã«ã泚æããããšãéèŠã§ãããã¥ãŒããŒãã®ããããã£ã«ã¢ã¯ã»ã¹ãããã¥ãŒããŒãã®å€æŽã«åå¿ãããšãã¬ã€ã¢ãŠãã®ãªãããŒãããªã¬ãŒãããç¹ã«ã¢ãã€ã«ããã€ã¹ã§ã®ããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸããäžèŠãªãªãããŒãæå°éã«æããã¹ã ãŒãºãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããããã«ã³ãŒããæé©åããŠãã ãããæŽæ°ã®é »åºŠãå¶éããããã«ããããŠã³ã¹ãã¹ããããªã³ã°ãªã©ã®æè¡ã®äœ¿çšãæ€èšããŠãã ããã
ã¢ã¯ã»ã·ããªãã£ã«é¢ããèæ ®äºé
Visual Viewport APIã䜿çšããéã«ã¯ãã¢ã¯ã»ã·ããªãã£ãèæ ®ããããšãäžå¯æ¬ ã§ããããã€ã¹ããºãŒã ã¬ãã«ã«é¢ä¿ãªããé害ãæã€ãŠãŒã¶ãŒããŠã§ããµã€ããå©çšãããããã¢ã¯ã»ã¹ããããç¶æ ãç¶æããŠãã ãããèŠèŠçãªæãããã ãã«é Œãã®ãé¿ãããŠãŒã¶ãŒãã³ã³ãã³ããšå¯Ÿè©±ããããã®ä»£æ¿æ¹æ³ãæäŸããŠãã ãããäŸãã°ãã«ã¹ã¿ã ãºãŒã ã³ã³ãããŒã«ã䜿çšããŠããå Žåã¯ãããŒããŒãã·ã§ãŒãã«ãããARIA屿§ãæäŸããŠãããŠã¹ã䜿çšã§ããªããŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹ããããããŸããviewportã¡ã¿ã¿ã°ãšVisual Viewport APIãæ£ãã䜿çšããããšã§ãäœèŠåã®ãŠãŒã¶ãŒãã¬ã€ã¢ãŠãã厩ããã«ãºãŒã ã€ã³ã§ããããã«ãªããèªã¿ããããåäžãããããšãã§ããŸãã
åœéåãšããŒã«ã©ã€ãº
ç°ãªãèšèªããã±ãŒã«ããŠã§ããµã€ãã®ã¬ã€ã¢ãŠããšã¬ã¹ãã³ã·ãæ§ã«äžãã圱é¿ãèæ ®ããŠãã ãããããã¹ãã®é·ãã¯èšèªã«ãã£ãŠå€§ããç°ãªãå¯èœæ§ããããããŒãžäžã®èŠçŽ ã®ãµã€ãºãäœçœ®ã«åœ±é¿ãäžããããšããããŸããæè»ãªã¬ã€ã¢ãŠããšã¬ã¹ãã³ã·ããã¶ã€ã³æè¡ã䜿çšããŠããŠã§ããµã€ããç°ãªãèšèªã«åªé ã«é©å¿ã§ããããã«ããŠãã ãããVisual Viewport APIã¯ãèšèªåºæã®ããã¹ãã¬ã³ããªã³ã°ã«ãããã¥ãŒããŒããµã€ãºã®å€æŽãæ€åºããããã«å¿ããŠã¬ã€ã¢ãŠãã調æŽããããã«äœ¿çšã§ããŸãã
äŸãã°ããã€ãèªã®ãããªèšèªã§ã¯ãåèªãé·ããªãåŸåããããæ£ããåŠçãããªããšã¬ã€ã¢ãŠãã®åé¡ãåŒãèµ·ããå¯èœæ§ããããŸããã¢ã©ãã¢èªãããã©ã€èªã®ãããªå³ããå·Šãžèšè¿°ããïŒRTLïŒèšèªã§ã¯ãã¬ã€ã¢ãŠãå šäœãå転ãããå¿ èŠããããŸããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ããµããŒãããããã«ãã³ãŒããé©åã«åœéåããã³ããŒã«ã©ã€ãºãããŠããããšã確èªããŠãã ããã
ãã¹ããã©ã¯ãã£ã¹ãšãã³ã
- ãã©ãŠã¶ãµããŒãã®ç¢ºèªïŒ 䜿çšããåã«ãå¿ ãVisual Viewport APIããµããŒããããŠããã確èªããŠãã ããã
- ããã©ãŒãã³ã¹ã®æé©åïŒ ããã©ãŒãã³ã¹ã®åé¡ãé¿ãããããäžèŠãªã¬ã€ã¢ãŠãã®ãªãããŒãæå°éã«æããŠãã ããã
- ã¢ã¯ã»ã·ããªãã£ã®èæ ®ïŒ ãŠã§ããµã€ããé害ãæã€ãŠãŒã¶ãŒã«ãã¢ã¯ã»ã¹ããããç¶æ ãç¶æããŠãã ããã
- ããŸããŸãªããã€ã¹ã§ã®ãã¹ãïŒ çã«ã¬ã¹ãã³ã·ãã§ããããšã確èªãããããããŸããŸãªããã€ã¹ãç»é¢ãµã€ãºã§ãŠã§ããµã€ãããã¹ãããŠãã ããã
- ãããŠã³ã¹ãšã¹ããããªã³ã°ã®äœ¿çšïŒ ããã©ãŒãã³ã¹ãåäžããããããæŽæ°ã®é »åºŠãå¶éããŠãã ããã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã®åªå ïŒ Visual Viewport APIã䜿çšããéã¯ãåžžã«ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã念é ã«çœ®ããŠãã ããã
çµè«
Visual Viewport APIã¯ãã¬ã¹ãã³ã·ãã§é©å¿æ§ã®é«ãWebäœéšãæ§ç¯ããããã®åŒ·åãªããŒã«ã»ãããæäŸããŸããã¬ã€ã¢ãŠããã¥ãŒããŒããçè§£ããAPIã®ããããã£ã掻çšããããšã§ãã©ã®ããã€ã¹ã§ãèŠæ ããè¯ããå®ç§ã«æ©èœãããŠã§ããµã€ããäœæã§ããŸããAPIã䜿çšããéã«ã¯ããã©ãŠã¶ã®ãµããŒããããã©ãŒãã³ã¹ãã¢ã¯ã»ã·ããªãã£ãåœéåãèæ ®ãããŠã§ããµã€ããäžçäžã®ãã¹ãŠã®ãŠãŒã¶ãŒã«ããžãã£ããªäœéšãæäŸã§ããããã«ããŠãã ãããAPIã詊ããŠãã®æ©èœãæ¢çŽ¢ããé åçã§æ²¡å ¥æã®ããWebã¢ããªã±ãŒã·ã§ã³ãäœæããæ°ããªå¯èœæ§ãè§£ãæŸã¡ãŸãããã
ãããªãæ¢æ±ïŒã¹ã¯ããŒã«ã€ãã³ããã¿ããã€ãã³ãããã®ä»ã®Web APIãšã®çµ±åãªã©ãä»ã®Viewport APIã®æ©èœãæ¢ã£ãŠã¿ãŸãããã