### Pretty text underline A nicer alternative to `text-decoration: underline` where descenders do not clip the underline. Natively implemented as `text-decoration-skip-ink: auto` but it has less control over the underline. #### HTML ```html

Pretty text underline without clipping descending letters.

``` #### CSS ```css .pretty-text-underline { display: inline; font-size: 18px; text-shadow: 1px 1px 0 #f5f6f9, -1px 1px 0 #f5f6f9, -1px -1px 0 #f5f6f9, 1px -1px 0 #f5f6f9; background-image: linear-gradient(90deg, currentColor 100%, transparent 100%); background-position: 0 1.04em; background-repeat: repeat-x; background-size: 1px 1px; } .pretty-text-underline::-moz-selection { background-color: rgba(0, 150, 255, 0.3); text-shadow: none; } .pretty-text-underline::selection { background-color: rgba(0, 150, 255, 0.3); text-shadow: none; } ``` #### Demo

Pretty text underline without clipping descending letters.

#### Explanation 1. `text-shadow: ...` has 4 values with offsets that cover a 4x4 px area to ensure the underline has a "thick" shadow that covers the line where descenders clip it. Use a color that matches the background. For a larger font, use a larger `px` size. 2. `background-image: linear-gradient(...)` creates a 90deg gradient with the current text color (`currentColor`). 3. The `background-*` properties size the gradient as 1x1px at the bottom and repeats it along the x-axis. 4. The `::selection` pseudo selector ensures the text shadow does not interfere with text selection. #### Browser support ⚠️ Firefox requires a vendor prefix for the selection pseudo-selector to work. * https://caniuse.com/#feat=css-textshadow * https://caniuse.com/#feat=css-gradients