This year the Web Standards podcast for the Russian-speaking community celebrated 10 years. You might’ve spotted the podcast in the State of JavaScript 2025 results and wondered what it’s doing there. For almost as long, we were publishing daily news on the web platform: browser releases, spec changes, useful articles, tools. Thousands of links over the years! I always wanted to do something like…
It’s getting dark early in Berlin in the winter. It’s not even close to evening, but my OS and all apps have already switched to dark mode. Well, not all of them, unfortunately. And that’s the thing: dark mode has become a quality-of-life feature for many users, and I often try to avoid using apps or websites that haven’t implemented it, especially in the evening. They literally hurt my eyes! When…
HTML semantics is a nice idea, but does it really make a difference? There’s a huge gap between HTML spec’s good intentions and what browsers and screen readers are willing to implement. Writing semantic markup only because the good spec is a spec, and it is good, and it’s a spec is not the worst approach you can take, but it might lead you to HTMHell. Simple days Like most people involved in…
The other day Thomas Steiner kindly decided to share my “ Jumping HTML tags ” article and got frustrated because after selecting and copying the title of the article he got this: JUMPING HTML TAGS. ANOTHER REASON TO VALIDATE YOUR MARKUP It wasn’t some rich text editor, just regular text input. I suppose Thomas didn’t want to shout at his readers and had to normalize the case before sharing it .…
If you’re building for the Web, you’re most likely writing HTML. It could be JSX, Markdown, or even Dart in your code editor, but eventually, it gets compiled to some sort of markup. And the further away from the actual tags you get, the less idea you have of what gets there. For most developers, it’s just an artifact, like a binary file. And this is fine, I guess 🤔 We use abstraction layers for…
I know, it’s a strong statement. You might even call it clickbait. But hear me out! Remember this old trick that allowed us to load only critical CSS and defer the rest? Yes, the one that used media="print" to change the value to all in the onload event. < link rel = "stylesheet" href = "critical.css" > < link rel = "stylesheet" href = "deferred.css" media = "print" onload = " this .…
I often challenge myself to see if something is possible to implement in a sensible way or to play around with new Web platform features. I end up with a demo but rarely share it with anyone. Now that I have a blog, nothing stops me from doing it publicly! It sounds a bit creepy, but there you go. Recently Sacha Greif challenged his followers with a tweet : CSS challenge: I’m curious, can you do…
When I started to build my first website on Eleventy around 2019, I had to decide how to deal with the HTML, CSS, and JavaScript post-processing. By that time, I had gotten used to the convenience of the modular approach and automation. So it wasn’t an option to just copy files from src to dist . I needed them stitched, modified, and minified. By then, I got over the preprocessors like Sass, so I…
There’s a component structure behind every website or app these days, hundreds of small files. Though when it comes to delivering resources, we often serve just a single file for every resource type: styles, scripts, and even sprites for images . Everything gets squashed during the build process, including resources specific to certain resolutions or media conditions. And resources aren’t equal!…
SVG sprites have been around for a while and are usually considered a default option for icons and some other vector graphics. I mean the ones that require inline SVG placeholders and could be styled via CSS. And while they’re giving us some unique features, they also have some drawbacks and aren’t the only available option. Let’s try to remember why we needed SVG sprites in the first place, then…
Imagine you need to create a two-column layout. Yes, the simplest one: a column on the left, a column on the right, and some gap in-between. There’s an obvious modern solution for that: .columns { display : grid ; grid-template-columns : 1 fr 1 fr ; gap : 20 px ; } Done! Sure, but what if we need to support some older browsers? Flexbox then. All right! And what about text flowing from one column…
On February 5th, 2008 I published a post called “ A second breath ” on my old blog. Unfortunately, it’s in Russian, so you might not have a chance to enjoy it. This post’s first comment suggested using jQuery to make rounded corners. And it wasn’t a joke 😳 Anyway, as you might’ve guessed by the title, it wasn’t my first attempt at blogging. It lasted for a while until I stopped posting in 2014.…