Outline effect to text
Categories:
Creating an Outline Effect for Text with CSS

Learn various CSS techniques to add a stylish outline effect to your text, enhancing readability and visual appeal.
Adding an outline effect to text can significantly improve its visual impact and readability, especially when placed over busy backgrounds. While there isn't a direct text-outline
CSS property, several creative methods allow us to achieve this effect. This article explores common and advanced CSS techniques, including text-shadow
, SVG filters, and -webkit-text-stroke
, providing practical examples for each.
Method 1: Using text-shadow
for Basic Outlines
The text-shadow
property is a versatile tool that can be leveraged to create a text outline. By applying multiple shadows shifted slightly in different directions, we can simulate a border around the text. This method is widely supported and relatively simple to implement, making it a good starting point for basic outline effects.
.outline-shadow {
color: white;
text-shadow:
-1px -1px 0 #000,
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000;
}
CSS using text-shadow
to create a 1px black outline.
This technique works by layering four shadows, each offset by 1 pixel in a cardinal direction. The color
property sets the fill color of the text, while the text-shadow
properties define the outline. For thicker outlines, you can increase the pixel offset and add more shadow layers.
text-shadow
, you can add a small blur radius to each shadow. For example: 1px 1px 2px #000
.Method 2: Leveraging -webkit-text-stroke
The -webkit-text-stroke
property is a non-standard CSS property primarily supported by WebKit-based browsers (like Chrome, Safari, and newer Edge versions). It provides a more direct and often cleaner way to create text outlines compared to text-shadow
. It allows you to define both the width and color of the stroke around the text characters.
.outline-webkit {
color: white;
-webkit-text-stroke: 1px black;
/* For Firefox/other browsers, consider a fallback */
text-shadow:
-1px -1px 0 #000,
1px -1px 0 #000,
-1px 1px 0 #000,
1px 1px 0 #000;
}
CSS using -webkit-text-stroke
with a text-shadow
fallback.
While -webkit-text-stroke
offers excellent control and a crisp outline, its limited browser support means you should always provide a fallback for broader compatibility. The text-shadow
method is a good choice for this fallback.
flowchart TD A[Start] --> B{Browser Support for -webkit-text-stroke?} B -- Yes --> C[Apply -webkit-text-stroke] B -- No --> D[Apply text-shadow fallback] C --> E[Text Outlined] D --> E
Decision flow for applying text outline based on browser support.
Method 3: Advanced Outlines with SVG Filters
For the most flexible and powerful text outlining, especially for complex effects or when dealing with varying text sizes and fonts, SVG filters are an excellent choice. This method involves defining an SVG filter that applies a blur and then a color matrix to create the outline. The filter is then referenced in CSS using the filter
property.
<svg width="0" height="0">
<filter id="outline">
<feMorphology in="SourceAlpha" result="dilated" operator="dilate" radius="2"/>
<feFlood flood-color="black" flood-opacity="1" result="outlineColor"/>
<feComposite in="outlineColor" in2="dilated" operator="in" result="outline"/>
<feMerge>
<feMergeNode in="outline"/>
<feMergeNode in="SourceGraphic"/>
</feMerge>
</filter>
</svg>
<p class="outline-svg">Outlined Text</p>
HTML with SVG filter definition for text outline.
.outline-svg {
font-size: 4em;
font-weight: bold;
color: white;
filter: url(#outline);
}
CSS applying the SVG filter to text.
The feMorphology
primitive dilates the alpha channel of the text, effectively making it thicker. feFlood
creates a solid color layer, and feComposite
combines them to form the outline. Finally, feMerge
layers the outline behind the original text. This method offers superior control over outline thickness, color, and even allows for more complex effects like gradients or textured outlines within the SVG filter.