text-decoration: blink
text effects 1998 deadThe CSS way to blink, still valid CSS, and the spec says a browser may ignore it.
In 2026: Dead in practice. CSS 2 defined the blink value, and the current spec keeps it valid while explicitly allowing a browser to do nothing with it, which all of them now do. So the first line below is legal CSS that never blinks. The keyframes version under it is what actually flashes.
Where it came from: CSS 2, W3C 1998. CSS Text Decoration Level 3 keeps the blink value valid but conformant for a browser to ignore. MDN ↗
<style>
/* Valid CSS. The spec lets the browser ignore it, and every browser does. */
.old-blink { text-decoration: blink; color: #c00; font-weight: bold; }
</style>
<p class="old-blink">This asks to blink with text-decoration. It does not.</p>
<!-- The version that still blinks -->
<style>
@keyframes tdb { 50% { opacity: 0 } }
.real-blink { animation: tdb 1s steps(1) infinite; font-weight: bold; }
</style>
<p class="real-blink">NEW! this one really blinks</p>