HTML ãã¹ããã©ã¯ãã£ã¹
å ç¢ãªHTMLã¯ãããããåªãããŠã§ããµã€ãã®åºç€ã§ãããããã®ãã³ãã¯ããã©ãŠã¶ãšã¹ã¯ãªãŒã³ãªãŒããŒã«å¥œãŸãããã»ãã³ãã£ãã¯ã§å ç¢ããããŠå°æ¥ãèŠæ®ããããŒã¯ã¢ãããäœæããã®ã«åœ¹ç«ã¡ãŸãã
widthãšheight屿§ãæç€ºçã«èšå®ãããšãç»åãèªã¿èŸŒãŸããåã«ãã©ãŠã¶ãæ£ããã¹ããŒã¹ã確ä¿ã§ãããããGoogleã®Core Web Vitalsã®äžã€ã§ããCumulative Layout Shift (CLS)ãæé€ã§ããŸãã
<!-- â æªãäŸ: ç»åãèªã¿èŸŒãŸãããŸã§ãã©ãŠã¶ã¯ãµã€ãºãç¥ããªã --> <img src="hero.jpg" alt="ããŒããŒç»å"> <!-- â è¯ãäŸ: ã¹ããŒã¹ãå³åº§ã«ç¢ºä¿ããã --> <img src="hero.jpg" alt="ããŒããŒç»å" width="1200" height="630" loading="lazy">
aspect-ratio: autoãšçµã¿åããããšãCSSãç»åã®ãµã€ãºã倿ŽããŠãããã©ãŠã¶ã¯æ£ããæ¯çãèªåçã«èšç®ããŸããé©åã«ãã¹ããããèŠåºãã§æ§ç¯ãããããã¥ã¡ã³ãã¢ãŠãã©ã€ã³ã¯ãæ€çŽ¢ãšã³ãžã³ãã³ã³ãã³ãéå±€ãçè§£ããã®ã«åœ¹ç«ã¡ãã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒãããŒãžãå¹ççã«ããã²ãŒãã§ããããã«ããŸãã
<h1>ããŒãžã¿ã€ãã«ïŒ1ããŒãžã«1ã€ïŒ</h1> <h2>ã¡ã€ã³ã»ã¯ã·ã§ã³</h2> <h3>ãµãã»ã¯ã·ã§ã³</h3> <h3>å¥ã®ãµãã»ã¯ã·ã§ã³</h3> <h2>å¥ã®ã¡ã€ã³ã»ã¯ã·ã§ã³</h2>
target="_blank"ã§ãªã³ã¯ãæ°ããã¿ãã§éãå ŽåãéãããããŒãžã¯window.openerãä»ããŠããªãã®ããŒãžã«ã¢ã¯ã»ã¹ã§ããŸããrel="noopener noreferrer"ã远å ãããšããã®ã»ãã¥ãªãã£è匱æ§ãé²ãããªãã¡ã©ãŒæ
å ±ã®éä¿¡ã忢ããŸãã
<!-- â è匱 --> <a href="https://example.com" target="_blank">蚪å</a> <!-- â å®å š --> <a href="https://example.com" target="_blank" rel="noopener noreferrer">蚪å</a>
autocomplete屿§ã¯ããã©ãŠã¶ãšãã¹ã¯ãŒããããŒãžã£ãŒã«ãã©ãŒã ãã£ãŒã«ããã©ã®ããã«äºåå
¥åããããæç€ºããŸããããã«ãããã¢ãã€ã«ã§ã®ãã©ãŒã å®äºçãåçã«åäžããŸãã
<input type="text" autocomplete="given-name"> <input type="email" autocomplete="email"> <input type="tel" autocomplete="tel"> <input type="password" autocomplete="current-password"> <input type="text" autocomplete="postal-code">
Open Graphã¡ã¿ã¿ã°ã¯ãFacebookãLinkedInãTwitter/Xãªã©ã®ãœãŒã·ã£ã«ã¡ãã£ã¢ãã©ãããã©ãŒã ã§å ±æãããéã®ããŒãžã®è¡šç€ºãå¶åŸ¡ããŸãããããããªããšããã©ãããã©ãŒã ã¯ã©ã³ãã ã«ã³ã³ãã³ããéžæããŸãã
<meta property="og:title" content="ããŒãžã¿ã€ãã«"> <meta property="og:description" content="ç°¡åãªèª¬æ"> <meta property="og:image" content="https://yourdomain.com/og.jpg"> <meta property="og:url" content="https://yourdomain.com/page"> <meta property="og:type" content="website"> <!-- Twitter/X --> <meta name="twitter:card" content="summary_large_image">
CSS ã®ãã³ããšã³ã
ææ°ã®CSSã¯éåžžã«åŒ·åã§ãããããã®ãã³ãã¯ãã¬ã€ã¢ãŠããã«ã¹ã¿ã ããããã£ããããŠæéãç¯çŽãã¹ã¿ã€ã«ã·ãŒããã¯ãªãŒã³ã«ä¿ã€ãã¿ãŒã³ãã«ããŒããŠããŸãã
ããžã·ã§ãã³ã°ããã¯ãšæŠãã®ã¯ãããŸããããCSS Gridã®place-itemsã·ã§ãŒããã³ãã¯ãèšç®ããã©ã³ã¹ãã©ãŒã ãªãã§ãã³ã³ãã³ããæ°Žå¹³æ¹åãšåçŽæ¹åã®äž¡æ¹ã§2è¡ã§äžå€®æãããŸãã
.center-everything { display: grid; place-items: center; } /* ãã«ããŒãžã®äžå€®æãã«ãæ©èœããŸã */ body { display: grid; place-items: center; min-height: 100vh; }
CSSã«ã¹ã¿ã ããããã£ïŒå€æ°ïŒã䜿çšãããšããã¶ã€ã³ããŒã¯ã³ãäžåºŠå®çŸ©ããã©ãã§ãåå©çšã§ããŸãããŸãããªã¢ã«ã¿ã€ã ã§æŽæ°ããããããããŒã¯ã¢ãŒããããŒãèšå®ãç°¡åã«ãªããŸãã
:root { --color-primary: #6366f1; --color-bg: #ffffff; --radius-md: 12px; --spacing-md: 16px; } @media (prefers-color-scheme: dark) { :root { --color-bg: #0d1117; } } .btn { background: var(--color-primary); border-radius: var(--radius-md); padding: var(--spacing-md); }
clamp(min, preferred, max)ã䜿çšãããšãã¡ãã£ã¢ã¯ãšãªãå¿
èŠãšããã«ããã©ã³ããµã€ãºããã¥ãŒããŒãå¹
ã«å¿ããŠæ»ããã«ã¹ã±ãŒã«ãããããšãã§ããŸããäžå€®ã®å€ã¯éåžžvwåäœã§ãã
/* clamp(æå°å€, æšå¥šå€, æå€§å€) */ h1 { font-size: clamp(1.8rem, 5vw, 3.5rem); } p { font-size: clamp(0.9rem, 2vw, 1.1rem); line-height: 1.7; max-width: 65ch; /* æé©ãªèªã¿åãå¹ */ }
ã°ããŒãã«ã«ã¹ã ãŒãºã¹ã¯ããŒã«ãæå¹ã«ããã¢ã³ã«ãŒã¿ãŒã²ããã«scroll-margin-topã䜿çšããŠãåºå®ããããŒãã¹ã¯ããŒã«å
ã®ã³ã³ãã³ãã«éãªããªãããã«ããŸãã
@media (prefers-reduced-motion: no-preference) { html { scroll-behavior: smooth; } } /* åºå®ããããŒïŒäŸïŒé«ã70pxïŒã®ãªãã»ãã */ [id] { scroll-margin-top: 90px; }
scroll-behavior: smoothãprefers-reduced-motion: no-preferenceã¡ãã£ã¢ã¯ãšãªã§ã©ããããŠãã ãããã¢ãã¡ãŒã·ã§ã³ã¹ã¯ããŒã«ã«ãã£ãŠä¹ãç©é
ããèµ·ãããŠãŒã¶ãŒãããŸããauto-fill + minmax()ãã¿ãŒã³ã¯ãå©çšå¯èœãªã¹ããŒã¹ã«åºã¥ããŠã«ã©ã æ°ãèªåçã«èª¿æŽããã°ãªãããäœæããŸããã¡ãã£ã¢ã¯ãšãªã¯äžèŠã§ãã
.card-grid { display: grid; grid-template-columns: repeat( auto-fill, minmax(280px, 1fr) ); gap: 24px; } /* ã¢ãã€ã«ã§ã¯1å â 2å â 3å â 4åãšèªåçã«èª¿æŽãããŸã */
ã°ããŒãã«ã«outline: noneãè¡ããªãã§ãã ãããããŒããŒãããã²ãŒã·ã§ã³ãå£ããŸããããŒããŒããŠãŒã¶ãŒã«ã®ã¿ãã©ãŒã«ã¹ãªã³ã°ã衚瀺ããã«ã¯:focus-visibleã䜿çšããããŠã¹ãŠãŒã¶ãŒã«ã¯ãã¶ã€ã³ãã¯ãªãŒã³ã«ä¿ã¡ãŸãã
/* â 絶察ã«è¡ããªãããš */ * { outline: none; } /* â ããŠã¹ã§ã¯é衚瀺ãããŒããŒãã§ã¯è¡šç€º */ :focus:not(:focus-visible) { outline: none; } :focus-visible { outline: 2px solid #6366f1; outline-offset: 3px; border-radius: 4px; }
JavaScript ã®ãã³ã
ãããã®ææ°ã®ãã¿ãŒã³ãšãã©ãŠã¶APIã䜿çšããŠãããã¯ãªãŒã³ã§ããã©ãŒãã³ã¹ã®é«ãJavaScriptãèšè¿°ããŠãã ããã
1ç§éã«äœçŸåãçºçããscrollã€ãã³ããç£èŠãã代ããã«ãIntersectionObserver APIã䜿çšããŠãèŠçŽ ããã¥ãŒããŒãã«åºå
¥ããããšãã«ã®ã¿åå¿ããŸãã
const observer = new IntersectionObserver( (entries) => { entries.forEach(entry => { if (entry.isIntersecting) { entry.target.classList.add('visible'); observer.unobserve(entry.target); // ç£èŠã忢 } }); }, { rootMargin: '0px 0px -50px 0px' } ); document.querySelectorAll('.animate-on-scroll') .forEach(el => observer.observe(el));
resizeãinputã®ãããªã€ãã³ãã¯éåžžã«é«éã«çºçããŸãããããŠã³ã¹ã¯ããŠãŒã¶ãŒã®æäœã忢ãããŸã§å®è¡ãé
å»¶ãããäžèŠãªäœæ¥ãé²ããŸãã
function debounce(fn, delay = 300) { let timer; return (...args) => { clearTimeout(timer); timer = setTimeout(() => fn(...args), delay); }; } // 䜿çšäŸ window.addEventListener('resize', debounce(() => { recalculateLayout(); }, 200) );
ææ°ã®navigator.clipboard APIã¯PromiseããŒã¹ã§ãããå€ãdocument.execCommand('copy')ããã¯ãããã¯ããã«ã¯ãªãŒã³ã§ãã
async function copyToClipboard(text) { try { await navigator.clipboard.writeText(text); showToast('ã³ããŒããŸããïŒ'); } catch (err) { console.error('ã³ããŒå€±æ:', err); } } // 䜿çšäŸ document.querySelector('.copy-btn') .addEventListener('click', () => copyToClipboard('ã³ããŒããããã¹ã') );
localStorageã¯ããã©ã€ããŒããã©ãŠãžã³ã°ã¢ãŒããã¹ãã¬ãŒãžããã£ã±ãã®å Žåã«äŸå€ãã¹ããŒããå¯èœæ§ããããŸããåžžã« try/catch ãã«ããŒã§ã©ããããŠãã ããã
const storage = { get(key, fallback = null) { try { const item = localStorage.getItem(key); return item ? JSON.parse(item) : fallback; } catch { return fallback; } }, set(key, value) { try { localStorage.setItem(key, JSON.stringify(value)); return true; } catch { return false; } } }; storage.set('theme', 'dark'); const theme = storage.get('theme', 'light');
JavaScripté§åã®ã¢ãã¡ãŒã·ã§ã³ïŒcanvasãGSAPãªã©ïŒã§ã¯ããŠãŒã¶ãŒã®prefers-reduced-motionèšå®ã確èªããããã«å¿ããŠã¢ãã¡ãŒã·ã§ã³ãç°¡çŽ åãŸãã¯ç¡å¹ã«ããŸãã
const prefersReduced = window .matchMedia('(prefers-reduced-motion: reduce)') .matches; if (!prefersReduced) { startAnimations(); } else { showStaticFallback(); }
ããã©ãŒãã³ã¹ã®ãã³ã
é«éãªãŠã§ããµã€ãã¯ãã©ã³ã¯ãé«ããã³ã³ããŒãžã§ã³çãåäžãããŠãŒã¶ãŒãæºè¶³ãããŸãããããã®ãã³ãã¯ããŠã§ãããã©ãŒãã³ã¹ã«ãããæå€§ã®ææãã«ããŒããŠããŸãã
font-display: swapããªããšããã©ãŠã¶ã¯ã«ã¹ã¿ã ãã©ã³ããèªã¿èŸŒãŸãããŸã§ããã¹ããé衚瀺ã«ããŸãïŒFOITïŒãããã䜿çšãããšãã·ã¹ãã ãã©ã³ããããã«è¡šç€ºãããåŸã§çœ®ãæãããããããLargest Contentful Paint (LCP) ã倧å¹
ã«æ¹åãããŸãã
<!-- ã¹ããã1: preconnect --> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <!-- ã¹ããã2: URLã« &display=swap ã远å --> <link href="https://fonts.googleapis.com/css2?family=Poppins:wght@400;700&family=Noto+Sans+JP:wght@700;900&display=swap" rel="stylesheet">
WebPãAVIFç»åã¯ãåçã®å質ã§JPEGãPNGããã倧å¹
ã«å°ãããªããŸãã<picture>èŠçŽ ã䜿çšããŠãå€ããã©ãŠã¶åãã®JPEGãã©ãŒã«ããã¯ãšãšãã«ææ°ã®ãã©ãŒããããæäŸããŸãã
<picture> <source srcset="hero.avif" type="image/avif"> <source srcset="hero.webp" type="image/webp"> <img src="hero.jpg" alt="ããŒããŒç»å" width="1200" height="630" loading="lazy"> </picture>
éåžžã®<script>ã¿ã°ã¯HTMLè§£æããããã¯ããŸããdeferã¯è§£æå®äºåŸã«ã¹ã¯ãªãããé çªã«å®è¡ããŸããasyncã¯ããŠã³ããŒããå®äºæ¬¡ç¬¬ã¹ã¯ãªãããå®è¡ããŸãïŒé åºã¯ä¿èšŒãããŸããïŒã
<!-- ã¬ã³ããªã³ã°ãããã㯠â --> <script src="app.js"></script> <!-- DOMæ§ç¯åŸãé çªã«å®è¡ â (ã»ãšãã©ã®ã¹ã¯ãªããã«æšå¥š) --> <script src="app.js" defer></script> <!-- æºåã§ã次第ããã«å®è¡ â (ã¢ããªãã£ã¯ã¹ãåºå) --> <script src="analytics.js" async></script>
transformãšopacityã®ã¢ãã¡ãŒã·ã§ã³ã«åºå·ããŠãã ããããããã¯ã¬ã€ã¢ãŠãããã€ã³ããããªã¬ãŒããã«GPUã³ã³ããžã¿ãŒã¹ã¬ããã§å®è¡ãããŸããwill-changeã¯ãããã¡ã€ãªã³ã°ãè¡ããå®éã®ã¡ãªããã確èªãããå Žåã«ã®ã¿è¿œå ããŠãã ããã
/* â ã¬ã€ã¢ãŠããããªã¬ãŒïŒé«ã³ã¹ãïŒ */ .bad { transition: width 0.3s, top 0.3s; } /* â GPUã³ã³ããžããïŒäœã³ã¹ãïŒ */ .good { transition: transform 0.3s, opacity 0.3s; } /* è€éãªã¢ãã¡ãŒã·ã§ã³ã®åã«ã®ã¿æ§ããã«äœ¿çš */ .modal-enter { will-change: transform; } .modal-entered { will-change: auto; } /* åŸã«ãªã»ãã */
<link rel="preload">ã䜿çšããŠãéèŠãªãªãœãŒã¹ãæ©æã«ãã§ãããããããã©ãŠã¶ã«æç€ºããŸããCSSãJSã§çºèŠãããåã«è¡ãããŸããããŒããŒç»åãéèŠãªãã©ã³ããããŒã¹ã¯ãªããã«æé©ã§ãã
<!-- ããŒããŒç»åïŒLCPèŠçŽ ïŒãããªããŒã --> <link rel="preload" as="image" href="hero.webp" fetchpriority="high"> <!-- éèŠãªãã©ã³ããããªããŒã --> <link rel="preload" as="font" href="font.woff2" type="font/woff2" crossorigin>
ã¢ã¯ã»ã·ããªãã£ã®ãã³ã
ã¢ã¯ã»ã·ããªãã£ã¯ãã§ãã¯ãªã¹ãã§ã¯ãªããåªãããã¶ã€ã³ã§ãããããã®ãã³ãã¯ãã¹ã¯ãªãŒã³ãªãŒããŒãŠãŒã¶ãŒãããŒããŒãããã²ãŒã¿ãŒãå«ãããã¹ãŠã®äººããµã€ããå©çšã§ããããã«ããã®ã«åœ¹ç«ã¡ãŸãã
ã¢ã€ã³ã³ã®ã¿ãå«ããã¿ã³ã«ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒãèªã¿äžããããã¹ãããããŸããã説æçãªã©ãã«ãæäŸããããã«aria-labelã远å ããŠãã ããã
<!-- â ã¹ã¯ãªãŒã³ãªãŒããŒã¯ããã¿ã³ããšèªã¿äžãã --> <button><i class="fa-solid fa-times"></i></button> <!-- â ã¹ã¯ãªãŒã³ãªãŒããŒã¯ããã€ã¢ãã°ãéããããšèªã¿äžãã --> <button aria-label="ãã€ã¢ãã°ãéãã"> <i class="fa-solid fa-times" aria-hidden="true"></i> </button>
lang屿§ã¯ãã¹ã¯ãªãŒã³ãªãŒããŒã«äœ¿çšããèšèªãäŒããCSSã§ã®æ£ãããã€ãããŒã·ã§ã³ãå¯èœã«ãã翻蚳ããŒã«ãã³ã³ãã³ãèšèªãèå¥ããã®ã«åœ¹ç«ã¡ãŸããRTLèšèªã®å Žåã¯ãdir="rtl"ã远å ããŠãã ããã
<!-- è±èª --> <html lang="en"> <!-- ã¢ã©ãã¢èª (RTL) --> <html lang="ar" dir="rtl"> <!-- ãã©ã³ã¹èª --> <html lang="fr">
WCAG 2.1 AAã§ã¯ãéåžžã®ããã¹ãã«ã¯æäœ4.5:1ã倧ããªããã¹ãïŒ18px以äžã®å€ªåãŸãã¯24px以äžã®éåžžïŒã«ã¯3:1ã®ã³ã³ãã©ã¹ãæ¯ãèŠæ±ãããŠããŸããå ¬éåã«ã³ã³ãã©ã¹ããã§ãã«ãŒã䜿çšããŠãã ããã
/* â #6b7280 on #fff = 4.48:1 (å°ããããã¹ãã§ã¯AAã«äžåæ Œ) */ .muted { color: #6b7280; background: #fff; } /* â #4b5563 on #fff = 7.0:1 (AA & AAA ã«åæ Œ) */ .muted { color: #4b5563; background: #fff; }
ã¹ã¯ãªãŒã³ãªãŒããŒã®ã¿ãèªã¿åããããã¹ããå¿
èŠãªå ŽåããããŸããäŸãã°ãã¹ããããªã³ã¯ãèŠèŠèŠçŽ ã®ã©ãã«ãªã©ã§ãã.sr-onlyãŠãŒãã£ãªãã£ã¯ã©ã¹ã¯ãèŠèŠçã«é ããªããã¢ã¯ã»ã·ããªãã£ãç¶æããŸãã
.sr-only { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; } <!-- ã¹ããããªã³ã¯ã®äŸ --> <a href="#main" class="sr-only">ã³ã³ãã³ããžã¹ããã</a>
ã¢ãŒãã«ãéããŠãããšãã¯ãããŒããŒããã©ãŒã«ã¹ããã®äžã«éã蟌ããå¿ èŠããããŸããããããªããšãTabããŒã§ãªãŒããŒã¬ã€ã®èåŸã«ããèŠçŽ ã«ãã©ãŒã«ã¹ãç§»åããã¢ãŒãã«ãããŒããŒããŠãŒã¶ãŒã«ãšã£ãŠäœ¿çšã§ããªããªããŸãã
function trapFocus(modal) { const focusable = modal.querySelectorAll( 'a, button, input, select, textarea, [tabindex]:not([tabindex="-1"])' ); const first = focusable[0]; const last = focusable[focusable.length - 1]; modal.addEventListener('keydown', e => { if (e.key !== 'Tab') return; if (e.shiftKey ? document.activeElement === first : document.activeElement === last) { e.preventDefault(); (e.shiftKey ? last : first).focus(); } }); first.focus(); }
ã¬ã¹ãã³ã·ã & ã¢ãã€ã«ã®ãã³ã
ã¢ãã€ã«ãã©ãã£ãã¯ãæ¯é çã§ãããããã®ãã³ãã¯ã320pxã®ã¹ããŒããã©ã³ãã4Kã¢ãã¿ãŒãŸã§ãããããç»é¢ãµã€ãºã§ãã¶ã€ã³ãçŸããæ©èœããããšãä¿èšŒããŸãã
viewportã¡ã¿ã¿ã°ããªããšãã¢ãã€ã«ãã©ãŠã¶ã¯çŽ980pxã®ãã¹ã¯ãããå¹ ã§ã¬ã³ããªã³ã°ãããã®åŸãºãŒã ã¢ãŠãããŸãããŠãŒã¶ãŒã«ããæ¡å€§çž®å°ãèš±å¯ããŠãã ãããç¡å¹ã«ããããšã¯é倧ãªã¢ã¯ã»ã·ããªãã£éå£ãšãªãããã©ãŠã¶ã®ãºãŒã æ©èœãå£ããŸãã
<!-- â ãŠãŒã¶ãŒã«ãããºãŒã ãç¡å¹åïŒã¢ã¯ã»ã·ããªãã£éåïŒ --> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <!-- â æ£ãã: 5åãŸã§ã®ãºãŒã ãèš±å¯ --> <meta name="viewport" content="width=device-width, initial-scale=1, minimum-scale=1, maximum-scale=5">
Appleã®Human Interface GuidelinesãšWCAG 2.5.5ã¯ãæäœ44Ã44 CSSãã¯ã»ã«ã®ã¿ããã¿ãŒã²ãããæšå¥šããŠããŸããå°ããªã¿ãŒã²ããã¯ãŠãŒã¶ãŒãèç«ããã誀ã¿ããã«ã€ãªãããŸããããã£ã³ã°ãç䌌èŠçŽ ã䜿çšããŠãèŠèŠçãªãµã€ãºã倿Žããã«ã¯ãªãã¯å¯èœé åãæ¡åŒµã§ããŸãã
/* èŠèŠçãªå€æŽãªãã«ã¿ããé åãæ¡åŒµ */ .icon-btn { position: relative; width: 24px; height: 24px; } .icon-btn::before { content: ''; position: absolute; top: 50%; left: 50%; transform: translate(-50%, -50%); min-width: 44px; min-height: 44px; }
margin-leftã®ä»£ããã«margin-inline-startã®ãããªCSSè«çããããã£ã¯ãããã¥ã¡ã³ãã®æžåæ¹åã«åºã¥ããŠèªåçã«æ¹åãå転ããããããRTLãµããŒããã»ãŒæéãªãå®çŸã§ããŸãã
/* ç©çããããã£ïŒRTLã§ã¯å転ããªãïŒ */ .icon { margin-right: 8px; } /* è«çããããã£ïŒRTLã§èªåçã«åè»¢ïŒ */ .icon { margin-inline-end: 8px; } /* ãã®ä»ã®è«çããããã£ã®äŸ */ .card { padding-inline: 16px; /* left + right */ padding-block: 12px; /* top + bottom */ border-start-start-radius: 12px; /* LTRã§ã¯å·Šäž */ }
ã¢ãã€ã«ãã©ãŠã¶ã§ã®100vhã¯ããã©ãŠã¶ã®ã¯ããŒã ïŒã¢ãã¬ã¹ããŒïŒãå«ããããããŒã衚瀺ããããšãªãŒããŒãããŒãçºçããŸããæ°ããdvhïŒåçãã¥ãŒããŒãé«ãïŒåäœã¯ããã©ãŠã¶ã¯ããŒã ã®è¡šç€º/é衚瀺ã«å¿ããŠèª¿æŽãããŸãã
/* â ã¢ãã€ã«ã§ãã©ãŠã¶ã¯ããŒã ã衚瀺ããããšãªãŒããŒãã㌠*/ .hero { height: 100vh; } /* â å€ããã©ãŠã¶åããã©ãŒã«ããã¯ä»ã */ .hero { height: 100vh; /* ãã©ãŒã«ãã㯠*/ height: 100dvh; /* åçãã¥ãŒããŒãé«ã */ }
svhïŒã¹ã¢ãŒã«ãã¥ãŒããŒããåžžã«ã¯ããŒã ãé€å€ïŒãlvhïŒã©ãŒãžãã¥ãŒããŒããåžžã«ã¯ããŒã ã¹ããŒã¹ãå«ãïŒãå©çšå¯èœã§ããResponsiveCheckTool ã®ãã®ä»ã®æ å ±
ãããã®ãã³ããå®è·µããŠã¿ãŸããã
ã¬ã¹ãã³ã·ããªå€æŽãã¢ãã€ã«ãã¿ãã¬ããããã¹ã¯ãããã§ã©ã®ããã«èŠãããããç¡æã§ããµã€ã³ã¢ããäžèŠã§ãå³åº§ã«ãã¹ãã§ããŸãã
ä»ãããŠã§ããµã€ãããã¹ã