Hacker News new | past | comments | ask | show | jobs | submit login
Pure CSS – Lace (diana-adrianne.com)
415 points by robin_reala 13 days ago | hide | past | web | favorite | 102 comments

Having been inured to loading 100KB-200KB of boilerplate CSS for a web project, I'm just amazed that the raw CSS for this is 43KB, un-minified:


Developers don’t care about performance, and haven’t for multiple years now. Multi-megabyte JS packages for normal websites are visible across most of the web, and no-one tests on the actual problem devices which are low- to mid-range android phones on slow connections.

no-one tests on the actual problem devices which are low- to mid-range android phones on slow connections.

I do. But I work in healthcare for the rural and poor. Some of my target devices the kind of craptastic phones people on HN would buy as a joke burner, but for millions of people is their entire family's only connection to the internet.

At the other end of the spectrum, I've worked on an ecommerce site where I was instructed to ignore that our JS payload was taking more than six seconds to parse on flagship phones (setting aside the network entirely).

Worse still, after loading that code up, only then would it request the manifest that described 90% of the above-the-fold content.

The decadence of web development today, particularly with agencies and large corporate customers, is truly boundless.

Fascinatingly, at a previous ecommerce gig, we had a similar issue. On of the developers ran a test where on one of our main pages, he added performance improvements to get the fastest speed to a reasonable place, and then segmented traffic into buckets that deliberately slowed the server response by various, increasing amounts of time.

And wouldn't you know, it made almost no difference on our primary conversion metrics. As far as we could tell his methodology was sound, but unfortunately it got buried when it was discovered the findings could be abused to show that performance doesn't matter.

As this is indisputable true, who disagrees or doesn't see the value of a statement like this?

Are we so accustomed to having >100mbit bandwidth to not see the problems modern web design is bringing to people in poorer areas of the world?

