<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>swjh</title><description>UX-Driven Frontend Engineering</description><link>https://swjh.de/</link><item><title>morphicons.com</title><link>https://swjh.de/links/morphicons/</link><guid isPermaLink="true">https://swjh.de/links/morphicons/</guid><description>Morph any SVG icon into any other with 6.5kb js gzipped. Morphicons solves the optimal similarity between two shapes in closed form (2D Procrustes).</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate></item><item><title>The Rules of Margin Collapse</title><link>https://swjh.de/links/rules-of-margin-collapse/</link><guid isPermaLink="true">https://swjh.de/links/rules-of-margin-collapse/</guid><description>In CSS, adjacent margins can sometimes overlap. This is known as “margin collapse”, and it has a reputation for being quite dastardly.</description><pubDate>Sat, 25 Jul 2026 00:00:00 GMT</pubDate></item><item><title>How to control React context from Storybook toolbar</title><link>https://swjh.de/blog/how-to-control-react-context-in-storybook/</link><guid isPermaLink="true">https://swjh.de/blog/how-to-control-react-context-in-storybook/</guid><description>You can control global react variables from Storybook toolbar via a custom control.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item><item><title>useSWR enhanced to prevent error message flashing on retry</title><link>https://swjh.de/blog/useswr-with-error-after-retries/</link><guid isPermaLink="true">https://swjh.de/blog/useswr-with-error-after-retries/</guid><description>How to prevent with useSWR error messages flashing up on retry.</description><pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate></item><item><title>specification.website</title><link>https://swjh.de/links/website-spec/</link><guid isPermaLink="true">https://swjh.de/links/website-spec/</guid><description>A platform-agnostic specification of all the technical details that matter for a website, from &lt;title&gt;to /.well-known/security.txt to WCAG contrast. Written for humans and agents.</description><pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate></item><item><title>How I sped up 11ty build time on Netlify from 5 min to 13s</title><link>https://swjh.de/blog/11ty-netlify-build-cache/</link><guid isPermaLink="true">https://swjh.de/blog/11ty-netlify-build-cache/</guid><description>A must-have for Eleventy hosted on Netlify: How to setup Build Cache!</description><pubDate>Fri, 24 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Sequence Diagram Tool: swimlanes.io</title><link>https://swjh.de/links/sequence-diagram-tool-swimlanesio/</link><guid isPermaLink="true">https://swjh.de/links/sequence-diagram-tool-swimlanesio/</guid><description>Easily create perfect sequence diagrams in a markdown-like syntax.</description><pubDate>Fri, 19 Nov 2021 00:00:00 GMT</pubDate></item><item><title>Appy SVG filters to any HTML Element</title><link>https://swjh.de/blog/appy-svg-filters-to-any-html-element/</link><guid isPermaLink="true">https://swjh.de/blog/appy-svg-filters-to-any-html-element/</guid><description>I just learned: you can apply SVG filters to anly HTML Elements outside the SVG via CSS</description><pubDate>Thu, 06 Aug 2020 00:00:00 GMT</pubDate></item><item><title>content-visibility: auto;</title><link>https://swjh.de/links/content-visibility-auto-/</link><guid isPermaLink="true">https://swjh.de/links/content-visibility-auto-/</guid><description>content-visibility: the new CSS property that boosts rendering performance</description><pubDate>Thu, 06 Aug 2020 00:00:00 GMT</pubDate></item><item><title>1-line layouts</title><link>https://swjh.de/links/1-line-layouts/</link><guid isPermaLink="true">https://swjh.de/links/1-line-layouts/</guid><description>Una shows 10 Modern CSS layout and sizing techniques that highlight just how robust and impactful a single-line of styling code can be.</description><pubDate>Sun, 19 Jul 2020 00:00:00 GMT</pubDate></item><item><title>Icônes - universal UI icon explorer</title><link>https://swjh.de/links/icones-universal-ui-icon-explorer/</link><guid isPermaLink="true">https://swjh.de/links/icones-universal-ui-icon-explorer/</guid><description>Dozens of UI icon sets to quickly explore, search and download. Including Icon sets from Material Design, Font Awesome, CSS.gg, And Design, Carbon, Bootstrap and many more!</description><pubDate>Sun, 19 Jul 2020 00:00:00 GMT</pubDate></item><item><title>keyframes.app</title><link>https://swjh.de/links/keyframes-app/</link><guid isPermaLink="true">https://swjh.de/links/keyframes-app/</guid><description>A tool to generate animations, shadows and other CSS visually.</description><pubDate>Fri, 17 Jul 2020 00:00:00 GMT</pubDate></item><item><title>Don&apos;t disable form controls</title><link>https://swjh.de/links/accessibly-disable-forms-vanilla-js/</link><guid isPermaLink="true">https://swjh.de/links/accessibly-disable-forms-vanilla-js/</guid><description>It’s OK to disable Buttons, but don’t disable submits</description><pubDate>Tue, 14 Jul 2020 00:00:00 GMT</pubDate></item><item><title>CUBE CSS</title><link>https://swjh.de/links/cube-css/</link><guid isPermaLink="true">https://swjh.de/links/cube-css/</guid><description>A CSS methodology by Andy Bell oriented towards simplicity and consistency with a heavy dosage of pragmatism.</description><pubDate>Mon, 06 Jul 2020 00:00:00 GMT</pubDate></item><item><title>How to Delete ALL node_modules folders on your machine</title><link>https://swjh.de/links/how-to-delete-all-node_modules-folders-on-your-machine/</link><guid isPermaLink="true">https://swjh.de/links/how-to-delete-all-node_modules-folders-on-your-machine/</guid><pubDate>Thu, 18 Jun 2020 00:00:00 GMT</pubDate></item><item><title>Structure a Vue.js app using Atomic Design and TailwindCSS</title><link>https://swjh.de/links/structure-a-vue-js-app-using-atomic-design-and-tailwindcss/</link><guid isPermaLink="true">https://swjh.de/links/structure-a-vue-js-app-using-atomic-design-and-tailwindcss/</guid><description>Alba Silvente on VueDose explains what the Atomic Design methodology is about and how we can apply it to our Vue.js project.</description><pubDate>Tue, 16 Jun 2020 00:00:00 GMT</pubDate></item><item><title>A first look at CSS aspect-ratio</title><link>https://swjh.de/links/a-first-look-at-css-aspect-ratio/</link><guid isPermaLink="true">https://swjh.de/links/a-first-look-at-css-aspect-ratio/</guid><description>Chris Coyer hought he’d take a look at a brand new property that affects how a box is sized.</description><pubDate>Sat, 06 Jun 2020 00:00:00 GMT</pubDate></item><item><title>The expanding Gamut of Color on the Web</title><link>https://swjh.de/links/the-expanding-gamut-of-color-on-the-web/</link><guid isPermaLink="true">https://swjh.de/links/the-expanding-gamut-of-color-on-the-web/</guid><description>All you need to know about the new CSS colors formats: lab, lch and display-p3.</description><pubDate>Sat, 06 Jun 2020 00:00:00 GMT</pubDate></item><item><title>CSS masonry with flexbox, :nth-child(), and order</title><link>https://swjh.de/links/css-masonry-with-flexbox-nth-child-and-order/</link><guid isPermaLink="true">https://swjh.de/links/css-masonry-with-flexbox-nth-child-and-order/</guid><description>A CSS only masonry solution by Tobias Ahlin.</description><pubDate>Fri, 22 May 2020 00:00:00 GMT</pubDate></item><item><title>SVG Path Visualizer</title><link>https://swjh.de/links/svg-path-visualizer/</link><guid isPermaLink="true">https://swjh.de/links/svg-path-visualizer/</guid><description>This visualizer helps makeing sense of all the letters and numbers in an svg. Love it! M140 20C73 20 20 74 20 140c0 135 136 170 228 303 88-132 229-173 229-303 0-66-54-120-120-120-48 0-90 28-109 69-19-41-60-69-108-69z</description><pubDate>Tue, 19 May 2020 00:00:00 GMT</pubDate></item><item><title>ScrollOut.js - a tiny js library for scroll-based interactions</title><link>https://swjh.de/blog/scrollout-js/</link><guid isPermaLink="true">https://swjh.de/blog/scrollout-js/</guid><description>ScrollOut detects changes in scroll for reveal, parallax, and CSS Variable effects!</description><pubDate>Sun, 26 Apr 2020 00:00:00 GMT</pubDate></item><item><title>How to preserve Aspect Ratio of Images with Tailwind CSS</title><link>https://swjh.de/blog/preserve-aspect-ratio-of-images-with-tailwind-css/</link><guid isPermaLink="true">https://swjh.de/blog/preserve-aspect-ratio-of-images-with-tailwind-css/</guid><pubDate>Sat, 04 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Flexbox Magic: Responsive Sign-Up Form</title><link>https://swjh.de/blog/responsive-sign-up-form-flexbox-magic/</link><guid isPermaLink="true">https://swjh.de/blog/responsive-sign-up-form-flexbox-magic/</guid><description>A cool trick by Adam Argyle to create a responsive signup form with flexbox in very few lines of code.</description><pubDate>Sat, 04 Apr 2020 00:00:00 GMT</pubDate></item><item><title>What to use instead of Number Inputs</title><link>https://swjh.de/links/what-to-use-instead-of-number-inputs/</link><guid isPermaLink="true">https://swjh.de/links/what-to-use-instead-of-number-inputs/</guid><description>You might reach for &lt;input type=&apos;number&apos;&gt; when you’re, you know, trying to collect a number in a form. But it’s got all sorts of issues. For one, sometimes what you want kinda looks like a number, but isn’t one (like how a credit card number has spaces), because it’s really just a string of numbers. Even more importantly, there are a variety of screen reader problems. Solution: &lt;input type=&apos;text&apos; inputmode=&apos;numeric&apos; pattern=&apos;[0-9]*&apos;&gt;</description><pubDate>Sat, 04 Apr 2020 00:00:00 GMT</pubDate></item><item><title>Headless CMS options compared</title><link>https://swjh.de/links/headless-cms-options-compared/</link><guid isPermaLink="true">https://swjh.de/links/headless-cms-options-compared/</guid><description>A Comparison of Contentful, Storyblok, Sanity.io, Forestry, DatoCMS, Prismic, NetlifyCMS, Strati, Headless Wordpress and TinaCMS.</description><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate></item><item><title>How to Create a “Skip to Content” Link</title><link>https://swjh.de/links/create-a-skip-to-content-link/</link><guid isPermaLink="true">https://swjh.de/links/create-a-skip-to-content-link/</guid><description>Skip links are little internal navigation links that help users move around a page. It’s possible you’ve never actually seen one before because they’re often hidden from view and used as an accessibility enhancement that lets keyboard users and screen readers jump from the top of the page to the content without have to go through other elements on the page first.</description><pubDate>Tue, 24 Mar 2020 00:00:00 GMT</pubDate></item><item><title>Why you should not use target=&apos;_blank&apos;</title><link>https://swjh.de/links/why-you-should-not-use-target-_blank/</link><guid isPermaLink="true">https://swjh.de/links/why-you-should-not-use-target-_blank/</guid><description>TL;DR: Regardless of what accessibility conformance level you target, do not arbitrarily open links in a new window or tab. If you are required to do so anyway, inform users in text.</description><pubDate>Mon, 17 Feb 2020 00:00:00 GMT</pubDate></item><item><title>HTMHell</title><link>https://swjh.de/links/htmhell/</link><guid isPermaLink="true">https://swjh.de/links/htmhell/</guid><description>A collection of bad practices in HTML, copied from real websites. By Manuel Matuzovic</description><pubDate>Fri, 24 Jan 2020 00:00:00 GMT</pubDate></item><item><title>The CSS Cascade</title><link>https://swjh.de/links/the-css-cascade/</link><guid isPermaLink="true">https://swjh.de/links/the-css-cascade/</guid><description>The CSS Cascade is one of the most powerful parts of CSS. But it can also be very frustrating, if not well understood. Anyone who’s worked on a large enough website has complained &apos;Why won’t this CSS property work?!&apos; And we’ve all been tempted to throw an !important to strong-arm things into place. Amazing interactive Article by Amelia Wattenberger.</description><pubDate>Fri, 24 Jan 2020 00:00:00 GMT</pubDate></item><item><title>Front-End Performance Checklist 2020</title><link>https://swjh.de/links/front-end-performance-checklist-2020/</link><guid isPermaLink="true">https://swjh.de/links/front-end-performance-checklist-2020/</guid><description>Web performance is a tricky beast, isn’t it? How do we actually know where we stand in terms of performance, and what our performance bottlenecks exactly are? A checklist by smashingmagazine.</description><pubDate>Mon, 20 Jan 2020 00:00:00 GMT</pubDate></item><item><title>Why You Should Choose HTML5 &apos;article&apos; Over &apos;section&apos;</title><link>https://swjh.de/links/why-you-should-choose-html5-article-over-section/</link><guid isPermaLink="true">https://swjh.de/links/why-you-should-choose-html5-article-over-section/</guid><description>Browsers’ visual display of headings nested inside &lt;section&gt; elements makes it look as if they are assigning a logical hierarchy to those headings. However, this is purely visual and is not communicated to assistive technologies. TLDR: don&apos;t use &apos;section&apos; 🤯</description><pubDate>Fri, 17 Jan 2020 00:00:00 GMT</pubDate></item><item><title>Convert Video to .gif with Gifski</title><link>https://swjh.de/links/convert-video-to-gif-with-gifski/</link><guid isPermaLink="true">https://swjh.de/links/convert-video-to-gif-with-gifski/</guid><description>Convert videos to high-quality GIFs on your Mac</description><pubDate>Thu, 16 Jan 2020 00:00:00 GMT</pubDate></item><item><title>unDraw: Free Vector Illustrations</title><link>https://swjh.de/links/undraw-free-vector-illustrations/</link><guid isPermaLink="true">https://swjh.de/links/undraw-free-vector-illustrations/</guid><description>Great set of Open-source illustrations available as svg</description><pubDate>Thu, 16 Jan 2020 00:00:00 GMT</pubDate></item><item><title>Change the Playback Speed of any Online Video</title><link>https://swjh.de/blog/change-video-playback-speed/</link><guid isPermaLink="true">https://swjh.de/blog/change-video-playback-speed/</guid><description>For every HTML Video element, you can change the playback speed, with a simple console input.</description><pubDate>Tue, 07 Jan 2020 00:00:00 GMT</pubDate></item><item><title>Highlights from 36c3</title><link>https://swjh.de/blog/36c3-highlights/</link><guid isPermaLink="true">https://swjh.de/blog/36c3-highlights/</guid><description>Links to highlights from this year&apos;s Chaos Communication Congress including talks from David Kriesel and Moxie Marlinspike</description><pubDate>Fri, 03 Jan 2020 00:00:00 GMT</pubDate></item><item><title>CSS &apos;all:&apos; shorthand</title><link>https://swjh.de/blog/css-all-shorthand/</link><guid isPermaLink="true">https://swjh.de/blog/css-all-shorthand/</guid><description>The all shorthand CSS property resets all of an element&apos;s properties. It can set properties to their initial or inherited values, or to the values specified in another stylesheet origin.</description><pubDate>Sun, 22 Dec 2019 00:00:00 GMT</pubDate></item><item><title>Quoting in HTML - Quotations, Citations, and Blockquotes</title><link>https://swjh.de/links/quoting-in-html/</link><guid isPermaLink="true">https://swjh.de/links/quoting-in-html/</guid><description>There are three major HTML elements involved in quotations: &lt;blockquote&gt;, &lt;q&gt;, &lt;cite&gt;. Let’s take a look.</description><pubDate>Tue, 10 Dec 2019 00:00:00 GMT</pubDate></item><item><title>How to Section your HTML</title><link>https://swjh.de/links/how-to-section-html/</link><guid isPermaLink="true">https://swjh.de/links/how-to-section-html/</guid><description>The sectioning elements in HTML5 are &lt;nav&gt;, &lt;aside&gt;, &lt;article&gt;, and &lt;section&gt;. &lt;body&gt; is also kind of a sectioning element since all content lying inside of it is part of the default document section.</description><pubDate>Tue, 18 Jun 2019 00:00:00 GMT</pubDate></item><item><title>:focus-visible CSS pseudo-class</title><link>https://swjh.de/blog/focus-visible-css-pseudo-class/</link><guid isPermaLink="true">https://swjh.de/blog/focus-visible-css-pseudo-class/</guid><description>The :focus-visible pseudo-class applies while an element matches the :focus pseudo-class, and the UA determines via heuristics that the focus should be specially indicated on the element (typically via a “focus ring”).</description><pubDate>Sat, 25 May 2019 00:00:00 GMT</pubDate></item><item><title>How to style Browser Scrollbars</title><link>https://swjh.de/blog/how-to-style-browser-scrollbars/</link><guid isPermaLink="true">https://swjh.de/blog/how-to-style-browser-scrollbars/</guid><description>Scrollbars still look like 1995 on Windows, so here is an example how to style browser scrollbars (in use on this website).</description><pubDate>Mon, 20 May 2019 00:00:00 GMT</pubDate></item><item><title>CSS can do that?</title><link>https://swjh.de/links/css-can-do-that/</link><guid isPermaLink="true">https://swjh.de/links/css-can-do-that/</guid><description>A list of amazing things that CSS can do nowadays!</description><pubDate>Fri, 17 May 2019 00:00:00 GMT</pubDate></item><item><title>How to inherit scoped styles in Vue to child components</title><link>https://swjh.de/blog/how-to-inherit-scoped-styles-in-vue-to-child-components/</link><guid isPermaLink="true">https://swjh.de/blog/how-to-inherit-scoped-styles-in-vue-to-child-components/</guid><description>I just learned that elements in nested components are stylable from the parent while still having scoped css with the `/deep/` selector.</description><pubDate>Mon, 13 May 2019 00:00:00 GMT</pubDate></item><item><title>How to define canonical URL in Nuxt.js</title><link>https://swjh.de/blog/how-to-define-canonical-url-in-nuxt-js/</link><guid isPermaLink="true">https://swjh.de/blog/how-to-define-canonical-url-in-nuxt-js/</guid><description>How to set rel=canonical to primary domain in Nuxt.js (and let search engines know to ignore duplicate content on staging server):</description><pubDate>Thu, 09 May 2019 00:00:00 GMT</pubDate></item><item><title>Sara Soueidan on Building Accessible Interfaces at SmashingConf 2019</title><link>https://swjh.de/links/building-accessible-interfaces-sara-soueidan-smashing-conf-2019/</link><guid isPermaLink="true">https://swjh.de/links/building-accessible-interfaces-sara-soueidan-smashing-conf-2019/</guid><description>Building and refactoring common UI components with accessibility in mind.  From this sweet series of mini component-level case studies, you will learn how to think, and code, accessibly.</description><pubDate>Sat, 20 Apr 2019 00:00:00 GMT</pubDate></item><item><title>Build a URL shortener with Netlify</title><link>https://swjh.de/links/simple-url-shortener-with-netlify/</link><guid isPermaLink="true">https://swjh.de/links/simple-url-shortener-with-netlify/</guid><description>Kent C. Dodds shows how to use Netlify to use simple URL shortener.</description><pubDate>Fri, 07 Dec 2018 00:00:00 GMT</pubDate></item><item><title>Advanced CSS Shadow Generator</title><link>https://swjh.de/links/advanced-shadow-generator/</link><guid isPermaLink="true">https://swjh.de/links/advanced-shadow-generator/</guid></item><item><title>Alt-texts - The Ultimate Guide</title><link>https://swjh.de/links/alt-texts-ulitmate-guide/</link><guid isPermaLink="true">https://swjh.de/links/alt-texts-ulitmate-guide/</guid><description>This post contains everything you need to know about alt-texts! When to use them and how to perfectly craft them. By me, Daniel, a web developer with vision impairment who use a screen reader in my day-to-day life.</description></item><item><title>tiny-helpers.dev</title><link>https://swjh.de/links/tiny-helpers/</link><guid isPermaLink="true">https://swjh.de/links/tiny-helpers/</guid><description>A collection of free single-purpose online tools for web developers...</description></item></channel></rss>