<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>W3Tweaks</title><description>Free frontend development tutorials for CSS, JavaScript, HTML, PHP and more.</description><link>https://www.w3tweaks.com/</link><language>en-us</language><item><title>JavaScript Closures: Every Use Case Explained (Live Demos)</title><link>https://www.w3tweaks.com/javascript/javascript-closures-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-closures-explained/</guid><description>JavaScript closures explained with live, runnable demos. Backpack mental model, lexical scoping, the var-vs-let loop trap, 5 production patterns (counter, currying, memoize, once, module), the over-capture memory leak, stale closures in React useEffect and async setInterval, #private class fields vs closures, WeakMap memoization for object keys, interview questions (debounce/curry/compose), arrow vs regular vs .bind() for this, and WeakRef + using for cleanup.</description><pubDate>Sat, 13 Jun 2026 19:00:00 GMT</pubDate><category>javascript closures</category><category>javascript closure example</category><category>what is a closure javascript</category><category>javascript closure interview question</category><category>javascript closure memory leak</category><category>javascript closure counter</category><category>javascript currying closure</category><category>javascript memoize closure</category><category>module pattern javascript</category><category>var let closure loop</category><category>stale closure react</category><category>closure vs class javascript</category><category>private variables javascript</category><category>javascript closure async</category><category>lexical scope</category><category>weakmap memoization</category><category>private class fields</category><category>useeffect stale closure</category></item><item><title>Intersection Observer API: Scroll, Lazy Load &amp; Scrollspy</title><link>https://www.w3tweaks.com/html/intersection-observer-api-scroll-detection/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/intersection-observer-api-scroll-detection/</guid><description>The complete Intersection Observer API guide — threshold, rootMargin, isIntersecting vs intersectionRatio, scroll reveal, lazy load, infinite scroll, scrollspy. Plus CSS scroll-driven animations (animation-timeline: view()) as the modern alternative, content-visibility composition, IntersectionObserver v2 trackVisibility for ad viewability, the sticky header sentinel pattern, React useInView and Vue useIntersectionObserver hooks, Next.js/Astro SSR guards, jsdom polyfill, the Observer family comparison, takeRecords(), and Element.checkVisibility().</description><pubDate>Sat, 13 Jun 2026 18:00:00 GMT</pubDate><category>intersection observer api</category><category>intersection observer example</category><category>intersection observer threshold</category><category>intersection observer rootmargin</category><category>isintersecting vs intersectionratio</category><category>intersection observer not firing</category><category>scroll reveal javascript</category><category>lazy load images javascript</category><category>infinite scroll intersection observer</category><category>scrollspy javascript</category><category>intersection observer react</category><category>css scroll-driven animations</category><category>animation-timeline view</category><category>content-visibility auto</category><category>intersection observer v2 trackvisibility</category><category>intersection observer polyfill</category><category>intersection observer next.js</category><category>element.checkvisibility</category><category>sticky header sentinel</category></item><item><title>CSS pointer-events: inert, Click-Through, disabled &amp; SVG</title><link>https://www.w3tweaks.com/css/css-pointer-events-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-pointer-events-explained/</guid><description>The complete CSS pointer-events guide — click-through overlays, tooltip flicker fix, disabled button (with the inert-attribute alternative), child re-enable inside disabled parent, the ghost click trap, cursor:not-allowed vs pointer-events:none, SVG hit areas including bounding-box, dialog ::backdrop, map/canvas HUD overlays, transition-behavior: allow-discrete, and the touch-action manipulation companion.</description><pubDate>Sat, 13 Jun 2026 17:00:00 GMT</pubDate><category>css pointer-events</category><category>pointer-events: none</category><category>css click through overlay</category><category>css disabled button</category><category>css disabled vs pointer-events</category><category>cursor not-allowed vs pointer-events</category><category>css tooltip flicker fix</category><category>pointer-events svg fill stroke</category><category>touch-action manipulation</category><category>css inert attribute</category><category>css pointer-events transition</category><category>css ghost click</category><category>pointer-events bubbling</category><category>pointer-events keyboard accessibility</category><category>dialog backdrop</category><category>pointer-events bounding-box</category><category>transition-behavior allow-discrete</category></item><item><title>IndexedDB Tutorial: idb, Cursors, Bulk Insert &amp; Sync</title><link>https://www.w3tweaks.com/javascript/javascript-indexeddb-complete-guide/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-indexeddb-complete-guide/</guid><description>The complete IndexedDB tutorial — live demo, async/await with the idb library, bulk insert performance (100x faster), cross-tab sync via BroadcastChannel, Service Worker offline-first pattern, storing Blobs and Files, compound indexes, Dexie vs idb decision table, TypeScript DBSchema, transaction auto-close trap, version migrations, and Safari ITP eviction.</description><pubDate>Fri, 12 Jun 2026 20:30:00 GMT</pubDate><category>indexeddb tutorial</category><category>indexeddb example</category><category>indexeddb vs localstorage</category><category>indexeddb promise</category><category>indexeddb async await</category><category>idb library jake archibald</category><category>dexie.js example</category><category>indexeddb transaction auto close</category><category>transactioninactiveerror</category><category>indexeddb cursor</category><category>idbkeyrange</category><category>indexeddb version migration</category><category>navigator.storage.persist</category><category>indexeddb safari itp</category><category>indexeddb in service worker</category><category>indexeddb cross-tab sync</category><category>indexeddb broadcast channel</category><category>indexeddb bulk insert performance</category><category>indexeddb typescript</category></item><item><title>CSS :focus-visible: Keyboard Focus, WCAG &amp; inert</title><link>https://www.w3tweaks.com/css/css-focus-visible-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-focus-visible-explained/</guid><description>The complete CSS :focus-visible guide — :focus vs :focus-visible vs :focus-within, 8 visual patterns, the two-tone indicator, WCAG 2.4.7 + 2.4.11 compliance, forced-colors High Contrast Mode, the sticky-header scroll-padding-top fix, inert and &lt;dialog&gt; focus traps, :has(:focus-visible), accent-color, tabindex programmatic focus, cross-browser heuristic differences, mobile touch behavior, and the focus-visible polyfill.</description><pubDate>Fri, 12 Jun 2026 20:00:00 GMT</pubDate><category>css focus-visible</category><category>css focus-visible example</category><category>css focus-visible polyfill</category><category>css focus vs focus-visible</category><category>css focus-within example</category><category>css remove focus outline</category><category>css keyboard focus indicator</category><category>wcag 2.4.7 focus visible</category><category>wcag 2.4.11 focus appearance</category><category>css forced-colors active</category><category>css two-tone focus</category><category>css outline-offset</category><category>tabindex focus management</category><category>scroll-margin-top focus</category><category>css inert attribute</category><category>css :has focus-visible</category><category>css accent-color focus</category><category>dialog showmodal</category><category>a11y</category><category>keyboard navigation</category></item><item><title>Web Share API: navigator.share, Files &amp; Fallbacks</title><link>https://www.w3tweaks.com/html/web-share-api-native-sharing-files-fallbacks/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/web-share-api-native-sharing-files-fallbacks/</guid><description>The complete Web Share API guide — navigator.share + navigator.canShare for text, URLs and files, AbortError handling, the transient activation trap, Permissions-Policy headers, the text+url duplicate-link bug, iOS Safari vs Android Chrome quirks, PWA share targets with service worker file receivers, SSR-safe feature detection for Next.js/Astro, and the progressive 3-tier fallback chain.</description><pubDate>Fri, 12 Jun 2026 19:00:00 GMT</pubDate><category>web share api example</category><category>navigator.share javascript</category><category>navigator.canshare</category><category>web share api files</category><category>web share api aborterror</category><category>share api transient activation</category><category>navigator.share fallback</category><category>clipboard api fallback</category><category>pwa share target</category><category>web share api permissions policy</category><category>web share api ios safari</category><category>web share api browser support</category><category>share button javascript</category><category>duplicate url web share</category><category>ssr navigator.share</category><category>web share analytics</category><category>share target service worker</category></item><item><title>HTML5 Video Custom Controls: Media API, Captions &amp; PiP</title><link>https://www.w3tweaks.com/html/html-video-custom-controls-media-api/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-video-custom-controls-media-api/</guid><description>Build HTML5 video custom controls — Media API, TimeRanges buffered progress, textTracks captions, ::cue styling, Picture-in-Picture, Fullscreen with Safari quirks, Media Session API for Bluetooth/lock-screen, playsinline iOS fix, autoplay policy detection, codec selection (AV1/VP9/H.264), MediaError handling, IntersectionObserver autoplay, MediaCapabilities + requestVideoFrameCallback.</description><pubDate>Thu, 11 Jun 2026 18:45:00 GMT</pubDate><category>html5 video custom controls</category><category>html5 video javascript api</category><category>html5 video buffered progress bar</category><category>webvtt captions example</category><category>css ::cue styling</category><category>html5 video texttracks api</category><category>picture in picture javascript</category><category>html5 video fullscreen api</category><category>playsinline ios</category><category>media session api javascript</category><category>video.play returns promise</category><category>html5 video keyboard shortcuts</category><category>html5 video autoplay policy</category><category>hls.js dash.js mse</category><category>mediaerror handling</category><category>av1 vp9 h264 codec</category><category>requestvideoframecallback</category><category>mediacapabilities</category></item><item><title>CSS @supports: Feature Detection &amp; Progressive Enhancement</title><link>https://www.w3tweaks.com/css/css-supports-feature-detection/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-supports-feature-detection/</guid><description>The complete CSS @supports guide — feature queries, not/and/or operators, selector() for :has(), the new at-rule() function for @layer detection, Tailwind supports-[] arbitrary variant, OKLCH and View Transitions detection, the @supports inside @container pattern, CSS.supports() JavaScript API, and the double-negation gotcha.</description><pubDate>Thu, 11 Jun 2026 18:00:00 GMT</pubDate><category>css</category><category>css @supports examples</category><category>css @supports not</category><category>css @supports has selector</category><category>css feature query browser support</category><category>css.supports javascript api</category><category>@supports selector function</category><category>@supports vs @media</category><category>tailwind supports arbitrary variant</category><category>@supports container queries</category><category>css feature detection no javascript</category><category>@supports at-rule layer</category><category>@supports not working</category><category>css supports has fallback</category><category>modernizr alternative css</category><category>progressive enhancement</category><category>css fallback</category><category>CSS.supports</category></item><item><title>structuredClone: JavaScript Deep Copy (Stop JSON.parse)</title><link>https://www.w3tweaks.com/javascript/javascript-structuredclone-deep-copy/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-structuredclone-deep-copy/</guid><description>The complete guide to structuredClone() — JavaScript deep copy without JSON.parse(JSON.stringify()) limits. Live tester runs spread, JSON, structuredClone, and lodash cloneDeep across 9 data types. Plus the polyfill for structuredClone is not defined errors, Symbol-key drop, descriptor loss, Immer/Mutative for React state, benchmarks, and WinterCG runtime parity.</description><pubDate>Thu, 11 Jun 2026 17:30:00 GMT</pubDate><category>javascript</category><category>structuredclone javascript example</category><category>structuredclone vs json.parse</category><category>javascript deep copy object</category><category>javascript clone class instance</category><category>javascript clone map set</category><category>structuredclone datacloneerror</category><category>javascript circular reference clone</category><category>structuredclone browser support</category><category>lodash clonedeep alternative</category><category>javascript deep copy array</category><category>structuredclone typescript</category><category>structuredclone react</category><category>structuredclone is not defined</category><category>deep copy nested object javascript</category><category>javascript object spread deep copy</category></item><item><title>AbortController: Cancel Fetch Properly (With Live Demo)</title><link>https://www.w3tweaks.com/javascript/javascript-abortcontroller-cancel-fetch/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-abortcontroller-cancel-fetch/</guid><description>How to cancel a fetch request properly — with a live search-race demo. Type fast and watch stale requests get cancelled in real time. Covers AbortController vs AbortSignal, debounce+abort for autocomplete, AbortSignal.timeout() one-liners, AbortSignal.any() composition, AbortSignal.throwIfAborted(), React useEffect cleanup, the single-use trap, custom abort reasons, memory leaks with abort listeners, and the libraries (TanStack Query, SWR, Axios, ky) that handle signals automatically.</description><pubDate>Wed, 10 Jun 2026 19:30:00 GMT</pubDate><category>javascript</category><category>abortcontroller cancel fetch javascript</category><category>abortsignal timeout fetch</category><category>fetch timeout javascript example</category><category>cancel fetch request react useeffect</category><category>abort fetch on unmount</category><category>fetch race condition javascript</category><category>abortsignal.any browser support</category><category>throwifaborted abortsignal example</category><category>axios cancellation abortcontroller</category><category>debounce abort fetch search</category><category>fetch retry abort signal</category><category>what is abortcontroller javascript</category><category>abortcontroller vs abortsignal</category><category>react query abortsignal</category><category>abortcontroller node js</category><category>abortcontroller cloudflare workers</category></item><item><title>Native Lazy Loading: When loading=lazy Silently Fails</title><link>https://www.w3tweaks.com/html/native-lazy-loading-when-it-works-silently-fails/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/native-lazy-loading-when-it-works-silently-fails/</guid><description>loading=lazy looks foolproof — one attribute, defer offscreen images. But it produces no error when it fails. It silently delays your LCP if applied to the hero, does nothing on CSS backgrounds, causes layout shift without dimensions, hides images from Googlebot when paired with data-src libraries, and gets overridden silently by preload directives. Six silent failures plus WordPress auto-lazy, framework auto-lazy defaults, content-visibility, fetchpriority=low, NoScript fallback, AdSense iframes, and the picture+srcset+lazy combined pattern.</description><pubDate>Wed, 10 Jun 2026 19:00:00 GMT</pubDate><category>lazy loading</category><category>loading lazy not working</category><category>native lazy loading</category><category>img loading lazy</category><category>iframe loading lazy youtube</category><category>loading lazy vs eager</category><category>lazy loading background image css</category><category>intersection observer rootmargin</category><category>content-visibility auto example</category><category>facade pattern youtube</category><category>fetchpriority high lcp</category><category>fetchpriority low</category><category>lazy loading wordpress</category><category>data-src lazy loading seo</category><category>above the fold lazy loading</category><category>picture srcset lazy loading</category><category>preload as image lazy</category><category>lighthouse defer offscreen images</category></item><item><title>CSS Dark Mode: prefers-color-scheme, light-dark, OKLCH</title><link>https://www.w3tweaks.com/css/css-dark-mode-prefers-color-scheme/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-dark-mode-prefers-color-scheme/</guid><description>The complete CSS dark mode guide — prefers-color-scheme media query, the new light-dark() function with the color-scheme gotcha, OKLCH tokens with color-mix() for perceptual lightness scaling, Material 3 surface elevation, View Transitions API for the toggle animation, the SSR/SSG FOUC fix matrix (Next.js cookie pattern), Windows High Contrast Mode survival with forced-colors, meta theme-color for mobile chrome, Tailwind v4 @custom-variant dark, and cross-tab sync.</description><pubDate>Wed, 10 Jun 2026 17:00:00 GMT</pubDate><category>css</category><category>css dark mode toggle</category><category>prefers-color-scheme media query</category><category>css light-dark function</category><category>color-scheme css property</category><category>dark mode flash fix</category><category>css custom properties dark mode</category><category>oklch dark mode</category><category>view transition theme toggle</category><category>tailwind dark mode</category><category>forced-colors mode css</category><category>matchMedia dark mode javascript</category><category>dark mode localStorage</category><category>meta theme-color</category><category>surface elevation dark mode</category><category>css color-mix oklch</category><category>windows high contrast mode</category><category>SSR FOUC dark mode</category></item><item><title>Responsive Images &amp; Modern Formats: AVIF, WebP, JXL Guide</title><link>https://www.w3tweaks.com/html/responsive-images-modern-formats-avif-webp-picture-srcset-sizes/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/responsive-images-modern-formats-avif-webp-picture-srcset-sizes/</guid><description>The complete responsive images guide — AVIF vs WebP file sizes, where JPEG XL stands now (Chrome 145 flag + Safari 17 default + Firefox 152 pref), the picture element with srcset and sizes done right, the 100vw sizes mistake that doubles your downloads, fetchpriority for LCP with decoding=async, placeholder strategies (BlurHash vs ThumbHash), CSS image-set for backgrounds, and the image CDN auto-format pattern that skips picture entirely.</description><pubDate>Tue, 09 Jun 2026 20:30:00 GMT</pubDate><category>responsive images</category><category>avif vs webp</category><category>jpeg xl</category><category>picture element srcset sizes</category><category>html picture element example</category><category>fetchpriority high lcp image</category><category>img srcset sizes explained</category><category>what is w descriptor srcset</category><category>responsive image best practices</category><category>css image-set function</category><category>lazy loading images</category><category>imagesrcset preload</category><category>decoding async img</category><category>blurhash vs thumbhash</category><category>image cdn auto format</category><category>modern image formats</category><category>core web vitals images</category><category>LCP optimization</category><category>art direction picture media</category></item><item><title>CSS aspect-ratio Property: Complete Guide With Live Visualiser</title><link>https://www.w3tweaks.com/css/css-aspect-ratio-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-aspect-ratio-explained/</guid><description>CSS aspect-ratio is one line where the old padding-bottom hack needed five. It reserves space proportionally, eliminates layout shift, and works natively in every browser since 2021. This guide covers every value, the auto fallback for images, the gotchas with flexbox and content overflow, CSS custom-property patterns, Tailwind/Bootstrap equivalents, the @media (aspect-ratio) vs property disambiguation, view-transition interpolation, social-card cropping with object-position, and a complete common-ratios reference.</description><pubDate>Tue, 09 Jun 2026 19:00:00 GMT</pubDate><category>css</category><category>css aspect-ratio property</category><category>responsive 16:9 video css</category><category>css aspect-ratio auto</category><category>css aspect-ratio not working</category><category>css aspect-ratio padding hack</category><category>css aspect-ratio flexbox</category><category>css aspect-ratio image cls</category><category>css aspect-ratio container query</category><category>tailwind aspect ratio</category><category>css aspect-ratio vs object-fit</category><category>aspect-ratio media query</category><category>css golden ratio</category><category>css 1.91 1 og image</category><category>aspect-ratio polyfill</category><category>CSS variable aspect-ratio</category><category>object-fit object-position</category><category>view transitions aspect-ratio</category></item><item><title>Promise.all vs allSettled vs race vs any: Complete Guide</title><link>https://www.w3tweaks.com/javascript/javascript-promise-all-allsettled-race-any/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-promise-all-allsettled-race-any/</guid><description>Promise.all vs allSettled vs race vs any explained with a live visualiser. Set four promise durations and outcomes, then watch all four methods settle differently in real time. Plus the patterns competitors skip: AbortSignal.timeout + AbortSignal.any for modern timeouts, concurrency pools to cap parallel requests, TypeScript narrowing for allSettled, Promise.withResolvers and Promise.try, the unhandled-rejection traps, and the await-Promise.all vs serial-await interview question answered.</description><pubDate>Tue, 09 Jun 2026 18:30:00 GMT</pubDate><category>javascript</category><category>promise.all vs allsettled</category><category>promise.all error handling</category><category>javascript promise timeout</category><category>promise.race example</category><category>promise.any example</category><category>aggregateerror javascript</category><category>promise.all with async await</category><category>concurrent promises javascript</category><category>promise pool limit concurrency</category><category>abortcontroller fetch timeout</category><category>promise.allsettled typescript</category><category>promise.all parallel requests</category><category>promise.any vs promise.race</category><category>unhandled promise rejection allsettled</category><category>Promise.withResolvers</category><category>Promise.try</category><category>AbortSignal.timeout</category><category>AbortSignal.any</category></item><item><title>Service Worker Offline First: Complete Tutorial With Simulator</title><link>https://www.w3tweaks.com/javascript/service-workers-offline-first/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/service-workers-offline-first/</guid><description>This service worker offline first tutorial has an interactive simulator — pick a strategy, toggle offline, click Clear Cache, and watch cache-first / network-first / stale-while-revalidate behave live. Then handle the waiting trap with a New Version Available banner, queue offline POST writes with Background Sync, fix cache.addAll() atomicity, enable Navigation Preload for ~300ms cold-start savings, and work around iOS Safari quirks.</description><pubDate>Tue, 09 Jun 2026 00:00:00 GMT</pubDate><category>javascript</category><category>pwa service worker</category><category>service worker offline first</category><category>service worker tutorial</category><category>service worker caching strategies</category><category>service worker register</category><category>service worker waiting</category><category>service worker not working</category><category>service worker update</category><category>skipwaiting clients claim</category><category>cache first strategy</category><category>network first strategy</category><category>stale while revalidate service worker</category><category>background sync api</category><category>navigation preload</category><category>cache.addAll atomicity</category><category>web push notifications</category><category>iOS Safari service worker</category><category>PWA manifest beforeinstallprompt</category><category>navigator.storage.persist</category><category>how to clear service worker</category><category>service worker scope</category></item><item><title>HTML Drag and Drop File Upload: The Complete Guide</title><link>https://www.w3tweaks.com/html/html-file-upload-drag-drop/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-file-upload-drag-drop/</guid><description>Most drag-drop tutorials stop before the dragleave flickering bug that breaks every drop zone with child elements. Many still say Fetch can&apos;t show upload progress — false since Chrome 105+ (ReadableStream + duplex: &apos;half&apos;). This guide covers the flicker counter fix, the modern Fetch + XHR upload progress comparison, folder uploads with webkitdirectory, image preview cleanup, magic byte detection, paste-from-clipboard, WCAG 2.5.7 dragging movements, drag-to-reorder, and the input.value reset gotcha.</description><pubDate>Mon, 08 Jun 2026 23:00:00 GMT</pubDate><category>html drag and drop file upload</category><category>html file upload example</category><category>html5 drag drop tutorial</category><category>dragleave fires multiple times</category><category>drag and drop not working mobile</category><category>javascript upload progress bar</category><category>fetch upload progress</category><category>javascript file upload validation</category><category>drag and drop reorder list javascript</category><category>input type file accept multiple</category><category>webkitdirectory upload folder</category><category>prevent default dragover</category><category>xhr abort upload</category><category>file system access api vs input</category><category>paste image upload javascript</category><category>FileReader</category><category>FormData</category><category>magic bytes file signature</category><category>URL.createObjectURL</category><category>WCAG 2.5.7 dragging movements</category></item><item><title>CSS mask: Fade, Reveal &amp; Shape Elements (Complete Guide)</title><link>https://www.w3tweaks.com/css/css-mask-property-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-mask-property-explained/</guid><description>CSS mask uses another image or gradient as a stencil for element visibility. Unlike clip-path&apos;s hard edges, mask creates soft fades, partial transparency, and graduated reveals. This guide covers the alpha vs luminance reality (not just black=visible), gradient masks, SVG icon recoloring with currentColor, scroll container edge fades, spotlight hover, wipe reveals, scroll-driven animation-timeline reveals, mask-composite + mask-border, and the -webkit-mask-composite naming mismatch that silently breaks Safari.</description><pubDate>Mon, 08 Jun 2026 21:30:00 GMT</pubDate><category>css</category><category>css mask image</category><category>css mask gradient</category><category>css mask vs clip-path</category><category>mask-composite source-over</category><category>css scroll fade gradient</category><category>css spotlight effect</category><category>css wipe reveal animation</category><category>css text mask gradient</category><category>webkit mask composite</category><category>mask-mode luminance</category><category>css fade edges scroll</category><category>css mask not working safari</category><category>css mask icon color change</category><category>mask-border</category><category>mask-type</category><category>currentColor SVG icon mask</category><category>scroll-driven mask reveal</category><category>animation-timeline view</category></item><item><title>CSS mix-blend-mode: Blend Text, Images &amp; Colors Like Photoshop</title><link>https://www.w3tweaks.com/css/css-mix-blend-mode-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-mix-blend-mode-explained/</guid><description>mix-blend-mode lets an element&apos;s pixels react to whatever is behind them — the same algorithms Photoshop uses. Remove white backgrounds from logos. Make text always readable (with the WCAG caveat nobody mentions). Build duotone photos in pure CSS or with Spotify-style SVG feColorMatrix. Plus the interaction matrix when mix-blend-mode silently stops working with opacity/filter/transform, plus-lighter/plus-darker (CSS Blending Level 2), animation behavior, glitch/chromatic-aberration patterns, and forced-colors fallbacks.</description><pubDate>Sun, 07 Jun 2026 21:30:00 GMT</pubDate><category>css</category><category>mix-blend-mode</category><category>css mix blend mode examples</category><category>blend modes</category><category>css blend modes list</category><category>background-blend-mode</category><category>background blend mode multiply</category><category>multiply</category><category>remove white background css</category><category>screen</category><category>screen blend mode css</category><category>overlay</category><category>css text on image readable</category><category>difference</category><category>mix blend mode difference</category><category>isolation</category><category>isolation isolate css</category><category>duotone</category><category>css duotone image</category><category>css duotone photo effect</category><category>Spotify duotone feColorMatrix</category><category>glassmorphism</category><category>css effects</category><category>css glitch effect</category><category>chromatic aberration</category><category>plus-lighter</category><category>plus-darker</category><category>mix blend mode not working</category><category>mix blend mode vs opacity</category><category>forced-colors mode</category><category>WCAG difference contrast</category></item><item><title>HTML contenteditable: Rich Text Editor Without Libraries</title><link>https://www.w3tweaks.com/html/html-contenteditable-rich-text-editor/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-contenteditable-rich-text-editor/</guid><description>Every contenteditable tutorial shows bold/italic buttons and stops before the #1 bug: clicking the toolbar destroys the editor selection and formatting applies to nothing. This guide covers the fix, the modern beforeinput + inputType replacement for execCommand, the brand-new EditContext API (Chrome 121+), CJK composition events, XSS-safe paste sanitization with DOMPurify and the native Sanitizer API, iOS autocorrect destroying inline formatting, image paste handling, caret restoration with TreeWalker, and the complete decision framework for when to ditch contenteditable for TipTap/ProseMirror.</description><pubDate>Sun, 07 Jun 2026 21:00:00 GMT</pubDate><category>contenteditable</category><category>rich text editor</category><category>execCommand</category><category>execcommand alternative</category><category>beforeinput</category><category>inputType</category><category>EditContext API</category><category>Selection API</category><category>Range</category><category>contenteditable placeholder</category><category>contenteditable placeholder css only</category><category>paste sanitize</category><category>DOMPurify</category><category>Sanitizer API</category><category>toolbar selection</category><category>queryCommandState</category><category>querycommandstate example</category><category>plaintext-only</category><category>contenteditable tutorial</category><category>html editor</category><category>wysiwyg</category><category>javascript wysiwyg editor from scratch</category><category>rich text editor vanilla javascript</category><category>html contenteditable example</category><category>contenteditable cursor position</category><category>contenteditable paste plain text only</category><category>contenteditable not working</category><category>contenteditable bold button not working</category><category>compositionstart</category><category>isComposing</category><category>TipTap</category><category>ProseMirror</category><category>Quill</category><category>iOS autocorrect contenteditable</category></item><item><title>JavaScript Web Workers: Keep the UI Smooth While Running Heavy Code</title><link>https://www.w3tweaks.com/javascript/javascript-web-workers/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-web-workers/</guid><description>Web Worker tutorials always need a separate worker.js file and a build tool. This one doesn&apos;t. Learn inline workers with Blob URLs (no separate file), a worker pool you build from scratch, transferable objects benchmark showing 100-300× speed difference, Comlink for ergonomic worker APIs, OffscreenCanvas for jank-free animations, SharedArrayBuffer + Atomics with the COOP/COEP headers you need, the structured clone gotchas, modern Vite/React syntax, and the exact threshold when workers hurt instead of help.</description><pubDate>Sun, 07 Jun 2026 20:30:00 GMT</pubDate><category>javascript</category><category>javascript web worker example</category><category>web workers</category><category>javascript worker thread</category><category>performance</category><category>ui freeze</category><category>postMessage</category><category>web worker postmessage example</category><category>transferable objects web worker</category><category>worker pool</category><category>web worker pool javascript</category><category>SharedArrayBuffer</category><category>sharedarraybuffer web worker example</category><category>blob url</category><category>inline worker</category><category>web worker without separate file</category><category>progress reporting</category><category>comlink</category><category>comlink web worker example</category><category>offscreencanvas</category><category>offscreencanvas web worker</category><category>service worker vs web worker</category><category>shared worker</category><category>structured clone</category><category>datacloneerror</category><category>partytown</category><category>atomics</category><category>crossoriginisolated</category><category>coop coep</category><category>vite web worker</category><category>react web worker</category></item><item><title>How to Add .env to .gitignore: The Complete Security Guide</title><link>https://www.w3tweaks.com/guide/add-env-to-gitignore-tutorial/</link><guid isPermaLink="true">https://www.w3tweaks.com/guide/add-env-to-gitignore-tutorial/</guid><description>The complete guide to adding .env to .gitignore. Covers the standard .env* block (Next.js / Vite / CRA), the rotate-FIRST recovery checklist, git filter-repo for rewriting history, GitHub Push Protection, gitleaks/TruffleHog pre-commit scanners, dotenvx encrypted-env, --skip-worktree vs --assume-unchanged, and the global gitignore pattern.</description><pubDate>Sun, 07 Jun 2026 19:00:00 GMT</pubDate><category>gitignore</category><category>env</category><category>env file</category><category>git security</category><category>secrets management</category><category>git filter-repo</category><category>github secret scanning</category><category>gitleaks</category><category>trufflehog</category><category>skip-worktree</category><category>assume-unchanged</category><category>dotenvx</category><category>doppler</category><category>sops</category><category>vault</category><category>env example</category><category>git rm cached</category><category>remove env from git history</category><category>env file already committed</category><category>gitignore env local</category><category>gitignore env file example</category><category>env file security best practices</category></item><item><title>JavaScript Memory Leak Fix: 6 Patterns + DevTools Walkthrough</title><link>https://www.w3tweaks.com/javascript/javascript-memory-leak-fix/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-memory-leak-fix/</guid><description>Every memory leak tutorial tells you to open DevTools without giving you actual leaks to practice on. This guide has 6 live triggerable leaks built into the demo — open DevTools alongside and watch memory grow in real time. Covers the three-snapshot technique, queryObjects() DevTools trick, observer-disconnect (ResizeObserver / IntersectionObserver), AbortController unified cleanup, performance.measureUserAgentSpecificMemory() for production, React useEffect cleanup, WeakMap/WeakRef + FinalizationRegistry caveats, and real KB-per-minute growth numbers.</description><pubDate>Sat, 06 Jun 2026 18:30:00 GMT</pubDate><category>javascript</category><category>memory leak</category><category>javascript memory leak detection</category><category>chrome devtools heap snapshot</category><category>devtools</category><category>heap snapshot</category><category>performance</category><category>garbage collection</category><category>weakmap</category><category>weakmap vs map memory</category><category>weakref</category><category>FinalizationRegistry</category><category>setinterval</category><category>clearInterval not working</category><category>detached dom</category><category>detached dom nodes chrome</category><category>react</category><category>react useeffect cleanup memory leak</category><category>closures</category><category>javascript memory leak closure</category><category>retained size</category><category>queryObjects</category><category>AbortController</category><category>ResizeObserver</category><category>IntersectionObserver</category><category>measureUserAgentSpecificMemory</category><category>performance.memory</category><category>node memory leak</category><category>javascript memory leak fix</category></item><item><title>Every HTML Input Type — Real-World Use Cases &amp; Mobile Keyboard Guide</title><link>https://www.w3tweaks.com/html/html-input-types-complete-guide/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-input-types-complete-guide/</guid><description>This is the complete HTML input types list with mobile keyboard hints, the pattern regex cookbook, enterkeyhint reference, autocomplete one-time-code for iOS, capture=environment for the rear camera, valueAsNumber/valueAsDate typed access, the datetime-local timezone offset trap, and linked date pickers. Most guides are reference lists — this one explains the decisions.</description><pubDate>Sat, 06 Jun 2026 18:30:00 GMT</pubDate><category>html input types</category><category>html input types list</category><category>inputmode</category><category>enterkeyhint</category><category>type number vs text</category><category>input date</category><category>input range</category><category>input search</category><category>input file</category><category>input color</category><category>datetime-local</category><category>datetime-local timezone offset</category><category>mobile keyboard</category><category>input type complete guide</category><category>html forms</category><category>inputmode numeric</category><category>inputmode numeric vs decimal</category><category>input range output element</category><category>linked date inputs</category><category>input pattern credit card</category><category>input type file preview</category><category>input type file preview multiple</category><category>input type color hex to rgb</category><category>input type tel pattern</category><category>html input enterkeyhint values</category><category>autocomplete one-time-code</category><category>WebOTP</category><category>capture environment</category><category>showOpenFilePicker</category><category>valueAsNumber</category><category>valueAsDate</category><category>datalist</category><category>spellcheck autocorrect autocapitalize</category></item><item><title>CSS filter &amp; backdrop-filter: The Complete Visual Guide</title><link>https://www.w3tweaks.com/css/css-filter-backdrop-filter/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-filter-backdrop-filter/</guid><description>CSS filter applies effects to an element — blur, grayscale, brightness, contrast, drop-shadow. CSS backdrop-filter applies those same effects to whatever is behind the element. This complete guide covers both properties, the filter-order gotcha, drop-shadow vs box-shadow, glassmorphism patterns (including Apple&apos;s Liquid Glass + dialog::backdrop modals), filter: url() for SVG-referenced effects like duotone and gooey blobs, prefers-reduced-transparency, @supports fallbacks, forced-colors mode, the iOS Safari fixed-position bug, and performance tiers.</description><pubDate>Sat, 06 Jun 2026 17:30:00 GMT</pubDate><category>css</category><category>filter</category><category>backdrop-filter</category><category>glassmorphism</category><category>blur</category><category>grayscale</category><category>drop-shadow</category><category>hue-rotate</category><category>css effects</category><category>frosted glass</category><category>visual effects</category><category>backdrop-filter safari</category><category>filter performance</category><category>backdrop-filter not working</category><category>frosted glass css</category><category>css filter examples</category><category>css filter hover effect</category><category>css duotone image</category><category>css blur background image</category><category>hue-rotate css color change</category><category>filter url</category><category>svg filter</category><category>liquid glass</category><category>prefers-reduced-transparency</category><category>dialog backdrop</category><category>gooey blob</category><category>forced-colors</category><category>css glassmorphism generator</category></item><item><title>Accessible Forms — Complex Fields for Screen Readers</title><link>https://www.w3tweaks.com/html/accessible-forms-complex-fields-screen-readers/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/accessible-forms-complex-fields-screen-readers/</guid><description>Over 50% of WCAG failures are form-related. This guide covers what others miss: the fieldset legend verbosity problem, aria-describedby with multiple IDs, aria-errormessage vs aria-describedby (with current screen-reader support data), the 5-step submit error pattern with validation timing, WCAG 2.2 form criteria (Redundant Entry, Accessible Authentication, Target Size), Label in Name + Voice Control, autocomplete + inputmode + enterkeyhint reference, forced-colors mode, role=status for success, when NOT to build a custom select, and a correct accessible password toggle.</description><pubDate>Fri, 05 Jun 2026 21:00:00 GMT</pubDate><category>accessible forms</category><category>screen reader</category><category>aria-describedby</category><category>aria-invalid</category><category>aria-errormessage</category><category>fieldset legend</category><category>aria-required</category><category>form error handling</category><category>autocomplete wcag</category><category>role group</category><category>password show hide</category><category>character counter aria</category><category>multi-step form</category><category>form accessibility</category><category>WCAG 1.3.5</category><category>WCAG 2.2</category><category>WCAG 2.5.3</category><category>aria-live forms</category><category>accessible form labels</category><category>aria-describedby example</category><category>aria-invalid accessibility</category><category>fieldset legend screen reader</category><category>wcag form errors</category><category>accessible password toggle</category><category>aria-required vs required</category><category>accessible form validation javascript</category><category>screen reader form error message</category><category>autocomplete wcag aa</category><category>label in name</category><category>voice control accessibility</category><category>forced colors</category><category>inputmode</category><category>enterkeyhint</category><category>role status</category><category>datalist accessibility</category></item><item><title>CSS clip-path: Create Any Shape — The Complete Guide</title><link>https://www.w3tweaks.com/css/css-clip-path-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-clip-path-explained/</guid><description>clip-path lets you cut any element into any shape — circles, hexagons, arrows, diagonals, chevrons — with pure CSS. No SVG files, no image masks, no extra HTML. This complete guide covers every value, animation patterns, the new shape()/rect()/xywh() functions, scroll-driven reveals with animation-timeline: view(), clip-path: url() for arbitrary SVG paths, the Clippy generator, hover/click area gotchas, @keyframes loops, and the wrong-tool bugs nobody demonstrates.</description><pubDate>Fri, 05 Jun 2026 20:30:00 GMT</pubDate><category>css</category><category>clip-path</category><category>css shapes</category><category>polygon</category><category>circle clip-path</category><category>css animations</category><category>reveal animation</category><category>diagonal section</category><category>shape function</category><category>css morphing</category><category>clip-path not working</category><category>inset clip-path</category><category>css clip-path generator</category><category>css clip-path triangle</category><category>clip-path image circle</category><category>clip-path hover effect</category><category>clip-path scroll reveal</category><category>clip-path responsive</category><category>clip-path browser support</category><category>clip-path vs mask</category><category>rect xywh</category><category>animation-timeline</category><category>svg clippath</category></item><item><title>JavaScript Debounce vs Throttle: Real Difference With Live Numbers</title><link>https://www.w3tweaks.com/javascript/javascript-debounce-vs-throttle/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-debounce-vs-throttle/</guid><description>Every debounce vs throttle article says &apos;throttle fires 30-50 times, debounce fires once&apos; — but nobody shows it happening live. This tutorial has a firing-timeline visualiser that tracks every call with real millisecond timestamps, plus the leading edge pattern nobody explains, the rAF throttle nobody covers, the AbortController + debounce fetch pattern, React 18 useDeferredValue comparison, TypeScript signatures, and the wrong-tool bugs nobody demonstrates.</description><pubDate>Fri, 05 Jun 2026 19:30:00 GMT</pubDate><category>javascript</category><category>debounce</category><category>throttle</category><category>performance</category><category>events</category><category>scroll</category><category>input</category><category>requestanimationframe</category><category>react hooks</category><category>optimization</category><category>leading edge</category><category>debounce vs throttle react</category><category>javascript debounce scroll</category><category>react usedebounce hook</category><category>debounce typescript</category><category>abortcontroller</category><category>usedeferredvalue</category><category>page visibility api</category><category>passive event listeners</category><category>requestidlecallback</category><category>debounce input search</category><category>cancel debounced function</category></item><item><title>HTML Keyboard Navigation &amp; Focus Management: Complete Guide</title><link>https://www.w3tweaks.com/html/html-keyboard-navigation-focus-management/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-keyboard-navigation-focus-management/</guid><description>Most focus management tutorials still teach a 50-line JavaScript focus trap that the HTML inert attribute replaces in one line. They show skip link patterns with Chrome&apos;s bug still in place. They never explain when you still need aria-hidden alongside inert. This guide covers tabindex 0 vs -1, focus-visible vs focus, the WCAG 2.2 numeric focus indicator rules, aria-hidden vs inert, nested modals, roving tabindex vs aria-activedescendant, enterkeyhint for mobile keyboards, and SPA route focus management.</description><pubDate>Thu, 04 Jun 2026 19:55:00 GMT</pubDate><category>keyboard navigation</category><category>focus management</category><category>tabindex</category><category>tabindex 0 vs -1</category><category>focus-visible</category><category>focus-within</category><category>skip link</category><category>focus trap</category><category>inert attribute</category><category>aria-hidden vs inert</category><category>roving tabindex</category><category>aria-activedescendant</category><category>WCAG 2.2</category><category>wcag 2.2 focus appearance</category><category>focus appearance</category><category>autofocus</category><category>accessibility</category><category>html keyboard</category><category>spa focus management</category><category>css focus ring</category><category>enterkeyhint</category><category>inputmode</category><category>shadow dom focus</category><category>delegatesfocus</category><category>user-valid</category><category>user-invalid</category><category>focusvisible option</category></item><item><title>CSS scroll-snap: Build a CSS Carousel Without JavaScript</title><link>https://www.w3tweaks.com/css/css-scroll-snap-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-scroll-snap-explained/</guid><description>Build a CSS carousel without JavaScript in 5 lines of CSS. This complete guide covers every scroll-snap property, mandatory vs proximity, the new scrollsnapchange event, scroll-padding for sticky headers, the CSS Carousel API (::scroll-marker and ::scroll-button), scroll-driven animations paired with snap, the 100dvh fix for mobile, drag-to-scroll for desktop, keyboard accessibility, and &apos;scroll snap not working&apos; troubleshooting.</description><pubDate>Thu, 04 Jun 2026 19:30:00 GMT</pubDate><category>css</category><category>scroll-snap</category><category>scroll-snap-type</category><category>scroll-snap-align</category><category>carousel</category><category>slider</category><category>scroll-snap-stop</category><category>scrollsnapchange</category><category>scroll-padding</category><category>scroll-margin</category><category>css carousel without javascript</category><category>mandatory vs proximity</category><category>css full page scroll</category><category>scroll-driven animations</category><category>css scroll-marker</category><category>scroll-button</category><category>css carousel api</category><category>100dvh</category><category>prefers-reduced-motion</category><category>accessibility</category></item><item><title>JavaScript Event Loop Explained — Visual Interactive Demo</title><link>https://www.w3tweaks.com/javascript/javascript-event-loop-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-event-loop-explained/</guid><description>The JavaScript event loop is the engine behind every setTimeout, Promise, and async/await call you write. This guide is an interactive event loop visualizer — five step-by-step scenarios where you watch the call stack, microtask queue, and macrotask queue update in real time. Covers browser AND Node.js event loop phases, process.nextTick vs setImmediate, the scheduler.yield() API for INP optimization, and the MessageChannel trick React uses.</description><pubDate>Thu, 04 Jun 2026 18:50:00 GMT</pubDate><category>javascript</category><category>event loop</category><category>call stack</category><category>microtask</category><category>macrotask</category><category>promises</category><category>settimeout</category><category>async await</category><category>task queue</category><category>web apis</category><category>javascript internals</category><category>nodejs event loop</category><category>process.nexttick</category><category>setimmediate</category><category>queuemicrotask</category><category>requestanimationframe</category><category>scheduler api</category><category>messagechannel</category><category>inp</category><category>core web vitals</category><category>javascript event loop visualizer</category><category>settimeout vs promise</category><category>microtask vs macrotask</category></item><item><title>CSS @font-face: The Complete Guide to Loading Custom Fonts Right</title><link>https://www.w3tweaks.com/css/css-font-face-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-font-face-explained/</guid><description>Most @font-face tutorials cover the basics and say &apos;add font-display: swap&apos;. That&apos;s not wrong, but it&apos;s about 20% of what you need to know. This guide covers all 5 font-display values, variable font axes, font-synthesis: none, the Font Loading API, font-variant-numeric, modern system font stacks, the adjusted fallback pattern that eliminates layout shift, unicode-range, FOIT/FOUT/FOFT, preload&apos;s LCP trade-off, and whether you should still use local() .</description><pubDate>Wed, 03 Jun 2026 19:50:00 GMT</pubDate><category>css</category><category>font-face</category><category>custom fonts</category><category>font-display</category><category>variable fonts</category><category>web fonts</category><category>woff2</category><category>size-adjust</category><category>ascent-override</category><category>descent-override</category><category>font-synthesis</category><category>font loading api</category><category>font-variant-numeric</category><category>tabular nums</category><category>modern font stacks</category><category>core web vitals</category><category>cls</category><category>fout</category><category>foit</category><category>foft</category><category>self-host fonts</category><category>bunny fonts</category></item><item><title>JavaScript async/await Not Working? 12 Mistakes That Break Your Code</title><link>https://www.w3tweaks.com/javascript/javascript-async-await-not-working/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-async-await-not-working/</guid><description>async/await looks simple until it silently breaks — your function returns Promise {pending}, your forEach loop finishes before the data arrives, a 404 sails past your catch block, a search response from 2 seconds ago overwrites the one you wanted, or an error disappears with no trace. This guide shows 12 mistakes with the exact broken output, why it happens, and the precise fix.</description><pubDate>Wed, 03 Jun 2026 19:30:00 GMT</pubDate><category>javascript</category><category>async await</category><category>promises</category><category>debugging</category><category>foreach</category><category>fetch</category><category>error handling</category><category>asynchronous</category><category>promise pending</category><category>abort controller</category><category>race conditions</category><category>promise all</category><category>promise allsettled</category><category>setinterval</category><category>stack traces</category><category>return await</category><category>unhandled rejection</category><category>node.js</category><category>javascript mistakes</category></item><item><title>Semantic HTML Guide — Every Element and What You&apos;re Getting Wrong</title><link>https://www.w3tweaks.com/html/semantic-html-guide-every-element/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/semantic-html-guide-every-element/</guid><description>Every tutorial explains what semantic HTML is. Almost none explain that &lt;address&gt; wrapping a postal address is wrong, that &lt;cite&gt; must not contain author names, that HTML5&apos;s heading outline algorithm was never implemented by a single browser, or how the First Rule of ARIA quietly justifies the entire reason you should be reading this. This is the guide that covers what others miss — including &lt;em&gt; vs &lt;i&gt;, the &lt;details&gt; exclusive-accordion pattern, the SPA multi-&lt;main&gt; trick, &lt;kbd&gt;/&lt;samp&gt;/&lt;var&gt;, &lt;progress&gt; vs &lt;meter&gt;, and &lt;lang&gt; on subtrees.</description><pubDate>Wed, 03 Jun 2026 19:10:00 GMT</pubDate><category>semantic html</category><category>html5 elements</category><category>article vs section</category><category>html guide</category><category>heading hierarchy</category><category>time element datetime</category><category>address element</category><category>cite element</category><category>figure element</category><category>details summary</category><category>html search element</category><category>main element</category><category>hgroup</category><category>dfn element</category><category>mark element</category><category>em vs i</category><category>strong vs b</category><category>kbd samp var</category><category>progress vs meter</category><category>lang attribute</category><category>first rule of aria</category><category>semantic seo</category><category>html accessibility</category><category>ai crawlers</category></item><item><title>CSS Selectors You&apos;re Not Using (But Should Be)</title><link>https://www.w3tweaks.com/css/css-selectors-guide/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-selectors-guide/</guid><description>You know div, .class, and #id. But CSS has dozens of selectors that replace JavaScript event listeners, eliminate helper classes, and handle UI state in pure CSS. This guide covers the underused ones actually worth learning — :has(), :focus-within, :user-valid, :nth-child(of selector), :where()&apos;s zero-specificity trick, the :checked + ~ state machine, :target for routable UI, @scope, :defined, :dir(), and more.</description><pubDate>Tue, 02 Jun 2026 20:45:00 GMT</pubDate><category>css</category><category>css selectors</category><category>has selector</category><category>focus-within</category><category>nth-child</category><category>attribute selectors</category><category>pseudo-classes</category><category>user-valid</category><category>placeholder-shown</category><category>where selector</category><category>target selector</category><category>checked selector</category><category>css scope</category><category>css dir</category><category>modern css</category><category>css tips</category></item><item><title>ARIA Roles — The Practical Guide Developers Actually Need</title><link>https://www.w3tweaks.com/html/aria-roles-practical-guide/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/aria-roles-practical-guide/</guid><description>79.4% of websites use ARIA — and those sites have 2× more accessibility errors than sites without it. ARIA is the most powerful accessibility tool in HTML and the most dangerous. This guide shows the patterns that go catastrophically wrong, the role=menu trap, the aria-live timing pitfall, the aria-hidden + focus silent-screen-reader footgun, role=presentation cascading, mobile screen reader divergence, and the DevTools tree-debug workflow nobody documents.</description><pubDate>Tue, 02 Jun 2026 19:54:00 GMT</pubDate><category>aria</category><category>aria roles</category><category>web accessibility</category><category>WAI-ARIA</category><category>aria-live</category><category>aria-expanded</category><category>screen reader</category><category>WCAG</category><category>landmark roles</category><category>widget roles</category><category>aria-busy</category><category>aria-label</category><category>accessibility tree</category><category>aria-live timing</category><category>role menu</category><category>keyboard navigation</category><category>NVDA</category><category>VoiceOver</category><category>TalkBack</category><category>inert</category></item><item><title>Build a JavaScript AI Agent From Scratch (No Framework)</title><link>https://www.w3tweaks.com/javascript/build-javascript-ai-agent/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/build-javascript-ai-agent/</guid><description>Every AI agent tutorial uses Python, LangChain, or Mastra. This one doesn&apos;t. Build a complete ReAct agent from scratch in vanilla JavaScript — the actual while loop, Thought/Action/Observation cycle, memory, guardrails, parallel tool calls, hallucinated-tool-name protection, and a 20-line DIY observability trace, all in a streaming browser UI that shows the agent thinking in real time.</description><pubDate>Tue, 02 Jun 2026 19:30:00 GMT</pubDate><category>javascript</category><category>ai agent</category><category>react pattern</category><category>tool calling</category><category>memory</category><category>openai</category><category>autonomous</category><category>vanilla js</category><category>no framework</category><category>guardrails</category><category>agent loop</category><category>parallel tools</category><category>observability</category></item><item><title>CSS Specificity Explained: The Complete Cascade Guide</title><link>https://www.w3tweaks.com/css/css-specificity-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-specificity-explained/</guid><description>You write a rule that should win. It doesn&apos;t. You add !important. Now something else breaks. Specificity fights are the most common source of CSS frustration — and most tutorials only teach half the picture. This guide covers the complete system, including :is(), :where(), @layer, CSS Nesting&apos;s hidden specificity trap, and how Tailwind, Vue scoped styles, and CSS Modules each handle specificity differently.</description><pubDate>Mon, 01 Jun 2026 21:20:00 GMT</pubDate><category>css</category><category>specificity</category><category>cascade</category><category>selectors</category><category>css layers</category><category>important</category><category>css nesting</category><category>tailwind</category><category>vue scoped styles</category><category>debugging</category><category>css architecture</category></item><item><title>AI That Reads PDFs in JavaScript — Three Strategies</title><link>https://www.w3tweaks.com/javascript/javascript-ai-read-pdf/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/javascript-ai-read-pdf/</guid><description>Every AI PDF tutorial uses Python and LangChain. This one doesn&apos;t. Learn three pure JavaScript strategies for making AI read PDFs — direct text extraction, GPT-4o Vision for scanned documents, and structured JSON extraction — all in a single browser file. Plus the PDF.js worker gotchas, the API-key-in-the-browser elephant, and a free Tesseract.js OCR fallback nobody documents.</description><pubDate>Mon, 01 Jun 2026 20:40:00 GMT</pubDate><category>javascript</category><category>pdf</category><category>pdf.js</category><category>openai</category><category>ai</category><category>rag</category><category>text extraction</category><category>tesseract</category><category>ocr</category><category>generateObject</category><category>zod</category><category>structured data</category><category>browser</category><category>vanilla js</category><category>no backend</category></item><item><title>HTML datalist — Native Autocomplete &amp; Search UI Guide</title><link>https://www.w3tweaks.com/html/html-datalist-native-autocomplete-search-ui/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-datalist-native-autocomplete-search-ui/</guid><description>Most datalist tutorials show three lines of HTML and stop. Nobody explains how to detect when a user actually picked from the list, how to show a friendly label while submitting a hidden ID, or which iOS Safari versions silently break the whole feature. This is that tutorial.</description><pubDate>Mon, 01 Jun 2026 19:47:00 GMT</pubDate><category>html</category><category>datalist</category><category>autocomplete</category><category>native html</category><category>no javascript library</category><category>search ui</category><category>fetch api</category><category>debounce</category><category>abortcontroller</category><category>combobox</category><category>typeahead</category><category>form ux</category><category>datalist detect selection</category><category>datalist label value</category><category>datalist pattern</category><category>dynamic datalist</category></item><item><title>HTML5 Form Validation Without JavaScript — The Complete Guide</title><link>https://www.w3tweaks.com/html/html5-form-validation-without-javascript/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html5-form-validation-without-javascript/</guid><description>Every tutorial shows you required and pattern then stops. Nobody explains why :invalid turns inputs red before the user touches them, how to fix it with :user-invalid, how autofill silently breaks validation, or how to validate all 11 ValidityState conditions. This is that tutorial.</description><pubDate>Sun, 31 May 2026 16:51:00 GMT</pubDate><category>html5</category><category>form validation</category><category>constraint validation api</category><category>user-invalid</category><category>user-valid</category><category>validitystate</category><category>pattern attribute</category><category>required attribute</category><category>css form styling</category><category>no javascript</category><category>setcustomvalidity</category><category>cross-field validation</category><category>native html forms</category><category>accessibility</category><category>ux</category></item><item><title>Vercel AI SDK in Plain JavaScript (No Next.js)</title><link>https://www.w3tweaks.com/javascript/vercel-ai-sdk-javascript/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/vercel-ai-sdk-javascript/</guid><description>Every Vercel AI SDK tutorial assumes Next.js. This one doesn&apos;t. Learn how to use AI SDK Core in a plain Node.js script, build a minimal Express server that streams to vanilla HTML, switch providers with one line, and generate structured JSON with Zod — zero framework required.</description><pubDate>Sun, 31 May 2026 16:33:00 GMT</pubDate><category>javascript</category><category>vercel ai sdk</category><category>node.js</category><category>express</category><category>streaming</category><category>generateText</category><category>generateObject</category><category>zod</category><category>provider switching</category><category>openai</category><category>anthropic</category><category>no nextjs</category><category>vanilla js</category></item><item><title>CSS calc() Explained: Dynamic Values Without JS</title><link>https://www.w3tweaks.com/css/css-calc-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-calc-explained/</guid><description>You can&apos;t write width: 100% - 32px in plain CSS — the browser doesn&apos;t know what 100% minus 32 pixels equals until layout time. calc() defers that calculation to the browser, solving it at render time when both values are known. No JavaScript needed.</description><pubDate>Sun, 31 May 2026 15:41:00 GMT</pubDate><category>css</category><category>calc</category><category>css functions</category><category>layout</category><category>responsive design</category><category>css variables</category><category>units</category><category>fluid typography</category></item><item><title>CSS object-fit &amp; object-position: Stop Stretching</title><link>https://www.w3tweaks.com/css/css-object-fit-object-position/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-object-fit-object-position/</guid><description>You have a card grid where every thumbnail should be the same height. You set width:100% and height:200px on the images — and they all stretch and distort. The fix is two words: object-fit: cover. This guide covers all 5 values, the focal-point trick with object-position, and why object-fit sometimes silently does nothing.</description><pubDate>Sat, 30 May 2026 23:54:00 GMT</pubDate><category>css</category><category>object-fit</category><category>object-position</category><category>images</category><category>video</category><category>cover</category><category>contain</category><category>responsive</category><category>thumbnails</category><category>avatars</category></item><item><title>WebLLM: Run LLMs in the Browser with JavaScript</title><link>https://www.w3tweaks.com/javascript/webllm-run-llm-browser-javascript/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/webllm-run-llm-browser-javascript/</guid><description>WebLLM uses WebGPU to run quantized Llama, Phi, Gemma, and Mistral models entirely inside your browser tab. No server, no API key, no data ever sent to the cloud. The model downloads once, caches in the browser, and runs at near-native GPU speed.</description><pubDate>Sat, 30 May 2026 23:33:00 GMT</pubDate><category>javascript</category><category>webllm</category><category>webgpu</category><category>llm</category><category>browser ai</category><category>local ai</category><category>no server</category><category>llama</category><category>phi</category><category>gemma</category><category>wasm</category><category>privacy</category></item><item><title>HTML details &amp; summary — Beyond Basic Accordions</title><link>https://www.w3tweaks.com/html/html-details-summary-beyond-basic-accordions/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-details-summary-beyond-basic-accordions/</guid><description>Most developers use details for a one-off toggle and move on. But the native details element has exclusive accordion behavior built into HTML, smooth animation via a pure CSS grid trick, and direct SEO impact through FAQ rich results. Here&apos;s everything it can do — zero JavaScript required.</description><pubDate>Sat, 30 May 2026 22:35:00 GMT</pubDate><category>html</category><category>details</category><category>summary</category><category>accordion</category><category>exclusive accordion</category><category>name attribute</category><category>css animation</category><category>grid-template-rows</category><category>tree view</category><category>faq schema</category><category>no javascript</category><category>disclosure widget</category></item><item><title>The HTML Popover API — Complete Guide (No Libraries)</title><link>https://www.w3tweaks.com/html/html-popover-api-complete-guide/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-popover-api-complete-guide/</guid><description>Popper.js, Floating UI, Tippy.js — developers reach for JS libraries just to position a tooltip. The native Popover API does it with a single HTML attribute. Here&apos;s everything it can do, from basic tooltips to a full command palette, with zero dependencies.</description><pubDate>Fri, 29 May 2026 18:00:00 GMT</pubDate><category>html</category><category>popover api</category><category>popover attribute</category><category>css anchor positioning</category><category>tooltip</category><category>dropdown</category><category>no javascript</category><category>native html</category><category>popovertarget</category><category>popover-open</category><category>top-layer</category></item><item><title>Build a RAG App in the Browser with JavaScript</title><link>https://www.w3tweaks.com/javascript/build-rag-app-browser-javascript/</link><guid isPermaLink="true">https://www.w3tweaks.com/javascript/build-rag-app-browser-javascript/</guid><description>RAG lets AI answer questions about your own documents by retrieving the most relevant passages before generating a response. This tutorial builds a complete in-browser RAG system in vanilla JavaScript — embeddings, vector search, and GPT generation all without a backend.</description><pubDate>Fri, 29 May 2026 17:45:00 GMT</pubDate><category>javascript</category><category>rag</category><category>retrieval augmented generation</category><category>embeddings</category><category>openai</category><category>vector search</category><category>cosine similarity</category><category>ai</category><category>vanilla js</category><category>no backend</category></item><item><title>CSS ::before and ::after Pseudo-Elements Explained</title><link>https://www.w3tweaks.com/css/css-before-after-pseudo-elements-explained/</link><guid isPermaLink="true">https://www.w3tweaks.com/css/css-before-after-pseudo-elements-explained/</guid><description>Decorative arrows, tooltips, notification badges, quote marks, and animated underlines — without adding a single extra span or div to your HTML. This guide explains how ::before and ::after work, 8 real use cases, and the 5 reasons they silently stop showing.</description><pubDate>Fri, 29 May 2026 17:33:00 GMT</pubDate><category>css</category><category>pseudo-elements</category><category>before</category><category>after</category><category>content</category><category>layout</category><category>decorative</category><category>tooltip</category><category>badge</category></item><item><title>The HTML dialog Element: Complete Guide</title><link>https://www.w3tweaks.com/html/html-dialog-element-complete-guide/</link><guid isPermaLink="true">https://www.w3tweaks.com/html/html-dialog-element-complete-guide/</guid><description>The native HTML dialog element handles focus trapping, accessibility, top-layer rendering, and the backdrop — all out of the box. Stop shipping Bootstrap modals and 200-line JS overlay hacks. Here&apos;s everything dialog can do, from basic modals to animated drawers.</description><pubDate>Thu, 28 May 2026 19:25:00 GMT</pubDate><category>html</category><category>dialog</category><category>modal</category><category>drawer</category><category>accessibility</category><category>top-layer</category><category>showmodal</category><category>backdrop</category><category>focus trap</category></item></channel></rss>