CSS: Emulate linear gradients with inset box shadows
Why is this useful?
- You can have a background image on the same element, overlaying it with a transparent gradient.
- Since you are probably using gradients to give an element a glossy or three-dimensional feel, box shadows work much better for this. This is because linear gradients always stretch to the full size of the element (which can grow with user input), while a natural shine or shadow only highlights a fixed size on the top or bottom.
- Browser support for linear gradients is a mess. I avoid using them. In particular, IE 7-9 can only emulate gradients with a weirdo DirectX filter directive which has issues.
Take this gradient from top to bottom:
background-image: linear-gradient(top, red 0%, bottom 100%);
You can emulate this with a box shadow (assuming that the element is 50px high):
background-color: blue box-shadow: 0 50px 50px -50px red