I suppose that some of the downvoters of that comment upvote comments stating minorities are being discriminated. Ironically the minority is not being discriminated in this case, since most of the people on the internet are on <100mbit bandwidth worldwide (https://en.wikipedia.org/wiki/Global_Internet_usage#Broadban...).

Its the buisness side that doesnt care. For my personal buisness i make sure everythig is fast, lightweight, and accessible, works on browsers that has below 0.1% usage, do not track users, nor store personal info. But I do not make any extra money doing it.

I think you'd be surprised how much speed matters. Google factors in page load time for SEO, and there's quite a few examples of companies seeing page speed directly relate to sales:


What business is this? I'm really curious how well you do the accessibility side.

A lot is cached but agree it's still a valid concern.

If you open up the raw CSS file and pop open DevTools, the raw CSS is only 9.9KB after gzip. A minifier could probably make that a bit smaller too.

The author's absolutely earnt the right to call themselves a CSS expert on their personal site, I had no idea CSS could do something like this!

There's something oddly lovely about making art with such strict constraints. I've started making fun little pieces of my own with React and CSS. It's a great way to harness creativity through restrictions. Also requires some fun math on occasion. A good exercise is to make a Bauhaus or Swiss style poster, then animate it.

For those who want some background, the github repo [0] has more info.

Money quote: "All elements must be typed out by hand"

[0]: https://github.com/cyanharlow/purecss-lace

  .iris {
      display: none;

If you do the same with `.eye`, instead of empty eye holes you see closed eyelids.

So apparently there's even more work than initially meets the eye.

No pun intended?

Even make her perform a very awkward wink.

setInterval(() => {var style = document.getElementsByClassName("iris")[0].style; style.display = style.display != 'none' ? 'none':'block'}, 2000)

Better wink:

setInterval(() => {var style = document.getElementsByClassName("eye")[0].style; style.display = style.display != 'none' ? 'none':'block'}, 2000)

This is just awesome, lmao!


document.getElementsByClassName("nose")[0].style.display = 'none';

.iris { background-color: red !important; }

My blink 7-8 years ago. Pretty crude, but was fun to learn CSS animation. For smaller mobile, use landscape mode:


You hacker!

What have I done? shiver


Beautiful abuse of CSS. That fine line between mastery and subversion.

..also between genius and madness. It's brilliant and deserves a place in art history.

Wow, this is amazing.

I would love to watch something like this being live-coded. Heck, I assume people would probably even pay for watching it.

Yeah, I would definitely spend money on a book or video series that goes through this process.

The authors How page is interested but it leaves me with a bit of a "Draw the rest of the fucking owl" feeling.

These two channels don't do nearly the quality that the original post has, but these two old youtube channels have CSS drawings and are pretty fun to watch

Sasha Tran https://www.youtube.com/watch?v=wPJrnED45RM&list=PLTHpnjV0t8...

Jeffrey Taylor https://www.youtube.com/watch?v=kSBT669yLyU&list=PLaGfdei15A...

Seems like some good twitch opportunity

Not a dig, just found it interesting how this looks in Safari:


She mentions on the GitHub repo that she only coded for Chrome.

> Because of the artistic nature of this project I have not concerned myself with cross-browser-compatibility, so the live preview will most likely look laughable in anything other than chrome.

Works fine in Firefox except for the really nice brown iris design. I'm curious why that one part doesn't load (not that curious I would find out myself though :P).

For the curious: the artist used "repeating-conic-gradient()" which (along with conic-gradient) only works in Webkit browsers: https://developer.mozilla.org/en-US/docs/Web/CSS/repeating-c...

It looks better but still not quite right in safari on iPad. Is there a reference image somewhere?

It looks normal on mobile safari.

Is there any video where the artist talks about the process? I'm really interested in understanding how the artist approached this. Anyways, beautiful work.

Not exactly what you are asking for, but she does provide more information on the 5 key properties: https://diana-adrianne.com/how/

Each of the images without one of the key properties is oddly satisfying in a semi-abstract kind of way

While there is some commit history, it's definitely not low level enough to understand the process fully.

But I am imagining, from a quick "inspect element" looking at a few of the elements, that it is inspired by "brush movements": basically, you do a single brush movement with a single styled/transformed element (probably even more granular since a brush would give you trail-lines by default).

The eyes are extremely impressive. Playing with the properties it makes sense how she did it, but I can't imagine how long I'd have to play with transforms and gradients to recreate that from scratch.

Knowing my own frustrations with CSS, I cannot imagine any project more maddening than this.

Doesn't seem to render correctly on Safari.

> Because of the artistic nature of this project I have not concerned myself with cross-browser-compatibility, so the live preview will most likely look laughable in anything other than chrome.

But it works without a problem in FF

Did you compare it with the rendering on Chrome? Colors are quite different.

Good point. The eyes are wrong in FF, everything else looks almost the same though :)

An unfortunate side effect of abusing CSS to the boundaries of what it can do :(


People who spout this nonsense don't recall how bad IE was. Comparing the current state of any browser to IE (6-7-8) is utter nonsense.

There is a really good center of the road set of web browser features which all modern browsers support. This was not the case when IE was big, in order to make nice, functional web pages you needed to either give up supporting one platform or the other or you needed to spend tons of time and energy making 2 (or 3) pathways for extremely basic features.

If one browser is 1 year or two behind standards generally doesn't matter because as web developers we need to support 3-4+ year old browsers regardless. The truly crappy thing about IE was that Microsoft had zero commitment to web standards at all and many things they did outright contradicted them. Since IE had such massive market presence they undermined the standards process for more than a decade.

I think you're missing the point. We're not comparing Safari with IE6 -- that would be absurd, we're just saying Safari compares to it's peers (Chrome, Firefox, heck, even Edge) like IE6 used to compare to the other browsers back in the day: stuff would mostly work on everything else but always needed special attention/polyfills/workarounds for IE.

On the project I currently work on the codebase is _littered_ with workarounds and hacks to get stuff to work on Safari.

> we're just saying Safari compares to it's peers (Chrome, Firefox, heck, even Edge) like IE6 used to compare to the other browsers back in the day <

Again, this is nonsense.

There is a gap, but it's not bending the shape of the web or costing the average developer hundreds of hours to work around bullshit. Safari is behind on some features... no doubt at all. But to compare that to IE 6 is just wrong.

> it's not bending the shape of the web

Safari for iOS (and Apple in general) is bending the shape of the web. For example the poor support for PWAs.

I think that's intentional on Apple's part, though.

Safari is the new netscape. Chrome is the new ie

Devs not caring about compatibility and instead focusing only on a particular browser that abuses its market position to impose its own standards on the industry? Chrome is the new IE.

As a frontend developer, IE and Safari have always been awful and give the most trouble. They also pretty much always lag behind Chrome and Firefox when it comes to new standards.

Rather than targeting your frustration towards developers who don't want to or have the time to bend over backwards to accommodate terrible browsers, how about directing that energy towards encouraging those browsers to catch up and stop holding back the web?

A "standard" seems like an odd word to describe a process in which one company does new things, and all other companies take some time to do the same.

You do not deserve to be downvoted. As a developer, I wholeheartedly agree with you (anyone remember Safari's super buggy indexed DB implementation?!)

The downvotes are happening because this would have been as possible to achieve in Safari as in Chrome had the author chosen to develop purely in that, and Chrome would have been one of the engines that look broken. At this level you’re relying on engine quirks rather than spec compatibility.

Disagree. As someone who has tried to make web art that works cross-browser, I frequently follow standards and end up with something that works in Chrome, but breaks in Safari. I end up having to write hacks to detect Safari, cut out the parts of the standard they’ve implemented wrong, and find often crappy looking workarounds.

I’ve had issues with canvases just sort of “flashing” for no reason, and if you try to use SVG filters or other parts of the SVG standard that have been standardized for years... well Safari doesn’t choose to just ignore them. Instead it will sometimes just make the parts of the SVG affected by the filter turn black and then call it a day.

So I wouldn’t say that it’s as easy to create something that works fine in Safari and breaks in Chrome. Making something that works in Safari is just plain hard.

This; I've had issues with Safari when trying to create a smooth animation of multiple elements synced up to each other to create the illusion of them being one continuous looping element. Chrome, Firefox, and Edge had no problem keeping the elements synced together, but in Safari, the time-resolution of animation-delay was terrible, and it forced me to overlap the elements by quite a bit, making things a bit worse across all browsers.

Safari also basically destroyed my animation whenever the window size was changed, which also applies to switching from portrait to landscape on iOS.

OK, but there’s no use of SVG or canvas here, this is purely CSS.

Correct. Safari is a dumpster fire when it comes to modern CSS support. Hence 'Safari is the new IE'

Let's just say, Safari has more "quirks" than it should.

Actually the downvotes are coming from people who don't have experience developing websites to support Safari.

>The downvotes are happening because this would have been as possible to achieve in Safari as in Chrome had the author chosen to develop purely in that, and Chrome would have been one of the engines that look broken.

This is not true.

>At this level you’re relying on engine quirks rather than spec compatibility.

I think you're misunderstanding - the art was developed with standards. Safari is the piece that is failing the standards, not the art.

Amazing! Now I really wanna code something up that will generate this, it seems like it would be a super fun weekend project :)

Yes! Please create a higher-level abstraction so we can all be CSS painters in the Old Masters' style.

As in applying GAN on this? Could be interesting

This is great! On my tablet the perf isn't great though (no fault to the author). I'm wondering what CSS properties cause perf to degrade on a use like this? Looking at the CSS myself I'm guessing it's the box-shadow usage. But I could be wrong. Any chance some of this could be put on the GPU?

I had the Dark Reader chrome extension on and it looked awful, then realised.. This is crazy impressive.

It's very worthwhile to check out her other pure HTML+CSS artwork.


> I have not concerned myself with cross-browser-compatibility, so the live preview will most likely look laughable in anything other than chrome.

Indeed it looks much worse on Firefox than on Chrome.

In Chrome 78.0.3904.70


In Firefox 69.0.2


Much worse? She just looks a bit more sleepy!

I think you inverted the pictures. The first one is what i get in Firefox, not Chrome.

You're quite right! Just looked again in Firefox.

let's just say it's a different lady in firefox :D

It will be great to read a blog or tutorial on how you made this.

To get a sense for how this is done, one can use the Inspect Element tool in the browser, Pick an Element from the page, and either highlight it or delete.

One of the most amazing things I have seen in a long time. The patience alone (not to mention the insane skill level) is off the charts.

I clicked on that link expecting just another CSS framework, but this is ridiculously impressive. Hats off to the author.

This is an advance version of CSS. I would like to know you did it.

What are the stab and spurt animations for?

Lol oh shit I forgot id originally been using this file to demo some shit to my team. I was demoing how to do an animated angry stabby emoji. Good catch. I hope I have that original version saved, gonna check

Image without JS? Oh the blasphemy! /s

Does this qualify as a new ACID test?

Is it designed for chrome, not to conform to standards.

Wow, amazing work !!

Wow impressive

Doesn't scale when the browser window is resized.

Not responsive. Unusable. /s

I know, i know, it's awesome. But, unless it's specifically to make a point regarding the absurdity of today's web (such as eg demonstrating CSS Turing completeness), I can't help finding such hacks sad, because it just blends in to demonstrate how far we've striven from what once was a vision for a rational media architecture with a dedicated vector graphic format.

I don’t think that’s fair, exactly. The point of this exercise is to show artistic expression by pushing a medium outside of its intended use. There’s also an artist that paints in MS Excel, for example.

SVG is an incredible and underrated format. You can create illustrations in svg with modern graphics tools, yet still hack and animate them with css and js. And CSS Houdini is a really exciting development, too.

Some things about the web platform are frustrating for sure, but this sort of project isn’t any kind of statement on the effort required to build modern web graphics and illustrations because you’d never approach it this way. It’s just a fun puzzle for the artist, and every tech and medium has examples of this sort of thing.

The amazing MS Excel artist mentioned can be found here:


I think it's just... art. And also a hobby. She likes doing this very fiddly, impractical way of working in her spare time. She could be putting together jigsaw puzzles, she could be gardening, she could be making intricate motorized sculptures out of cardboard, she could be doing all sorts of things. But instead she takes the CSS skills that she uses for her day job and sees how far she can push them.

Hell, at this point I wouldn't be surprised if she's even had people approach her asking for CSS portrait commissions. I'm sure the number she's quoted them is pretty large, if so.

I'm a pro artist who mostly use Illustrator and I am pretty sure I could reproduce any of her pieces in a fraction of the time it took her to type them out by hand. If I did, nobody would care, because I'd be using a tool actually made for art.

You are making a claim based on what's being an extreme application of a technology. We can push any technology to its limits but that doesn't mean that average usage should suffer from the edge case problems.

We still have a rational media architecture with vector graphics support.

Yeah I was hesitant to post because of the negative vibe to it, but still, if all we've achieved in the last decade or so is a replacement syntax for what was already possible 20 years ago on the web (Adobe SVG plugin) and with today's browser out of the box, we ought to search our soul what our goals are with the web platform. Because absurd CSS complexity with some 20 different layout models (or any bikeshedding on syntactial issues really) just serves to dilute any future effort for implementing parts of the web stack for no good reason other than browser lock-in.

Standards are superior to plugins I count that as a clear win. I don't thing there's a great goal other than being an application platform for the masses. New toys will come, old might go, but more likely stay with the spec (hi: <marquee>).

CSS layout had indeed evolved quite a bit (for the better), however we have great control now with flexbox and grid. They are much more than syntactic enhancements.

I wouldn't worry about browser lock-in, if you build stuff for browsers you are already "locked in" by definition.

Guidelines | FAQ | Support | API | Security | Lists | Bookmarklet | Legal | Apply to YC | Contact