Revealing Text With CSS letter
Some text effects are relatively hard to pull in CSS, the main reason being we are unable to target individual characters (something many of us want in the form of But maybe there are a few things we can use today with what we already have. For example, the CSS The It’s quite easy to completely overlap the characters as a starting point and setting it’s From there, we can reveal the text by animating that Note:The CSS The labels go from negative The second and third labels are given center and right text alignments and thus when negative letter spacing is applied they bundle up at the given alignment position, center and right, respectively. When Thus, we get a text reveal effect! Let’s look at some more. Check this out. We can toggle a checkbox label as a fun interactive UI touch: When the box is checked, a negative Concurrently, the text in the second Here’s another fun one. We can start with an acronym that reveal the full text on hover. Again, we have existing features to help us pull this off, including We’ll start with this markup: Each word in the UNICEF acronym initially has Now, we can target the image on I don’t know! But that’s where you come in. Obviously, a hypothetical What can you cook up knowing we have these constraints?::nth-letter(), although we have basis for it with ::first-letterthat gives us access to a box element’s first glyph.letter-spacingproperty adjusts the space between all characters in a block of text. Positive values add spaceto the right side of each glyph (in a left-to-right writing mode), and negative values shrink the width of the glyph box, causing letters to overlap and even move the other way.letter-spacingaccepts length units, and percentage (relative to font size). It is animateable, and as we saw before, the negative values can shrink it down or reverse it. Which is something we can make use of.Overlapping and separating letters
colorto transparentto visually hide it.label { letter-spacing: -1ch; color: transparent; /* etc. */}letter-spacingvalue to a positive value and updating the colorto a visible value, like when a checkbox is :checked:li:nth-of-type(2) label { text-align: center;}li:nth-of-type(3) label { text-align: right;}input:checked + label { letter-spacing: 0ch; color: black; transition: letter-spacing 0.6s, color 0.4s;}chunit is a relative length representing the width of the zero (0) glyph.letter-spacingto normal spacing and the colorupdates to black. Both these changes happen over a transition.letter``-``spacinggoes from negative to zero (or any positive value) the letters separate from that same alignment position.Showing and hiding text
<!-- Simplified for brevity; additional accessibility considerations --><input type="checkbox" id="cb"><label for="cb"><span>Join the global club</span><span>You've begun your journey!</span></label>label { overflow: clip; /* etc. */}span { /* The first label */ &:nth-of-type(1) { /* Default spacing: letters are fully visible */ letter-spacing: 0ch; /* When the checkbox is checked, target this text */ :checked + * & { /* collapse letters on top of each other, hiding them */ letter-spacing: -2ch; text-indent: -1.5ch; /* Use a "bouncy" cubic-bezier for spacing */ transition: 0.4s letter-spacing cubic-bezier(.8, -.5, .2, 1.4), 0.1s text-indent; } } /* The second label */ &:nth-of-type(2) { /* Initially collapsed (letters overlap) */ letter-spacing: -1ch; color: transparent; /* When the checkbox is checked, target this text */ :checked + * & { /* Returns to normal spacing */ letter-spacing: 0ch; color: black; /* Slightly delay the appearance so it starts after the first text begins to hide */ transition: 0.4s letter-spacing cubic-bezier(.8, -.5, .2, 1.4) 0.3s, 0.8s color 0.4s; } }}letter-spacingvalue (-2ch) and text-indentvalue (-1.5ch) is used on the first <span>to slide it out of the container box. We use overflow: clipto completely hide the text.<span>text goes from a letter-spacingvalue of -1chto 0ch, which reveals it. To hide this overlapped text at -1ch, a transparentcolor was given that’s turned to blackwhen the checkbox is checked.Using with other glyph box styling
::first-letterand ::first-line.<!-- Simplified for brevity --><p id="acronym"><span class="words">United</span><span class="words">Nations</span><span class="words">International</span><span class="words">Children's</span><span class="words">Emergency</span><span class="words">Fund</span></p>.words { letter-spacing: -1ch; color: transparent; /* etc. */ &::first-letter { color: black; } figure:hover + #acronym & { letter-spacing: 0ch; color: black; transition: letter-spacing 0.4s cubic-bezier(.8, -.5, .2, 1.4) /* etc. */; }}letter-spacing: -1chto shrink the text, and color: transparentto keep the shrunk text hidden, except the ::first-letterthat has color: blackso it remains visible even though the rest of the text is stacked beneath it.:hoverand select the entire text so that the letter-spacingvalue for each word decreases to 0chand color: blackis applied, showing what’s remaining of the words:What else can we do?
::nth-letterselector would be amazing for all kinds of text effects. But it’s neat that we can create some semblance of it today with existing features, like letter-spacing, ::first-letter, and ::first-line.Comments
Leave a Reply Cancel reply
- 最近发表
-
- Moderation Tools Configuration
- How to Build an Autonomous OSINT Agent in Python Using Claude's Tool Use API
- How to Deploy an AI Agent with Amazon Bedrock AgentCore
- How to Develop AI Agents Using LangGraph: A Practical Guide
- Cloud Computing Resources
- rotateZ()
- How to Use AI Effectively in Your Dev Projects
- How to Build a Google Sheet AI Agent with Composio and Gemini TTS Support
- How to Optimize Enterprise Knowledge Graphs for Scalable Digital Product Platforms
- The freeCodeCamp.org Copyright Policy
- 随机阅读
-
- Design Portfolio Platform
- Beyond NVIDIA: Where the AI Infra Trade Actually Shows Up
- How to Take Machine Learning Beyond Python Notebooks with These Helpful Tools
- How to Split PDF Files in the Browser Using JavaScript (Step
- Web Development
- How to Create a GPU
- AI Paper Review: Improving Language Understanding by Generative Pre
- How to Build a Cost
- How to Build a Browser
- How to Ship a Production
- Data Science Insights: Why the Mean Lies When Handling Messy Retail Data
- How to Take Machine Learning Beyond Python Notebooks with These Helpful Tools
- How to Scale Laravel Applications for High
- How to Build Your Own Local AI: Create Free RAG and AI Agents with Qwen 3 and Ollama
- How to Deploy an AI Agent with Amazon Bedrock AgentCore
- How to Build a Production
- Sustainability Metrics Dashboard
- How to Build a PDF Page Numbering Tool in the Browser Using JavaScript
- How to Clean Time Series Data in Python
- How to Automate PDF Data Extraction Using Python
- 搜索
-
Any thoughts on how you would make the third example in CodePen (Join the Global Club) more accessible? Currently both spans are read by VoiceOver, so I suspect it could be a bit confusing for users with screen readers/
ReplyVery cool
Reply