Mert Özen Further With Every Line

Blog

Mert Özen's blog posts on software development, backend, frontend, and DevOps.

Series
310 posts found
Sass Basics: Variables, Nesting, the Parent Selector (&), Interpolation and Placeholders
Frontend PART 02

Sass Basics: Variables, Nesting, the Parent Selector (&), Interpolation and Placeholders

A Sass variable is a build-time value that disappears after compilation, while a custom property lives at runtime, so when combining them you must pass the value through #{}, or the browser receives the text "$brand". We rewrite Bookstore's card with & and BEM, measure in two engines how Sass nesting produces different specificity from native nesting, and show how deep nesting bloats the output.

14 Nov 2026 11 min 13
Is Sass Still Needed in 2026? Comparison with Native CSS and Setting Up Dart Sass
Frontend PART 01

Is Sass Still Needed in 2026? Comparison with Native CSS and Setting Up Dart Sass

Yes, but not everywhere it used to be: variables, nesting and color/math are native CSS now, while mixins, loop-generated rules, maps, the module system and compile-time errors are still Sass-only. We measure why raw SCSS leaves not a single rule in the browser, compare sass with sass-embedded, and add Sass to Angular, Vite and ASP.NET Core.

14 Nov 2026 12 min 12
There Is No "CSS4": CSS Snapshots, Baseline, Interop and What Arrived 2023–2026
Frontend PART 16

There Is No "CSS4": CSS Snapshots, Baseline, Interop and What Arrived 2023–2026

CSS has no version number: modules raise their own levels independently, and the W3C's CSS Snapshot 2025 states plainly that there is no CSS Level 4. Whether to use a feature is decided with Baseline (newly and widely available), Interop and @supports; the post builds the 2023–2026 chronology from web-features and compares the browser targets of Angular, Vite and Tailwind on Bookstore.

14 Nov 2026 14 min 13
Anchor Positioning: Tooltips, Dropdowns and Popovers Without JavaScript
Frontend PART 15

Anchor Positioning: Tooltips, Dropdowns and Popovers Without JavaScript

Anchor positioning places an element relative to another with CSS; a popover opened by a button takes that button as its anchor, and position-area with flip-block gives a menu and a preview without JavaScript. Its core became Baseline with Firefox 147 in January 2026; web-features shows 'limited' today because the position-visibility values were renamed.

14 Nov 2026 15 min 17
Scroll-Driven Animations and View Transitions
Frontend PART 14

Scroll-Driven Animations and View Transitions

animation-timeline with scroll() and view() takes an animation's progress from the scroll position instead of time and has been Baseline since October 2026; view transitions animate a DOM change between two snapshots. The post adds a reading progress bar, cards that appear as they scroll in, a sorting animation, withViewTransitions() in Angular and cross-document transitions, which Firefox lacks, to Bookstore.

14 Nov 2026 16 min 22
Transitions and Animations: @keyframes, Easing, @starting-style and prefers-reduced-motion
Frontend PART 13

Transitions and Animations: @keyframes, Easing, @starting-style and prefers-reduced-motion

A dialog opening from display: none has no previous style, so @starting-style must give the transition a starting value, and closing needs allow-discrete on display and overlay. The post measures the difference between transitions and animations, easing including linear(), why transform and opacity are cheap, and reducing motion with prefers-reduced-motion on Bookstore's cart dialog.

14 Nov 2026 15 min 11
Native CSS Nesting and @scope: Component Styles Without a Preprocessor
Frontend PART 12

Native CSS Nesting and @scope: Component Styles Without a Preprocessor

Native CSS nesting makes writing shorter but isolates nothing; @scope makes a rule apply from a scope root down to a limit and keeps user content out with a donut scope. We rewrite the Bookstore card with nesting and prove with a computed-style hash that nothing changed, and measure how & differs from Sass, the specificity coming from :is(), proximity, and a comparison with Angular, ASP.NET Core CSS isolation and Shadow DOM.

14 Nov 2026 15 min 12
Modern Color and CSS Math: oklch(), color-mix(), Relative Color, contrast-color() and Math Functions
Frontend PART 11

Modern Color and CSS Math: oklch(), color-mix(), Relative Color, contrast-color() and Math Functions

oklch() measures lightness the way the human eye perceives it, so a yellow and a blue with the same L look equally bright, while in HSL the contrast of white text ranges from 1.07 to 8.59. We derive shades from Bookstore's category colour with relative colour, color-mix() and alpha(), and measure the limit of contrast-color(), round/mod/rem, progress() and typed arithmetic, and the not-yet-Baseline if(), @function and random().

14 Nov 2026 13 min 14
Custom Properties and Theming: var(), @property and Dark Mode with light-dark()
Frontend PART 10

Custom Properties and Theming: var(), @property and Dark Mode with light-dark()

Custom properties live at run time inside the cascade and inheritance; for a dark theme it is enough to define the colour tokens with light-dark() and switch color-scheme. On Bookstore we measure the var() fallback, the invalid at computed-value time trap, typed and animatable variables with @property, an inline script that remembers the user's choice in localStorage without a flash of the wrong theme, and a category colour coming from the CMS.

14 Nov 2026 12 min 19
Container Queries: Size Queries, Style Queries and Component-Based Responsive Design
Frontend PART 09

Container Queries: Size Queries, Style Queries and Component-Based Responsive Design

A container query lets a component change its layout based on the width of the box it is placed in rather than the viewport; but container-type turns subgrid off, so the two cannot be used on the same element. We show the Bookstore card horizontal in a wide band and vertical in a narrow column, and measure cq units, the name-only and style queries that became Baseline in May 2026, and making an Angular host a container, in Chromium and WebKit.

14 Nov 2026 12 min 10
Responsive Design: Mobile-First, Media Query Range Syntax, Fluid Typography with clamp() and User Preferences
Frontend PART 08

Responsive Design: Mobile-First, Media Query Range Syntax, Fluid Typography with clamp() and User Preferences

A responsive page is written mobile-first, its breakpoints are chosen from the content in rem, and font sizes go inside clamp() as the sum of a rem and a vw; a heading that uses only vw does not grow at all under zoom. On Bookstore we measure, in Chromium and WebKit, the range syntax, why rem in a media query ignores the page's root font size, zoom, prefers-reduced-motion, prefers-contrast, prefers-color-scheme and hover/pointer.

14 Nov 2026 11 min 10
CSS Grid 2: Subgrid, Alignment and the "Grid or Flexbox?" Decision
Frontend PART 07

CSS Grid 2: Subgrid, Alignment and the "Grid or Flexbox?" Decision

Subgrid lets a card borrow its rows from the list instead of working them out itself, so the title, author and price rows of cards with titles of different lengths line up. We move the Bookstore catalog to subgrid, measure the justify/align and place-* properties, choose between Grid and Flexbox with the content-out versus layout-in rule, and look at where grid-lanes stands for masonry in November 2026.

14 Nov 2026 13 min 12
Blog Map