Posts by Andy Bell
Redesigning Piccalilli: the first part of the design process
The start of a new article series which gives you a look behind the scenes at the Piccalilli redesign and Set Studio’s design process.
We want to help designers learn to code
We want to produce content that helps people working on real world projects, so we’ve created a survey to learn more from you.
Front-End solution: Eyebrow heading dots
Learn how anchor positioning is really useful for a solution other than for positioning popovers.
It’s about time I tried to explain what progressive enhancement actually is
Progressive enhancement hasn’t caught on nearly as much as it should. It’s likely related to folks not being able to envision it working in their real world contexts. This post attempts to alleviate that and reignite the conversation.
How to stop Figma using your work to train their “AI” models
A really quick video to show you where the right settings are and what settings to disable to protect your work.
The time for designers to learn to code is now
With design tools further commoditising and sanitising expected creative output, the time for designers to be able to stand out is very much here. I think for some, learning to code is a good route for that.
Front-End challenge: Eyebrow heading dots
We’re doing it differently in this edition. There’s already code and I’m challenging folks to refactor and improve my solution with modern CSS.
Mask image is pretty handy
Often overlooked, the mask-image property can be a simple way to inject some character into your web design work.
A quick and easy guide to Markdown
So many Markdown guides are either too complicated or really hard to read. I thought I’d try to fix that with a super simple, clear guide.
Let’s make a floating button sign up form pattern
I tackle an age-old design pattern and build it with nice, simple CSS.
How I’m using “AI”
An honest roundup of what I personally think of “AI” and how it genuinely has its uses in my day-to-day work.
How a handful of independent publishers are doing their thing
I really like paying good writers so I thought I’d recommend a handful of publications I’m paying for and look at how they do things.
I’m worried about the tabbing behaviour, rather than the syntax and name of CSS masonry
There’s a lot of chatter about CSS masonry at the moment. Should it be called “masonry” and should it be grid? Let’s worry about the basics first.
Full text RSS is back
Ever since we re-platformed Piccalilli to Astro, full text RSS no longer worked like it did with Eleventy. We’ve hacked together a fix and now it does!
Applying P3 colours on an existing project
The set.studio site is powered by design tokens, which for colours, are hex codes. I managed to automatically convert those to P3 colours with a custom PostCSS plugin.
Upcoming custom element support in React
React’s version 19 Beta is boasting full custom element support so I cover how that could impact projects on our radar and how this new support will make an impact.
CSS inheritance
Inheritance truly is a superpower and it’s what makes developing on the web a joy if you embrace it. In this quick post, I’m going to convert you into a super fan.
An evolution, not a revolution
We’ve refreshed the look and feel of both the Piccalilli site and the brand so wrote up a little about that and the future of the platform.
A primer on the cascade and specificity
Often feared by developers, the cascade and specificity is actually really simple if you utilise the right mental model when authoring CSS.
I want to elevate more people with Piccalilli Links
A big part of the Piccalilli Links thing is I want to elevate good writers. I need help discovering those writers though!
How we’re approaching theming with modern CSS
We’ve started a new project which requires heavy, creative theming, so I made a prototype to test some ideas out.
The box model and box sizing
To open up this CSS Fundamentals series, we’re looking at one of those most important aspects of CSS to understand: how the box model is affected by box sizing.
Front-End solution: progress indicator
All is revealed about how to build this Front-End Challenges Club challenge, with some great contributions to the community too.
Some little ways I’m using CSS :has() in the real world
I’ve created some low fidelity demos of :has() snippets that I’ve been using in real-world client projects.
The path to becoming a publisher
In light of Chris Coyier’s recent article about CSS-Tricks, I think it’s about time I shared some plans with you all.
Front-End challenge: progress indicator
Front-End Challenges Club is back! It’s been a long while since the last one and this challenge is a real head scratcher.
Event currentTarget to the rescue
A really quick tip to hopefully save you from throwing your computer out of the window due to JavaScript events.
A Global Documentation Platform
Inspired by the recent “A Global Design System” article, I talk about what worries me: the future of MDN and a possible alternative to it.
A CSS project boilerplate
For the many folks who ask how I write CSS since removing Sass, this is how I and the Set Studio team do it in 2024.
Interop 2024
After the success of previous years, it’s great to see Interop is back in 2024. In this post, I note down what I’m looking forward to.
Some information about my upcoming workshop and course
I’m doing a lot of content this year, but the stuff I’m most excited about is a brand new workshop and a brand new course. They follow a similar theme to each other: helping you to become a better CSS developer who writes more scalable, maintainable CSS.
Happy international box sizing awareness day
My all-time favourite CSS technique — courtesy of Paul Irish — celebrates another birthday.
It feels like React is getting a bit of a kicking recently
I talk about an apparent attitude shift in attitude towards React in the community and also make some recommendations about decision-making for your projects.
A highly configurable switch component using modern CSS techniques
Learn how build a highly configurable switch component using modern CSS, such as :has(), container queries, Logical Properties and Custom Properties.
Low-tech Eleventy Categories
Eleventy has built-in tagging and collections capabilities that I’m riffing on to show you how to build a super simple category system with RSS feeds for each one.
Piccalilli Links
I give a run-down about the new links setup on the Piccalilli site and how it all works.
Reality Check #3: Building out a layered hero grid layout from Dribbble
In this edition of Reality Check, I tackle an interesting grid layout that also features some pretty unique background image treatment.
Piccalilli will return in 2024
LH units are cool
Reality Check #2: Building out a fancy 404 page from Layers
Reality Check #1: Building out a furniture site from Dribbble
A (more) Modern CSS Reset
I wrote “A Modern CSS Reset” almost 4 years ago and, yeh, it’s not aged overly well. I spotted it being linked up again a few days ago and thought it’s probably a good idea to publish an updated version.
How a minimum viable experience produces a resilient, inclusive end-product
My favourite 3 lines of CSS
Line heights in CSS work better with ratios
A CLS punishment for progressive enhancement?
I’ve stumbled across an issue with Lighthouse where I get a bad performance score for a progressive enhanced burger menu pattern.
Learn Eleventy From Scratch is now open source
Define delay for each property in the transition shorthand
You can set a different delay for each transitioned property, using the transition shorthand, which creates some pretty cool state changes.
Prevent squishy elements with flex none
You can prevent that annoying squished look that elements like icons get when space runs out in a flex context with flex: none.
Build a fancy hover animation
Learn how to use the power of CSS to take any collection of images and make them blend well together with a fancy interactive state.
Container Queries are actually coming
After years of asking and memes, we’re finally getting container queries and they will transform UI design, just like media queries did.
Use transparent borders and outlines to assist with high contrast mode
It’s tempting to use a sharp box shadow for focus styles to both remove the default focus ring and to get around sharp outline corners. With this method, you can create problems for Windows High Contrast users, so this quick tip will help you get the best of both worlds.
Disable client-side React with Next JS
Frameworks like Next JS output a lot of heavy-duty client side JavaScript, so this quick tip stops that to have a huge positive impact on performance.
Fluid typography with CSS clamp
Learn to create a simple, accessibility friendly and configurable fluid type system that uses modern CSS sizing functions.
Add inline SVG directly in your CSS
CSS Frameworks, hype and dogmatism
Some notes on the dogmatism and gatekeeping themes of Tech Twitter and how they can generate often incorrect and naive statements—specifically about frameworks and methodologies.
Add scroll margin to all elements which can be targeted
We can add an extra bit of space to targeted elements, thanks to modern CSS!
Control changing numbers with font variant numeric
Get the benefits of monospaced fonts with your favourite (supported) non-monospaced fonts.
Convert a 2D array into a flat, 1D array of unique items
Convert a messy multidimensional array into a nice single dimension array of unique items.
Use CSS Clamp to create a more flexible wrapper utility
A handy way to use modern CSS functions to give yourself fine-grained, yet flexible, design control.
Build a fully-responsive, progressively enhanced burger menu
In this premium tutorial, we’re going to build a burger menu from the ground up, using progressive enhancement, ResizeObserver, Proxy state and of course, super-solid HTML and CSS that pull from the CUBE CSS principles.
Load all focusable elements with JavaScript
A handy helper function that will load all user-focusable elements inside a parent element for you.
Dynamic footer copyright date in Eleventy
That time of the year is coming up, so this trick will keep your website footer up to date on your Eleventy site.
What are design tokens?
Design tokens are just spicy variables, right? Wrong! They are an extremely versatile way of sharing design properties and in this tutorial, you’ll learn how they work.
Flow CSS Utility
Solution: Progress Stepper
Front-End Challenges Club - Challenge #008
Challenge: Progress Stepper
Front-End Challenges Club - Challenge #008
Build a responsive media browser with CSS
Using the power of modern CSS layout, we create a flexible media browser and video player layout that maintains its aspect ratio at all viewports.
Create a JSON feed with 11ty
Picture element as a progressive enhancement
Use grayscale filter to see where you are relying too much on colour
Create a line break while maintaining inline status
Visually hide an element with CSS
Tips and notes about freelancing
A guide on going freelance with some helpful advice to hopefully help you to make the plunge.
Build a dashboard with CUBE CSS
An in-depth guide to going from HTML all the way to a full styled banking dashboard, using the CUBE CSS methodology
Squishy button active state
Aligning description lists with CSS Grid
Contains CSS attribute selector
Easy horizontal and vertical centering in CSS
A safer way to vertically fill the viewport
Make a button element look like a link
Limit line lengths to increase readability
Responsive borders with CSS outline
Quick and easy local server
Use a set to remove array duplicates
How to use the lesson project files to rescue your project
Sometimes you get a bit stuck in a course, so this quick tip teaches you how to get back on track
Parity Purchasing Power
Helping to make the pricing of premium content on this site as fair as possible for the global web community
Learn Eleventy From Scratch launch day
Today is a massive day for Piccalilli, so here’s a reflective post about the production of the debut course.
CUBE CSS
A CSS methodology oriented towards simplicity and consistency with a heavy dosage of pragmatism.
Solution: Heading Keyline
Front-End Challenges Club - Challenge #007
Challenge: Heading Keyline
Front-End Challenges Club - Challenge #007
CSS Logical Properties
Create spacing that works regardless of the direction of your content or the environment of your users.
Build a light and global state system
Using Proxies and subscriber functions, we can create an observable, reactive state system with a tiny footprint.
Create a responsive grid layout
Even with no media-queries, we can create a flexible and powerful responsive layout.
Creating a full bleed CSS utility
Break out of the mould of your fixed-width container to create visual interest.
New shoes
Piccalilli has been on a holiday for over two months, but has had a complete re-design and re-platforming.
Solution: Auto-scrolling, responsive grid
Front-End Challenges Club - Solution #006
Challenge: Auto-scrolling, responsive grid
Front-End Challenges Club - Challenge #006
Solution: Tabs
Front-End Challenges Club - Solution #005
Challenge: Tabs
Front-End Challenges Club - Challenge #005
Solution: Progress Button
Front-End Challenges Club - Solution #004
Challenge: Progress Button
Front-End Challenges Club - Challenge #004
Solution: Duotone card
Front-End Challenges Club - Solution #003
Challenge: Duotone Card
Front-End Challenges Club - Challenge #003
Solution: Toggle switch
Front-End Challenges Club - Solution #002
Challenge: Toggle switch
Front-End Challenges Club - Challenge #002
Solution: Email sign-up form
Front-End Challenges Club - Solution #001
Challenge: Email sign-up form
Front-End Challenges Club - Challenge #001
Create a semantic breakout button to make an entire element clickable
Create a user controlled dark or light mode
Automatic dark and light themes, based on system user-preferences, are handy but in this tutorial, we take that one step further and give our users control.
Create a split, faux-container layout with CSS Grid and Flexbox
Two simple methods to vertically and horizontally center content with CSS
Relative sizing with EM units
Responsive units, like EM units, are super powerful and in this tutorial, you’ll learn how to use that power to give your front-ends resilience
Creating an aspect ratio CSS utility
Get a CSS Custom Property value with JavaScript
A progressive disclosure component
Bypass service worker on localhost