You are browsing the new, beta version of my website.
Some things may not work properly.
If you spot any problems, please file an issue!
- JS private class fields considered harmful
- What is the best way to mark up an exclusive button group?
- Custom properties with defaults: 3+1 strategies
- Inherit ancestor font-size, for fun and profit
- Dark mode in 5 minutes, with inverted lightness variables
- Mass function overloading: why and how?
- The case for Weak Dependencies in JS
- Developer priorities throughout their career
- The Cicada Principle, revisited with CSS variables
- Refactoring optional chaining into a large codebase: lessons learned
- LCH colors in CSS: what, why, and how?
- Issue closing stats for any repo
- ReferenceError: x is not defined?
- Refresh CSS Bookmarklet v2
- HTML APIs: What they are and how to design a good one
- One year of pastries
- In defense of reinventing wheels
- A List Apart article: Every time you call a proprietary feature "CSS3", a kitten dies
- Optimizing long lists of yes/no values with JavaScript
- Help the community: report browser bugs
- Tag editing UIs
- The curious case of border-radius:50%
- Organizing a university course on modern Web development
- On CSS counters plus a CSS3 Reversi UI
- Exploring browser-supported Unicode characters and a tweet shortening experiment
- Exploring CSS3 text-shadow
- On password masking and usability
- Tip: Multi-step form handling
- Creating the perfect slider
- Better usability in 5 minutes
- On native, single-input, multiple file uploads
- "Appearances can be deceiving Mr. Anderson" - a.k.a. short code is not always fast code
- 20 things you should know when not using a JS library
- Bulletproof, cross-browser RGBA backgrounds, today
- CSS3 border-radius, today