The <hr>
horizontal rule tag is an integral part of web design. By default, it appears as a basic black line spanning the entire page width. However, as developers we can leverage the power of CSS to customize this element with creative colors, borders, shadows, animations and more.
In this comprehensive 3200+ word guide, we will explore the various methods, best practices and real-world examples to change <hr>
color in CSS.
A Developer‘s Guide to Styling the HR Tag
Before we dive into code, it helps to understand the purpose and semantic meaning of the tag.
The <hr>
element represents a thematic break and is used to visually separate sections or segments within an HTML document. For example, dividing distinct topics on a page or marking a scene change within a story.
Some key facts about HTML horizontal rules:
- It is self-closing with a forward slash eg.
<hr />
- Often placed between paragraphs, headings or line breaks
- Has a "inline" display by default spanning full width
- Renders as a thin black line in browsers
- Used for visual division only, with no specific meanings
Now that we know what the tag signifies, let‘s discuss how it can be customized using CSS.
Changing HR Color with the background-color Property
The quickest way to set the color is by using the background-color
attribute:
hr {
background-color: blue;
}
The approach is straightforward:
- Target
hr
selector - Set background-color value
- Save CSS file and refresh page
For example:
hr {
height: 5px;
background-color: orange;
}
Renders a 5 pixel tall HR tag with orange background.
Advantages:
- Works across all major browsers
- Easy to implement
- Supports HEX, RGB and color names
Drawbacks:
- Colors the whole element
- Cannot have borders
- Less flexibility
Let‘s move on to more customizable techniques.
Using the border-top Property for Granular Control
For greater flexibility over styling, the border-top
property allows changing color and width specifically for the top border:
hr{
border-top: 3px dotted red;
}
- Width is set to 3px
- Line style defined as dotted
- Color set to red
You can vary the width, style and color combinations to create different looks.
Some benefits of using border-top:
- Less resource intensive than gradients
- Compatible across browsers
- Can set left/right border colors differently
- Width can be adjusted as needed
- More control over HR appearance
Let‘s look at some examples and use cases.
Varying width and color
hr {
border-top: 18px solid #1D6154;
}
Renders an extra wide green HR line.
Dashed top border
hr {
height: 2px;
border-top: 2px dashed #ffa500;
}
Displays a narrow orange dashed line.
Browser Compatibility
The border-top
property works seamlessly on all modern browsers. But some styling may need browser-specific prefixes for wider compatibility.
For example:
hr {
-webkit-border-top-width: 5px; /* Safari and Chrome */
-moz-border-top-width: 5px; /* Firefox */
border-top-width: 5px;
}
Using Border Colors Separately for Bi-Color Effect
We can spice up HR elements further by having different left and right border colors:
hr {
border-left: 5px solid green;
border-right: 5px solid red;
}
This renders a dual-colored line transitioning from green to red.
The key aspects are:
- Left and right borders defined
- Colors set to green and red
- Borders evenly split HR line
Let‘s implement an actual scenario.
HTML
<section>
<h2>Heading</h2>
<p>First section text...</p>
</section>
<hr>
<section>
<h2>Heading</h2>
<p>Second section text...</p>
</section>
CSS
hr {
height: 5px;
border-left: 8px solid #3d8dae;
border-right: 8px solid #164251;
}
This makes the color change more meaningful by separating two distinct content sections.
Creative uses would be to:
- Divide complementary portions
- Match HR colors to theme
- Associate meanings
Leveraging CSS Gradients for Smooth Color Transitions
For more vibrance, CSS gradients can blend HR colors seamlessly by applying color stops.
Syntax
The syntax structure is:
background-image: linear-gradient(direction, color1, color2, color3);
Let‘s break this down:
linear-gradient
defines gradient typedirection
sets the flow (to right, left etc)color1, color2
are color stop values
Example
hr{
height: 5px;
background-image: linear-gradient(to right, red, yellow);
}
The key aspects are:
- Gradient flows left to right
- Starts red from left
- Changes to yellow on right
- 5 pixel high hr line
Complex Gradient
We can make more complex gradients using additional color stops:
background-image: linear-gradient(to right, red, yellow, green, blue);
For creative effects, different blending modes like radial gradients can also be leveraged.
Drawbacks
- Not supported in old IE browsers
- Needs browser prefixes
- Higher resource usage
- Complex syntax
So use simple linear gradients for best results.
Animating the HR Color CSS Property##
Animations allow HR colors to change dynamically rather than being static.
This can be achieved by using CSS @keyframes rule combined with the animation property.
Example Code
hr{
height: 5px;
background: black;
animation: coloredHR 5s linear infinite alternate;
}
@keyframes coloredHR {
0% {background: orange;}
20% {background: yellow;}
40% {background: green;}
60% {background: blue;}
80% {background: purple;}
100% {background: red;}
}
Breaking it down:
- @keyframes named coloredHR
- 5 second long animation
- alternate reverse direction
- Starts orange > red color stops
When rendered, this smoothly transitions the HR through multiple colors repeatedly creating an eye-catching effect.
Real World Usages
Subtle HR animations can signify:
- Moods like danger or caution
- Brand colors cycling
- Emphasize ratings
- Toggle between two colors
But don‘t overdo effects just because you can!
Enhancing Depth with Box Shadows
The box-shadow
property allows adding floating shadow effects around hr to make it stand out.
Syntax
box-shadow: offsetX offsetY color;
Offsets specify position, color can be set in RGBA.
Example
hr{
border: none;
height: 7px;
box-shadow: 0 2px 5px rgba(0,0,0,0.26);
}
Some Tips on Styling Shadows:
- Balance shadow size with HR height
- Lower opacity for subtle effect
- Negative offsets to change direction
- Use blurs for depth
Shadows work for accent borders without colors too.
Setting HR Color Dynamically Based on Page Scroll Position
We can tap into the power of JavaScript to change the hr color dynamically based on page scroll position.
Example Logic
// Select HR element
var hr = document.getElementById("hr");
// On scroll event
window.addEventListener("scroll", function(){
// Check scroll position > 100px
if(window.scrollY > 100){
// Set HR color style
hr.style.backgroundColor = "red";
} else {
// Reset color
hr.style.backgroundColor = "#cccccc";
}
})
Here based on scroll position reaching 100px from top, the color is conditionally set to red and reset back to gray on reverse scroll.
Many variations can be built like:
- Toggle between brands colors
- Indicate progress trackers
- Set heat map thresholds
- Color code length of articles while scrolling
So elements can morph interactively without page refreshes.
Cross Browser Compatibility Best Practices
While HR tag itself is supported across browsers, some CSS3 styles may need browser-specific prefixes.
hr {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
}
Similarly gradients, shadows and animations would not work on older Internet Explorer versions without fallbacks.
To sum up cross-browser practices:
- Use feature detection to check support
- Leverage CSS browser prefixes
- Provide fallback styling for older browsers
- Rigorously test across browser sandboxes
This ensures maximum website visitors can view elements properly regardless of browser choice.
Wrapping Up
And that concludes this extensive guide on how to change the color and style of <hr/>
horizontal lines using CSS!
We went through various methods from basic background colors and borders to advanced animations, shadows and dynamic scroll-based logic.
As we explored, the HTML HR tag can be enhanced into beautiful visual dividers that add creative flair to any UI design. Technical tutorials and documentation sites can highlight glossary terms, product capabilities etc. through strategic and meaningful HR coloring.
I hope you found this guide helpful in understanding the elements semantics and how to tap CSS potential to render elegant HR elements. Feel free to use any snippet as per your project needs and requirements.
Happy coding and do share any custom styles you created!