Kindnesses and Criticisms

I got the nicest note from Ganesh Dahal. He’s a long-time contributor to CSS-Tricks and we’ve worked on a bunch of articles together over the past couple of years. There’s nothing magic in there — just kind words — but it hit me at just the right time. What you have to know is th … | Continue reading


@geoffgraham.me | 2 years ago

How to remove the SVGs WordPress injects for duotone support

WordPress has a duotone feature for styling elements — like images — with an SVG filter that overlays and colorizes the thing. It’s a nice feature! But I can honestly do without it on my own little website. Plus, it does this thing where it injects individual <svg> elements … | Continue reading


@geoffgraham.me | 2 years ago

Front-end development is like…

…so many other industries. Yet, I find that working in front-end development still places a heavy emphasis on one person — or very few people — doing the job. Let’s assume for a moment that you’re tasked with building a website. What kind of website? A big one. Pretty complex, to … | Continue reading


@geoffgraham.me | 2 years ago

Gotta regenerate Jetpack Boost’s Critical CSS whenever updating WordPress theme styles

Jetpack Boost is a performance module in the all-in-one Jetpack plugin for WordPress. I use it because it makes generating Critical CSS a trivial task which should help, erm, boost site performance. (Perhaps I shouldn’t be using Critical CSS at all, but that’s another story for a … | Continue reading


@geoffgraham.me | 2 years ago

Buying Used Toilets

You wouldn’t buy one off Craigslist, would you? But you’re essentially doing it when you buy an existing home, right? Context is king. | Continue reading


@geoffgraham.me | 2 years ago

Some rules for image captions and alt text

Images are often wrapped in a figure. Figures often contain a figcaption to “represent a caption or legend describing the rest of the contents of its parentelement.” And best practices advise us to use the alt attribute on an img to “provides fallback (alternate) text to display … | Continue reading


@geoffgraham.me | 2 years ago

Flexible Work

I never thought I’d return to a W2 job unless I had to. But here I am, by choice, and it’s pretty awesome. That’s because work has never been as flexible as it is right now. I remember a buddy of mine getting an engineering job with Lockheed Martin more than 20 years ago and […] | Continue reading


@geoffgraham.me | 2 years ago

`list-style: none` removes a list from Safari’s accessibility tree

In other words, Safari does not consider this a list anymore: Quick fix in HTML: | Continue reading


@geoffgraham.me | 2 years ago

Mini Vacations

If you’ve ever worked with me, you know I am the absolute worst when it comes to taking breaks. I tend to start early and power through the rest of the day. I’d say more times than not I look up from my computer and realize the entire day passed me by. And it’s been […] | Continue reading


@geoffgraham.me | 2 years ago

Ruminations

Do you talk to yourself? Or have silent conversations in your head? Or make up hypotheticals about things that may never happen, people you may never meet, and conversations you may never have? I do all of those — all the time. That’s the act of ruminating. We process our thought … | Continue reading


@geoffgraham.me | 2 years ago

Son Volt (but Mostly Jack Broadbent)

I saw Son Volt perform at The Aggie Theater here in Fort Collins. My buddy, Scott, joined me. We’re not really “photo” people, so there’s no cute selfie of us hanging out outside or anything. But I did manage to take a shot of the show poster. The show was my first since moving i … | Continue reading


@geoffgraham.me | 2 years ago

Slowing Down

I recently moved out of Southern CA, an area many folks associate with a “fast” lifestyle. There are all kinds of reasons for this: You gotta move fast to beat rush hour traffic. You gotta move fast to earn all the money it costs to enjoy the cost of living. You gotta move extra … | Continue reading


@geoffgraham.me | 2 years ago

Aging

If there’s one existential fear I have in my career, it’s my age. And maybe “fear” is a strong word here, but it’s something my inner voice chatters about every so often. The first line of code I ever wrote might have been 1999 as I was graduating high school. It was probably som … | Continue reading


@geoffgraham.me | 2 years ago

Look it up!

That’s something I say probably ten times a week. Sure, five of those times are directed at my kids but the rest are usually students in my class on my front-end development. You see, The Web is huge. So huge, and yet so tiny. I think because I lead the class, the expectation is … | Continue reading


@geoffgraham.me | 2 years ago

I’m just going to say it

I hate the path our national discourse (if you can call it that) over abortion has taken. Not how it started. Not the current conclusion (if you can call it that). Not that one side ”won” or another side ”lost.” What I hate is how we (the people) have engaged in it. The fingerpoi … | Continue reading


@geoffgraham.me | 2 years ago

Fare thee well, Long Beach

I’m walking out the door and heading for a jet plane to our new home in Fort Collins, Colorado. It’s hard to articulate how important Long Beach is to me. At 17 years, I’ve lived as long here as I did my childhood home, and did as much — if not more — growing here […] | Continue reading


@geoffgraham.me | 2 years ago

The WordPress “Read More” block is editable

I never realized it’s possible to click the dang label and change “Read More” to whatever else. Might have been obvious to others but there’s neither really any indication the label is interactive, nor is there a way to change the label in the block settings panel. 🤷‍♂️ | Continue reading


@geoffgraham.me | 2 years ago

The CSS content Property Accepts Line Breaks

It has forever, I suppose, I just never came across the need to in my day-to-day work. | Continue reading


@geoffgraham.me | 2 years ago

Version 3

I pushed the third major design iteration of my site yesterday, and it’s definitely a new look compared to the second version, though still in the same vein as far as simplicity. And even though there are no leftovers from the first iteration, I’d say version 3 is somewhat spirit … | Continue reading


@geoffgraham.me | 2 years ago

I’m Joining the DigitalOcean Team!

It’s been a little over three weeks since the bomb was dropped that CSS-Tricks was acquired by DigitalOcean. The response has been awesome and, to be quite honest, totally unexpected. I’ve known for a long time just how many people visit the site because, hey, analytics. But the … | Continue reading


@geoffgraham.me | 2 years ago

#100CoolWebMoments

Hey, so this is cool. Chrome 100 shipped yesterday and, with it, a landing page celebrating a curated collection of 100 cool moments between the time Chrome was introduced to the current release. The list of moments spurred a flood of personal memories throughout my career. The l … | Continue reading


@geoffgraham.me | 2 years ago

Thank you, Chris.

Did you know that CodePen used to have a job board? I do, because that’s how I applied to be a technical writer at CSS-Tricks. At the end of 2014, Chris Coyier took an ad out of his own board seeking writers. I wish I had a screenshot of that ad. I also wish I […] The post Thank … | Continue reading


@geoffgraham.me | 2 years ago

Google Fonts can update at any time

I guess that’s obvious. The styles of a site change when a CSS file is updated. An image is replaced when href is changed to point to one file instead of another. So, of course, a font is going to change if, say, the font file is updated. It’s just something that hasn’t crossed, … | Continue reading


@geoffgraham.me | 2 years ago

Adding Custom Fonts to the WordPress Site Editor UI

Registering custom fonts in WordPress has typically been a straightforward thing when theming. Do it in the CSS a la @font-face and style away! But now with full-site editing in the wild as of WordPress 5.9, you might want to give yourself or your clients. That’s where the WordPr … | Continue reading


@geoffgraham.me | 2 years ago

Fixing LocalWP’s “Your Lightning services are missing” error

This is the error message I was greeted with today when launching the LocalWP app: It’s a simple fix, really. The problem (at least to me) is the messaging. Because I have no idea what the heck “Lightning” services are, I found myself looking through preferences, extensions, and … | Continue reading


@geoffgraham.me | 2 years ago

About the HTMLImageElement.complete property

I learned about this Boolean JavaScript property from today’s Web Tools Weekly newsletter (which you should definitely subscribe to). Louis Lazaris offers this example: That’s a simple test that returns true or false based on whether the image has completed rendering. That sounds … | Continue reading


@geoffgraham.me | 2 years ago

WordPress Full-Site Editing, First Impression

It’s been more than a few week since WordPress 5.9 shipped, and with it the formal introduction of full-site editing. It’s exciting! It’s weird! It’s… it’s… it’s… different! But as someone who teaches WordPress development, keeping up on this sort of stuff is, you know, part of t … | Continue reading


@geoffgraham.me | 2 years ago

6 Years Ago Today…

…a swell fella named Chris took a gamble on little ol’ me and published a post I wrote for his blog. 435 posts, tutorials, and guides later and I’m just as elated today as I was the morning I first saw my name slathered at the top of the site. Thanks, Chris. Being a part […] | Continue reading


@geoffgraham.me | 2 years ago

2021.

OK, OK, just my annual little “hey, hi, howdy” at the end of the year to check in and reflect on what happened this past year. I’ll get right to it. Work The most exciting thing about work this year might be that nothing exciting really happened. Same great clients, another year— … | Continue reading


@geoffgraham.me | 2 years ago

:nth-child() counts line breaks as spans in CSS

I was diddling around and working with this markup: I wanted to select the second <span> so, naturally: And gosh darn it was I surprised that my styles weren’t showing up! Making sure I had the syntax right, I went for: It worked! More head scratching. Hmm, OK, why not? By gol … | Continue reading


@geoffgraham.me | 3 years ago

Hidden Brain Podcast Logo in CSS

Hey, so I’m just sitting here in the living room with my family on Thanksgiving. Everyone is either watching TV or reading a book, except for me. I could be doing a million different things right now. What did my blond brain wind up deciding to do? I’ve got my laptop fired up and … | Continue reading


@geoffgraham.me | 3 years ago

The U.S. government cares about good copywriting

Well, there’s at least a few folks in the U.S. government that care about it. A group that calls itself the Plain Language Action and Information Network (PLAIN) apparently exists, and has been meeting since the 1990s. They even have an entire website dedicated to avoiding overco … | Continue reading


@geoffgraham.me | 3 years ago

Removing list styles removes list semantics in iOS

Say you’re on a navigation element. You might do something like this in HTML: And when styling it, you probably want to strip out the bullet points in CSS: Then you move right along with your merry day. The only problem is that wipes out the semantics of the list in VoiceOver in … | Continue reading


@geoffgraham.me | 3 years ago

Add a group of files to a new folder in MacOS

I love happy accidents. In this case, my finger slipped on the keyboard when trying to create a new folder on my MacOS desktop (you know, CMD + Shift + N). That’s what I normally type when I want a new folder for a group of files. Somehow, my middle finger slid off the Shift […] | Continue reading


@geoffgraham.me | 3 years ago

Google indexes iFrame content

It's Google's choice and they apparently decide based on surrounding content and backlinks. | Continue reading


@geoffgraham.me | 3 years ago

Content inside a `details` element is excluded from in-page search

It makes total sense, of course: if content is on the page but isn’t actually showing on the page, then there’s no need to show when searching content. That’s what I assumed it would do, but know for sure after testing in the major browsers. Search me! The quick brown fox jumped … | Continue reading


@geoffgraham.me | 3 years ago

How to serve optimized CSS background images based on screen resolution

New to me, but this has been around a hot minute! I remember when the <picture> element was introduced and thinking, Wow, HTML is getting pretty darn smart. I mean, the ability to specify variations of an image and let the browser choose the most optimal file based on the u … | Continue reading


@geoffgraham.me | 3 years ago

My Daily Routine

A couple of people reached out after my last blog post to ask what my day-to-day looks like. In that post, I listed the various things I do for various clients I work with, and those folks wonder how I structure my day. It’s a good question. I constantly deal with competing prior … | Continue reading


@geoffgraham.me | 3 years ago

Year Eight

There’s probably not a whole lot I can say about the past year that hasn’t been said or felt by anyone else. But aside from the pandemic, my eighth year of freelancing was just as good — and even enjoyable — as any other. In fact, things are great. I’m still churning out work for … | Continue reading


@geoffgraham.me | 3 years ago

State of the Internet’s Languages

I didn’t realize there is an effort to “de-colonize” the Internet but it’s unsurprising and makes a lot of sense. While I’ve never seriously questioned it, I’ve wondered in the back of my mind just how weird it must be for developers who don’t speak English as their first languag … | Continue reading


@geoffgraham.me | 3 years ago

No, no, GoDaddy. I’m worried about *you* selling my personal information.

Continue reading


@geoffgraham.me | 3 years ago

How to download an image from Google Docs

This is something I have to do from time to time. Someone will write up a content draft in Google Docs and sprinkle in images. I often need to move the content from Google Docs to WordPress and that’s an easy copy-and-paste. But if you look at the pasted images in WordPress, you’ … | Continue reading


@geoffgraham.me | 3 years ago

Image sitemaps are a thing

Ever build an image carousel or generate some sort of image via JavaScript? Google’s crawlers can parse JavaScript just fine, but might not discover or properly read image data, like location and licensing information. That’s a bummer for the SEO of a page if images represent mea … | Continue reading


@geoffgraham.me | 3 years ago