This is very cool! One suggestion: I would like to be able to see the generated CSS live so I can learn how the effect is actually created and how playing with options modify the output (could not find an option on mobile).
That's a great suggestion! And while there are some really nice options (copy as css, copy as Figma layer, permalink...) it took me forever to see them way down in the left corner in the light gray text.
I've used it a lot, but it always lacked a few features I would've used extensively, such as shareable links, copying to Figma with a button click, ability to change the background color, and a library of ready-made shadows. Also, I think the terminology is perhaps a bit clearer for someone who hasn't looked deeply into how this layering technique works.
Do note that while modern browsers are pretty performant with this, the more you stack shadows the more your low end users pay for it. I can't recall which large site ran into it a few years ago, but the short gist is they struggled with scroll performance and in the end stacked shadows were to blame.
On this note, is there a way to do CSS profiling other than bisecting it all? Like some way to get the rendering times for each CSS rule or for each element and children?
Just wanted to say that the "copy Figma layer" option is a really neat touch.
If it were me, I'd make all those copy buttons more prominent: at first I didn't see them, and assumed I was expected to inspect the page using developer tools to grab the CSS values.
It is not. Regular box shadows don't have as much depth to them because the shadow colour is static. These "smooth" box shadows create multiple layers of box shadows to give the shadow a gradient of colour from dark (Closest to object) to light (Furthest from object).
Set the opacity high, blur low and then play with the layers and you'll see the multiple box shadows. 0.5 opacity and 10 blur were the settings I used.
This doesn't make any sense to me. Shadow color should be static; shadows don't change color.
And remember that, practically, when you sum up multiple overlapping gaussians you still just get a single gaussian in the end.
So multiple "layers" of shadows seems to be entirely redundant and simply a waste of computing power.
(Unless you want 2+ shadows because you're trying to simulate the effect of 2+ directional spotlights with hard edges, but I've never seen anybody ever want to do that in a UX context. Modern UX shadows are almost universally simulating a single softbox light from slightly above.)
Yeah, you’re right that it doesn’t make sense if you think of the rectangle as a flat thing hovering above the background like a piece of paper.
But I think the intention is to simulate the rectangle being the top surface of a 3D box. If you shine a light at a cube on a desk, the shadows are very sharp right where the cube touches the desk, and then further away are softer.
I think that’s the effect they’re trying to achieve here?
So it’s not changing the gaussian for falloff, it’s changing the shape of the shadow, from a rectangle to a rhombus, and using different gaussians along the edges.
Oh, interesting. I never thought of it that way. I think UX shadows are pretty universally meant to indicate the effect of floating cards rather than solid boxes (or "extruded").
But if you wanted a box to cast a shadow, I think you're better off rendering it in 3D software and then applying it as an image behind your element. Layering a bunch of guassians isn't going to look right either.
I would be interested if CSS ever decided to implement an "extruded" shadow option separate from the existing floating/gaussian one. I'm not sure there's much demand for it though? Not to mention I think it might be much more computationally expensive.
You can get much the same effect with a single layer by setting the blur high (and maybe increasing spread-radius, which this app doesn't have a setting for).
Possibly the multi-layer version is better -- I'd like to see a proper comparison -- but is it better enough to justify the cost?
This is super cool and I'm definitely bookmarking it for later use :)
I'd suggest moving the "copy css/figma/link" buttons to the right panel or at least making them more obvious (maybe by increasing contrast?) as I had trouble figuring out how to export the shadow I made.
This is really nice! Well-designed and can really help with creating box-shadows in CSS (which, on a side-note, is a real pain!).
I have personally long given up on trying to create a perfect shadow in CSS and just use those available online or in libraries like Tailwind CSS. With that, the "Library" part is a great addition.
One thing is the history handling - with every change writing a new URL to the history - it's really inconvenient for the user who, in most cases, just wants to go back to entirely different page. Consider changing that to not affect the history state.
Nice generator! I'm not much of an UI or web designer, but I guess this is a common design task in those contexts. Presets for corner roundness are nice, but there could also be a slider for it.
The first time I saw these layered shadows was in AngularJS Material design whiteframes ( https://material.angularjs.org/latest/demo/whiteframe ), which have a few fixed levels of elevation. I always wondered if it would be to generate these shadows continously, and here we go. Great work!
Those shadows are smooth indeed, very cool project!
Small suggestion is to make the box to which the shadow is applied resizable. How we want the shadow to look often depends on the size of the element to which it is applied.
Could be as simple as adding this CSS to the box: resize: both; overflow: auto;
Turning the blur down, changing the shadow to a nice bright colour, turning up the number of layered shadows, and then wibbling the X and Y parameters around gives a nice oldschool Winamp Milkdrop plugin rotozoomer type effect.
Hmm. Not able to reproduce this issue. Do you see the clipboard icon turning to checkmark on the second copy too? If not, then the browser blocked the second clipboard operation.
The entire Apps state seems to be encoded in the URL, so each change also generates a completely new one. This breaks the state for me, I suppose Firefox doesn't like when you update the URL with every drag of a slider.
Thank you all for the feedback on this! I agree. It didn't seem like such an issue during development, but that was a misjudgement. Removed that functionality now. Should not add to history anymore (shareable URLs should still work).