Modern Web Guidance
JetBrainsOfficialCreated by Google ChromeDistributed by JetBrains
- Skill
- Tool integration
- Software development
- Apache-2.0
- Low risk
AutoGineer summary
Written by AutoGineer from the skill’s own files, not by the author
This skill provides a structured way to access up-to-date web development patterns, ensuring that implementations follow modern standards rather than relying on potentially outdated training data. It covers a wide range of frontend topics including UI components, performance optimization, browser APIs, and form handling. By integrating this tool, developers can search for specific use cases and retrieve detailed, framework-agnostic guides that include browser support and fallback recommendations.
What it does
- Searches for standardized web development patterns and best practices.
- Retrieves detailed implementation guides for specific frontend use cases.
- Provides guidance on browser compatibility and necessary fallbacks.
- Helps avoid ad-hoc solutions and unnecessary dependency bloat.
- Supports modern web features like container queries, view transitions, and performance APIs.
When to use it
- At the beginning of any frontend feature implementation.
- Before creating new components to check for existing standardized patterns.
- When evaluating the browser support requirements for modern web features.
- When needing to implement performance optimizations like LCP or content-visibility.
Advantages
- Ensures use of current, recommended web development practices.
- Reduces technical debt by discouraging ad-hoc implementations.
- Provides clear guidance on handling browser compatibility and fallbacks.
- Promotes the use of native browser capabilities over heavy external dependencies.
Usage examples
- “I need to implement a modal using modern web standards. What is the best approach?”
- The agent searches for modal-related guides and retrieves the recommended implementation pattern, including any necessary browser fallbacks.
- “How can I optimize the loading priority of my LCP images?”
- The agent searches for image optimization guides and retrieves the specific instructions for using fetch priority to improve performance.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/jetbrains/modern-web-guidance/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip modern-web-guidance.zip -d .agents/skills
Documentation by Google Chrome
Modern Web Guidance
A skill to search for specific web development use cases and retrieve their corresponding best practice guides.
When to use
Must use this skill:
At the start of implementing any web feature.
Before creating a new component, to check if a standardized pattern already exists.
To avoid implementing ad-hoc solutions or loading large dependencies unnecessarily.
Usage Instructions
Step 1. Search Use Cases
Search with an action-oriented query summarizing what you want to achieve using the search command. Run modern-web-guidance directly with npx.
npx -y modern-web-guidance@latest search "<query>" --skill-version 2026_05_16-c5e7870Example Output:
[
{
"id": "optimize-image-priority",
"description": "Optimize the loading priority of Largest Contentful Paint (LCP) candidate images.",
"category": "performance",
"featuresUsed": [ "Fetch priority" ],
"tokenCount": 985,
"similarity": 0.7289
},
{
"id": "defer-rendering-heavy-content",
"description": "Reduce rendering times in content-heavy web pages by deferring rendering for offscreen content.",
"category": "performance",
"featuresUsed": [ "content-visibility", "hidden=\"until-found\"" ],
"tokenCount": 1250,
"similarity": 0.6961
}
]Note: If search results are vague, return no matches, or show low similarity scores, run the
listcommand to browse all guides:npx -y modern-web-guidance@latest list
Step 2. Retrieve Best Practices
Once you have a relevant id from the search results, call this script using the retrieve command to get the full guide. You can pass multiple IDs separated by commas.
npx -y modern-web-guidance@latest retrieve "<id>"Example Output:
The markdown content of the guide describing implementation steps...
Using npx
IMPORTANT: on Windows, using
npxmay fail. Usenpx.cmd ...instead.Network access is required for fetching npm packages needed by the task.
If the
npx -y modern-web-guidance…command hangs, you may be offline. Try running again in offline mode:npx --offline ….The
--skill-versionflag is used to determine if this SKILL.md is out of date. If it is, a warning message is logged to stderr.
Guidelines
Always search first to find the most relevant guides.
These guides are usually framework-agnostic; adapt them correctly to your setup.
Do not hallucinate guides or ignore them; they represent the preferred local standard for the user's project.
Interpreting Browser Support & Fallbacks
Default Behavior: All guides assume Baseline Widely available features are safe to use without fallbacks. For features that are not Baseline widely available, you MUST follow the fallback recommendations in the guide, unless the user has specified a custom browser support policy.
Custom Policies: If the user has already defined explicit browser support requirements, use the browser compatibility data in the guide to determine if a fallback can be safely ignored.
For Baseline YYYY targets, a feature satisfies this target if its "Baseline since" date is <= YYYY.
Policy Examples:
"Do not implement feature fallbacks." (for exploratory prototypes of the cutting-edge web)
"Safari 17.4+" (for internal tools targeting macOS or Tauri-based desktop apps)
"Never recommend or implement polyfills; if a Baseline Newly Available feature is required for core functionality, provide a lightweight custom fallback or redesign the approach." (to minimize bundle size and avoid technical debt)
"Assume a modern execution environment where Baseline Newly Available features can be used natively, provided they are strictly feature-detected and degrade gracefully." (for progressive enhancement strategies)
Reactive Policy Discovery: Watch for environmental cues to suggest documenting a policy in CLAUDE.md or AGENTS.md. Suggest this if the developer:
Mentions building for a restricted runtime (e.g., Electron or Tauri).
Explicitly excludes specific targets (e.g., "we don't support Desktop Chrome").
Expresses hesitation about polyfill complexity, bundle size, or performance cost.
Questions if a feature is safe to use without fallbacks.
No defined policy format. This is an example:
**Browser Support:** Allow Newly Available features, but only adopt custom fallback code that adds <= 20 lines and does not require external dependencies.
Files
- ATTRIBUTION.mdAdded by AutoGineer939 B
- LICENSE11.1 KiB
- SKILL.md5.7 KiB
- guides/accessibility/accessibility.md24.0 KiB
- guides/accessibility/accessible-error-announcement.md6.9 KiB
- guides/built-in-ai/language-detection.md3.5 KiB
- guides/built-in-ai/language-model.md7.1 KiB
- guides/built-in-ai/summarizer.md5.9 KiB
- guides/built-in-ai/translator.md5.3 KiB
- guides/css-layout/css-layout.md19.5 KiB
- guides/css/css.md27.0 KiB
- guides/css/highlight-text-ranges.md5.4 KiB
- guides/forms/animated-select-picker.md7.8 KiB
- guides/forms/autofill-address-form.md4.1 KiB
- guides/forms/autofill-highlight-inputs.md2.3 KiB
- guides/forms/autofill-payment-form.md8.5 KiB
- guides/forms/autofill-sign-in-form.md9.9 KiB
- guides/forms/autofill-sign-up-form.md11.0 KiB
- guides/forms/brand-consistent-forms.md8.3 KiB
- guides/forms/branded-select-styling.md5.5 KiB
- guides/forms/custom-select-picker-layouts.md5.0 KiB
- guides/forms/form-fields-automatically-fit-contents.md5.8 KiB
- guides/forms/forms.md13.8 KiB
- guides/forms/required-field-feedback.md6.8 KiB
- guides/forms/rich-media-picker.md6.6 KiB
- guides/forms/select-menu-interaction.md5.6 KiB
- guides/forms/validate-input-after-interaction.md8.6 KiB
- guides/html/html.md17.5 KiB
- guides/passkeys/passkey-authentication.md9.7 KiB
- guides/passkeys/passkey-conditional-create.md6.5 KiB
- guides/passkeys/passkey-management.md9.3 KiB
- guides/passkeys/passkey-reauthentication.md4.9 KiB
- guides/passkeys/passkey-registration.md9.3 KiB
- guides/passkeys/passkeys.md4.2 KiB
- guides/performance/batch-analytics-events.md6.4 KiB
- guides/performance/break-up-long-tasks.md2.1 KiB
- guides/performance/calculate-total-foreground-time.md2.9 KiB
- guides/performance/conditional-async-dependencies.md3.6 KiB
- guides/performance/defer-rendering-heavy-content.md6.3 KiB
- guides/performance/defer-work-until-scroll-ends.md3.3 KiB
- guides/performance/deprioritize-background-fetches.md1.8 KiB
- guides/performance/detect-initial-visibility-state.md4.5 KiB
- guides/performance/efficient-background-processing.md5.0 KiB
- guides/performance/faster-spa-view-transitions.md3.4 KiB
- guides/performance/full-session-analytics.md5.7 KiB
- guides/performance/identify-heavy-scripts.md4.2 KiB
- guides/performance/identify-inp-causes.md5.4 KiB
- guides/performance/improve-next-page-load-performance.md7.1 KiB
- guides/performance/interactions-in-complex-layouts.md3.4 KiB
- guides/performance/optimize-image-priority.md4.0 KiB
- guides/performance/optimize-preload-priority.md3.3 KiB
- guides/performance/optimize-script-priority.md2.6 KiB
- guides/performance/performance.md17.9 KiB
- guides/performance/resolution-optimized-pseudo-elements.md2.3 KiB
- guides/performance/schedule-tasks-by-priority.md2.2 KiB
- guides/performance/sequence-distributed-events.md3.5 KiB
- guides/privacy/privacy.md11.0 KiB
- guides/security/security.md25.2 KiB
- guides/user-experience/adapt-scrollbar-to-contrast-preferences.md3.5 KiB
- guides/user-experience/anchor-positioning-tab-underline.md2.9 KiB
- guides/user-experience/animate-element-entry-exit.md5.0 KiB
- guides/user-experience/animate-to-from-top-layer.md5.5 KiB
- guides/user-experience/animate-to-intrinsic-sizes.md5.3 KiB
- guides/user-experience/apply-webgl-shaders.md9.9 KiB
- guides/user-experience/calculate-event-differentials.md4.4 KiB
- guides/user-experience/calculate-with-intrinsic-sizes.md9.6 KiB
- guides/user-experience/capture-location-agnostic-data.md3.6 KiB
- guides/user-experience/carousel-slide-effects.md8.1 KiB
- guides/user-experience/carousel-snap-highlights.md5.7 KiB
- guides/user-experience/child-state-based-styling.md4.8 KiB
- guides/user-experience/complex-shapes.md3.5 KiB
- guides/user-experience/component-specific-light-dark-theme.md9.3 KiB
- guides/user-experience/consistent-cross-document-transitions.md11.8 KiB
- guides/user-experience/content-based-styling.md5.2 KiB
- guides/user-experience/coordinate-global-events.md3.5 KiB
- guides/user-experience/cross-document-transitions.md4.4 KiB
- guides/user-experience/customize-scrollbar-color-and-thickness.md2.4 KiB
- guides/user-experience/dark-mode.md15.2 KiB
- guides/user-experience/declarative-button-actions.md5.4 KiB
- guides/user-experience/declarative-dialog-popover-control.md9.2 KiB
- guides/user-experience/deliver-optimized-decorative-images.md2.8 KiB
- guides/user-experience/design-token-reactivity.md5.7 KiB
- guides/user-experience/directional-navigation-transitions.md4.9 KiB
- guides/user-experience/dynamic-sibling-animations.md2.6 KiB
- guides/user-experience/dynamic-sibling-styling.md3.6 KiB
- guides/user-experience/export-html-media-from-canvas.md11.2 KiB
- guides/user-experience/expose-canvas-content-to-browser-features.md14.1 KiB
- guides/user-experience/flicker-free-client-side-ab-testing.md8.5 KiB
- guides/user-experience/fluid-scaling.md3.0 KiB
- guides/user-experience/format-human-readable-durations.md4.2 KiB
- guides/user-experience/group-element-transitions.md5.0 KiB
- guides/user-experience/improve-text-layout-and-legibility.md5.1 KiB
- guides/user-experience/individual-transform-properties.md3.6 KiB
- guides/user-experience/interactive-content-in-3d-scenes.md13.3 KiB
- guides/user-experience/interactive-content-reveal.md5.1 KiB
- guides/user-experience/interest-triggered-action-previews.md4.1 KiB
- guides/user-experience/interest-triggered-tooltips.md6.8 KiB
- guides/user-experience/light-dismiss-a-dialog.md3.6 KiB
- guides/user-experience/manage-recurring-intervals.md3.3 KiB
- guides/user-experience/model-partial-time-concepts.md4.2 KiB
- guides/user-experience/move-dom-element-without-losing-state.md2.5 KiB
- guides/user-experience/navigation-drawer.md15.7 KiB
- guides/user-experience/overflow-clipping-control.md8.0 KiB
- guides/user-experience/parallax-scroll-effects.md8.8 KiB
- guides/user-experience/persistent-app-tours.md3.9 KiB
- guides/user-experience/persistent-toast-notifications.md1.8 KiB
- guides/user-experience/persistent-top-layer-ui.md2.2 KiB
- guides/user-experience/physics-based-easing.md5.8 KiB
- guides/user-experience/platform-controls-dismiss-dialog.md2.6 KiB
- guides/user-experience/position-aware-tooltips.md5.9 KiB
- guides/user-experience/precise-text-alignment.md4.7 KiB
- guides/user-experience/prevent-text-wrapping.md2.4 KiB
- guides/user-experience/pull-to-reveal.md4.7 KiB
- guides/user-experience/reduce-style-repetition.md3.9 KiB
- guides/user-experience/resilient-context-menus-and-nested-dropdowns.md4.9 KiB
- guides/user-experience/same-document-transitions.md8.3 KiB
- guides/user-experience/scroll-entry-exit-effects.md7.8 KiB
- guides/user-experience/scroll-position-aware-elements.md3.6 KiB
- guides/user-experience/scroll-progress-indicator.md6.7 KiB
- guides/user-experience/scroll-snap-realtime-feedback.md6.7 KiB
- guides/user-experience/scroll-snap-state-sync.md3.9 KiB
- guides/user-experience/scroll-target-on-load.md3.3 KiB
- guides/user-experience/scrollability-affordance-hints.md3.6 KiB
- guides/user-experience/scrollytelling.md8.3 KiB
- guides/user-experience/search-hidden-content.md6.7 KiB
- guides/user-experience/shaped-cutouts.md7.0 KiB
- guides/user-experience/shrinking-header-on-scroll.md6.3 KiB
- guides/user-experience/size-aware-styling.md2.9 KiB
- guides/user-experience/soft-edge-content-fade.md2.6 KiB
- guides/user-experience/stabilize-reactive-state.md3.5 KiB
- guides/user-experience/stack-drill-down.md32.9 KiB
- guides/user-experience/style-parent-with-has.md6.0 KiB
- guides/user-experience/support-global-calendar-systems.md5.7 KiB
- guides/user-experience/swipe-to-remove.md26.2 KiB
- guides/user-experience/visually-stable-font-fallbacks.md2.9 KiB
- guides/user-experience/visually-stable-mixed-fonts.md2.8 KiB
- guides/user-experience/visually-texture-content.md3.7 KiB
- guides/webmcp/agentic-forms.md5.0 KiB
- guides/webmcp/agentic-javascript-tools.md4.1 KiB
- guides/webmcp/webmcp.md3.7 KiB
guides/forms/forms.md
1. Semantic Structure and Form Element
Guidelines
DO use the
<form>element to wrap interactive controls for data collection.DO use
method="POST"for sensitive data and mutations; usemethod="GET"for idempotent requests (e.g., search).DO specify the
actionattribute for the destination URL.DO specify a
nameattribute for every form control to identify data on submission.DO use semantic tags like
<button type="submit">,<textarea>, and<select>.DO use
<fieldset>and<legend>to group related controls.DO use actionable language on submit buttons (e.g., "Save changes").
DON'T use
GETfor sensitive data (it exposes data in history/logs).DON'T use generic
<div>or<span>for form controls.DON'T use
type="button"for primary submission buttons.DON'T disable textarea resizing without alternate layout provisions.
Code Example
<form action="/search" method="GET">
<fieldset>
<legend>Search Preferences</legend>
<label for="q">Query:</label>
<input type="text" id="q" name="q" required>
<button type="submit">Search</button>
</fieldset>
</form>Selection Control Decision Matrix
| Options Count | Choice Type | Recommended Element | Usability & Accessibility Logic |
|---|---|---|---|
| 1–5 | Single (Exclusive) | <input type="radio"> | Zero-click scanning: All choices are immediately visible. Faster scan time. |
| 6+ | Single (Exclusive) | <select> | Space conservation: Use only when vertical space is premium or the list is long. |
| 10+ / Dynamic | Single (Exclusive) | <input list="id"> (<datalist>) | Fuzzy Search: Prevents scrolling fatigue in massive sets (e.g., countries). |
| Any | Multi-select | <input type="checkbox"> | Standard semantics: Native non-exclusive toggles. |
Single-Sentence Mental Model: "Expose mutually exclusive options as visible radio buttons when choices are fewer than six; use <select> only when space is constrained or the list is long."
2. Accessible Labeling and State
Guidelines
DO always associate
<label>with its input usingforandid.DO place labels above form controls to enable faster scanning.
DO use visible labels; do not rely on
placeholderalone.DO ensure the vertical margin between a label and its input is less than the margin between form groups (Gestalt Proximity Rule).
DO use
aria-describedbyto link inputs with help text or error messages.DO define the
langattribute on<html>for proper device translation.DO use non-color visual cues (icons, text) to communicate state (don't rely on color alone).
DO indicate clearly which fields are required.
DO use
aria-livefor dynamic error announcements.DON'T use
placeholderas a replacement for labels.DON'T use
aria-labelas the sole text description if translation is needed.DON'T disable focus outlines without providing a high-contrast alternative.
Code Example
<div class="field">
<label for="username">Username:</label>
<input type="text" id="username" name="username" aria-describedby="user-help" required>
<span id="user-help" class="hint">3-12 characters.</span>
</div>
<style>
input:focus-visible {
outline: 3px solid #0b57d0;
outline-offset: 2px;
}
</style>3. Autofill and Input Modes
Guidelines
DO use the
autocompleteattribute to specify expected data (e.g.,email,tel,current-password,new-password).DO use
inputmodeto optimize on-screen keyboards (e.g.,inputmode="numeric"for PINs).DO use
enterkeyhintto set the Enter key label (e.g.,next,done).DO use single-field inputs for complex numbers (credit cards, phones) to help autofill.
DON'T use
type="number"for credit cards or ZIP codes (causes UI scroll issues and removes leading zeros).
Code Example
<label for="zip">ZIP Code:</label>
<input type="text" id="zip" name="zip" autocomplete="postal-code" inputmode="numeric" pattern="\d{5}">4. Constraints and Validation
Guidelines
DO use native constraints:
required,minlength,maxlength,pattern.DO use CSS pseudo-classes
:invalid:user-invalidfor non-intrusive styling.DO use the ValidityState API (
setCustomValidity) for custom messaging.DON'T disable submit buttons to block validation; let users submit and highlight errors. However, DO disable the button after a valid submission is clicked to prevent double-posts.
Code Example
<label for="code">Activation Code (4 digits):</label>
<input type="text" id="code" name="code" required pattern="\d{4}">
<script>
const input = document.getElementById('code');
input.addEventListener('invalid', () => {
input.setCustomValidity('Please enter exactly 4 digits.');
});
input.addEventListener('input', () => {
input.setCustomValidity('');
});
</script>Validation Event Timing Matrix
| Event Trigger | Phase | Action Allowed | UX / Accessibility Logic |
|---|---|---|---|
input | Active Typing | Clear existing errors only. | Non-intrusive: Do not yell at the user before they finish typing. |
blur / focusout | Exiting Field | Run check and show error. | Contextual validation: Validate once the user indicates they are "done" with a field. |
submit | Final Attempt | Block and route focus. | Final gatekeeper: Intercepts bad payloads and forces screen reader focus to the summary. |
Single-Sentence Mental Model: "Validate on blur to avoid premature warnings while typing, and reset error states on input as soon as the user attempts a correction."
Security vs UX Scale: Client-side validation is for User Experience; Server-side validation is for Security. Never treat browser constraints as a data integrity defense.
5. Responsive Design and Typography
Guidelines
DO use single-column layouts for scanning.
DO set
font-sizeto at least1rem(16px) to prevent iOS zoom.DO expand clickable areas for mobile tap targets using padding tricks.
DO ensure tap targets are at least
48px.DO use units relative to root (
rem) and unitlessline-height.DO use CSS logical properties (e.g.,
margin-inline-start) for RTL support.
Code Example
.form-group {
margin-block-end: 1.5rem;
}
/* Expand clickable tap area without layout shift */
label {
display: inline-block;
padding: 10px 0;
margin: -10px 0;
}
input {
font-size: 1rem;
padding: 0.75rem;
min-height: 48px;
box-sizing: border-box;
}
@media (pointer: coarse) {
input {
min-height: 52px;
}
}6. Styling Form Controls
Guidelines
DO use
accent-colorfor quick branding of native radios/checkboxes.DO use
appearance: nonefor custom dropdown arrows without breaking semantics.DO ensure inputs are clearly visible with adequate border contrast (e.g.,
#cccor darker on white backgrounds).DO hide inputs visually using the canonical
.visually-hiddenrecipe (clip-path: inset(50%)with 1px dimensions) — NOTdisplay: none, which removes them from the accessibility tree.
Code Example
<div class="checkbox-container">
<input type="checkbox" id="sub" name="sub" class="visually-hidden">
<label for="sub" class="checkbox-label">Subscribe</label>
</div>
<style>
.visually-hidden {
position: absolute;
clip-path: inset(50%);
overflow: hidden;
width: 1px;
height: 1px;
margin: -1px;
padding: 0;
border: 0;
white-space: nowrap;
}
.checkbox-label::before {
content: "";
display: inline-block;
width: 1.25rem;
height: 1.25rem;
border: 2px solid #ccc;
}
input:focus-visible + .checkbox-label::before {
outline: 2px solid #0b57d0;
}
</style>7. JavaScript and AJAX
Guidelines
DO prevent default navigation on form submit for AJAX (
e.preventDefault()).DO use
ValidityStateinterfaces for real-time validation checks.DO use
aria-expandedandaria-controlsfor dynamic UI reveals.DON'T block page submission if JS fails; ensure server-side fallback.
Code Example
form.addEventListener('submit', (e) => {
e.preventDefault();
const data = new FormData(form);
// fetch('/submit', { method: 'POST', body: data });
});8. Identity, Payments, and Advanced Security
Guidelines
DO use
autocomplete="new-password"for sign-up andautocomplete="current-password"for sign-in.DO allow pasting into password fields.
DO provide a toggle capability allowing users to unmask password input.
DO indicate exact amounts on pay buttons (e.g., "Pay $100").
DO use
autocomplete="cc-number",cc-exp,cc-csc.DO use HTTPS for all pages.
DO implement cryptographically secure anti-CSRF tokens for mutating actions (POST/PUT/DELETE).
DO sanitize user input (e.g., via DOMPurify) before injecting it into the DOM to prevent XSS.
DO implement spam protection (honeypots or CAPTCHA) for open forms.
DON'T utilize HTTP
GETfor endpoints executing state changes.DON'T use inline JavaScript (e.g.,
onclick="...") directly within form markup to satisfy strict Content Security Policies (CSP).
Code Example
<form method="post">
<input type="hidden" name="csrf_token" value="secure_token_abc123">
<h1>Sign up</h1>
<div class="form-group">
<label for="name">Full name</label>
<input id="name" name="name" autocomplete="name" required pattern="[\p{L}\.\- ]+">
</div>
<div class="form-group">
<label for="email">Email</label>
<input id="email" name="email" type="email" autocomplete="username" required>
</div>
<div class="form-group">
<label for="password">Password</label>
<button id="toggle-password" type="button" aria-pressed="false" aria-label="Show password" aria-describedby="toggle-warning">
<img class="icon-eye" src="/icons/eye.svg" alt="" width="20" height="20">
<img class="icon-eye-off" src="/icons/eye-off.svg" alt="" width="20" height="20">
</button>
<span id="toggle-warning" class="visually-hidden">Warning: this will display your password on the screen.</span>
<input id="password" name="password" type="password" autocomplete="new-password" minlength="8" aria-describedby="password-constraints" required>
<div id="password-constraints">Eight or more characters.</div>
</div>
<button id="sign-up">Sign up</button>
</form>9. Address Collection
Guidelines
DO use a single field for names.
DO use
autocomplete="street-address".If the site has users in different countries, DO use the
<textarea>element for addresses, to accommodate different address formats in different geographical regions. If the form uses separate inputs for address parts (e.g. Street, City), DO useautocompletevaluesaddress-line1,address-line2, etc.DO make postal codes optional.
DON'T split name inputs into rigid variables ("First", "Last") for global audiences.
DON'T enforce Latin-only characters for names and usernames.
Code Example
<!-- Accessible Address Form with Autofill -->
<form action="/save-address" method="POST">
<div class="form-group">
<label for="full-name">Full name</label>
<input type="text" id="full-name" name="full_name" maxlength="100" required autocomplete="name">
</div>
<div class="form-group">
<label for="address">Address</label>
<textarea id="address" name="address" required autocomplete="street-address" maxlength="300"></textarea>
</div>
<button type="submit">Save Address</button>
</form>10. Usability Testing and Analytics
Guidelines
DO test forms across multiple devices, browsers, and screen sizes.
DO test keyboard-only navigation (using
TabandShift+Tab) and verify visual focus.DO emulate various impairments (visual, motor) using browser tools.
DO use analytics to monitor form completion rates and bounce points.
DO track discrete events (e.g., field focus, click) to find micro-friction points.
DON'T rely solely on automated tools (Lighthouse) for usability; test with real users.
DON'T track sensitive personal data in standard event labels.
Code Example
<form action="/submit" method="POST" id="track-form">
<label for="postal-code">ZIP or postal code</label>
<input type="text" id="postal-code" name="postal-code" autocomplete="postal-code" maxlength="20" required>
<button type="submit" id="submit-btn">Submit</button>
</form>
<script>
const trackForm = document.getElementById('track-form');
const trackBtn = document.getElementById('submit-btn');
trackBtn.addEventListener('click', () => {
console.log('Analytics Event: Submit clicked');
});
</script>11. Multi-Page Forms
Guidelines
DO clearly display progress through a multi-page form with clear labels and progress indicators.
DO allow users to navigate backwards and forwards between pages.
DO use context-specific
enterkeyhintvalues (e.g.,"previous","next") to guide navigation via on-screen keyboards.DO design layouts so that the mobile keyboard does not obscure inputs or buttons (e.g., by placing them in the upper half of the viewport when focused or using CSS scroll-padding).
Code Example
<nav aria-label="Progress">
<ol class="progress-tracker">
<li class="step-done">Step 1: Account</li>
<li class="step-active" aria-current="step">Step 2: Shipping</li>
<li class="step-todo">Step 3: Payment</li>
</ol>
</nav>
<button type="button" onclick="history.back()" enterkeyhint="previous">Previous</button>
<button type="submit" enterkeyhint="next">Next</button>Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Node.js
Security
What our scanner noticed· Low risk
- Instructions that use the network
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Created by
- Google Chrome
- Publisher
- JetBrains (Official)
- Distributed by
- JetBrains
- Source
- JetBrains/skills · modern-web-guidance · commit 3f53782
- Licence
- Apache License 2.0 (redistribution allowed)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google Chrome or JetBrains.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download modern-web-guidance.zip