All blogs / Frontend / CSS / browsers
Manuel Matuzović
On my blog I focus on HTML, CSS, and web accessibility!
- Posts
- 244 from 12 Oct 2016 to 17 Aug 2026
- Posting
- monthly (21 in the last year)
- Kind
- personal blog
- Feed
- https://www.matuzo.at/feed.xml
2026 19
- My HTML boilerplate in 2026
- Progressively enhancing Grid Lanes
- Your Grid Lanes will likely fail WCAG 2.4.3
- Setting the width of selects to the width of the selected option
- Zen, Zed, and Zits
- Context-aware headings in HTML
- Don't put aria-label on generic elements like divs
- box-shadow is no alternative to outline
- The geolocation element is odd
- Your skip link targets may not need tabindex=-1 to work properly
- role=presentation is no alternative for aria-hidden=true
- Put aria-hidden=true on decorative SVGs
- aria-haspopup might not do what you think it does
- A new meta tag for respecting text scaling on mobile
- Introduction to the new HTML element <geolocation>
- Lowering the specificity of multiple rules at once
- My favourite front-end and web development conferences
- Better defaults for popovers
- Workshop: Deep Dive on Accessibility Testing
2025 16
- I’m speaking at Web Day Out 2026
- Dealbreaker bugs in native popovers
- What's an interactive element?
- A workaround for using custom properties in media queries
- Never lose a z-index battle again
- Breaking up with my X
- Close requests, close watchers, and the dialog element
- How to make LibreWolf your default browser on macOS
- Maybe don't use custom properties in shorthand properties
- #unplugtrump
- Is the button focusable?
- NVDA bug: anchor links broken if they point to a parent element
- Building a progress-indicating scroll-to-top button in HTML and CSS
- Debugging a Craft CMS installation on macOS
- A year in review: 2024
- A year in review: 2023
2024 11
- Website accessibility reaction videos (in German)
- TYPO3Camp Vienna: Talk and Workshop
- Workshop: Deep Dive on Accessibility Testing
- Day 109: the animation-composition property
- Day 110: animating properties
- Day 108: the of S syntax in :nth-child()
- Day 107: the light-dark() color function
- beyond tellerrand: One of my favourite web development and design conferences
- My CSS wish list 2024
- Workshop: Deep Dive on Accessibility Testing
- Not all automated testing tools support Shadow DOM in web components
2023 62
- Day 106: the scripting media feature
- Day 105: defining multiple syntax components
- Removing list styles without affecting semantics.
- Totally remdom, or How browsers zoom text
- Day 104: animation with registered custom properties
- Day 103: the prefers-reduced-transparency media feature
- Skip links on ikea.com
- Mark all as read
- Web Components Accessibility FAQ
- New workshop: Advanced Modern CSS Masterclass
- Day 102: selecting the scoping root
- Pros and cons of using Shadow DOM and style encapsulation
- aria-haspopup and screen readers
- Visually hidden links with 0 dimensions
- O dialog focus, where art thou?
- the article element and screen readers
- the details element and in-page search
- form and search landmarks
- Cascade Layers are useless*
- Day 101: scoping
- Syntax podcast episode 623: “Nothing in CSS” errata
- CSS! CSS! CSS!
- Deleted files in a freshly cloned git repo
- Workshop: Deep Dive on Accessibility Testing
- details/summary inconsistencies
- Invalid at computed-value time
- It's very likely that…
- 50.1% empty links
- My CSS wish list
- Why I'm not the biggest fan of Single Page Applications
- Day 100: it's over, or is it!?
- Day 99: native nesting
- Day 98: oklab() and oklch()
- Day 97: animating grids
- Day 96: the margin-trim property
- Day 95: the color-mix() function
- Day 94: the accent-color property
- Day 93: the lch() color function
- Day 92: relative color syntax
- Day 91: a previous sibling selector with :has()
- Day 90: scoped styles in container queries
- Day 89: higher-order custom properties
- Day 88: CSS Motion Path
- Day 87: mask properties
- Day 86: the initial-letter property
- Day 85: typed custom properties in container style queries
- Day 84: the @property at-rule
- Day 83: computed values in container style queries
- Day 82: value processing
- Day 81: the order of individual transform properties
- Day 80: container style queries
- CSS color functions and custom properties
- Day 79: font-tech() and font-format()
- Day 78: container query units
- Day 77: block-size, inline-size, vi, and vb
- Day 76: overwriting colors in font palettes
- Day 75: font palettes
- Day 74: using !important in cascade layers
- Day 73: size container features
- A year in review: 2022
- Day 72: the masonry-auto-flow property
- Day 71: the masonry keyword
2022 87
- Day 70: the defined pseudo-class
- Day 69: width in container queries
- Day 68: cascade layers and browser support
- Day 67: counting children
- Day 66: individual transform properties
- Day 65: using the em unit in container queries
- Day 64: the revert-layer keyword
- Day 63: explicit defaulting with inherit, initial, unset, and revert
- Day 62: the container shorthand
- Day 61: color-scheme
- Day 60: the ::part() pseudo-element
- Day 59: naming containers
- Restart
- Day 58: ordering nested layers
- Day 57: media queries: range syntax
- Day 56: container queries
- Day 55: anonymous layers
- Day 54: testing for the support of a selector
- Day 53: disabling pull-to-refresh
- Day 52: declaring multiple layer lists
- Day 51: aspect-ratio and replaced elements
- Day 50: :has(:not()) vs. :not(:has())
- Day 49: layering entire style sheets
- Day 48: inset 0
- Day 47: the overscroll-behavior property
- Day 46: ordering layers
- Day 45: the specificity of ::slotted() content
- Day 44: logical floating and clearing
- Day 43: grouping layers
- Day 42: aspect-ratio
- Day 41: custom properties and url()s
- Day 40: unlayered styles
- Day 39: comma-separated functional color notations
- Day 38: vh, svh, lvh, and dvh
- Day 37: cascade layers
- Day 36: :has() and pseudo-elements
- Day 35: forgiving selectors
- Day 34: :is() or :where()
- Day 33: Mathematical expressions in min(), max(), clamp()
- Workshop: Deep Dive on Accessibility Testing
- Day 32: the clamp() function
- Day 31: logical border properties
- Day 30: the hwb() color function
- Day 29: !important custom properties
- Day 28: custom properties and web components
- Your account is permanently suspended
- Day 27: the font-variation-settings property
- Day 26: using combinators in :has()
- Day 25: scrollbar gutters in body and html
- Day 24: the backdrop-filter property
- Day 23: the lab() color function
- I broke the rules.
- Day 22: the ::backdrop pseudo-element
- Day 21: conic gradients
- Day 20: the scrollbar-gutter property
- Day 19: the placeholder-shown pseudo-class
- Day 18: inheritable styles and web components
- Day 17: the :picture-in-picture pseudo-class
- Day 16: the specificity of :has()
- Day 15: the :modal pseudo-class
- Day 14: the difference between :is() and :where()
- Day 13: the :where() and :is() pseudo-classes
- Day 12: max() trickery
- Day 11: space-separated functional color notations
- Day 10: global styles and web components
- Day 9: the inset shorthand property
- Day 8: nesting :has()
- Day 7: subgrids
- Day 6: the :has() pseudo-class
- Day 5: the max() function
- Day 4: the min() function
- Day 3: logical property shorthands
- Day 2: logical properties
- Day 1: custom properties and fallbacks
- 100 Days Of More Or Less Modern CSS
- Buttons and the Baader–Meinhof phenomenon
- Parents counting children in CSS
- outline is your friend
- Analyzing pages in a particular state with Lighthouse
- Divs are bad!
- Please, stop disabling zoom
- Bonn Meetup 7: Introduction to web accessibility and deceitful Lighthouse scores
- Web Security Basics: XSS
- Cascade Layers: First Contact
- CSS Specificity Demo
- Here’s what I didn’t know about :where()
- A year in review: 2021
2021 8
2020 21
- Slow Movement
- The lang attribute: browsers telling lies, telling sweet little lies
- Writing even more CSS with Accessibility in Mind, Part 2: Respecting user preferences
- Writing even more CSS with Accessibility in Mind, Part 1: Progressive Enhancement
- Accessible to some
- Reverse ordered lists
- Here’s what I didn’t know about “content”
- The beauty of progressive enhancement
- Here’s what I didn’t know about “color”
- Blogging is one of the best ways of learning
- How many browsers do you know?
- Why 543 KB keep me up at night
- One of my favourite accessibility testing tools: The Tab Key.
- Eines meiner Lieblingswerkzeuge für Barrierefreiheit-Checks: Die Tabulator-Taste.
- Reading recommendations: Animation on the web and vestibular disorders
- Here’s what I didn’t know about list-style-type
- Here’s what I didn’t know about…
- CSS pro tip for mac users: always show scroll bars in macOS.
- matuzo.at from scratch #1 - Designing and finding inspiration
- Bad accessibility equals bad quality
- matuzo.at from scratch #0 - introduction
2019 9
- Beyond automatic accessibility testing: 6 things I check on every website I build
- Please write and talk more about CSS
- Don't be afraid to share
- Building the most inaccessible site possible with a perfect Lighthouse score
- The Dark Side of the Grid (Part 2)
- 12 Tips for More Accessible React Apps (Slides, React Finland 2019)
- Improving the keyboard accessibility of Embedded CodePens
- The Dark Side of the Grid (Part 1)
- Hello World!