So I just did this for my site and thought it was a fun and simple snippet to share. Nothing too fancy, but using only CSS for something presentational just makes me giddy!
So here’s the markup:
<span class="page-link prev"><a href="/prev"></a></span>
<span class="page-link next"><a href="/next"></a></span>
Easy! Only slightly weird thing is that there is no text in the a
tags. We would probably want to add a title
attribute to the tag to make sure everyone knows what we are talking about.
And the magic! In Sass (scss) because we’re being all modern: (explanation in comments)
$circle_diameter: 50px;
$dark_gray: rgba(74, 77, 81, 1);
$yellow: rgba(255, 199, 0, 1);
.page-link {
a {
// We will make this empty a tag a circle
// Set equal width and height.
width: $circle_diameter;
height: $circle_diameter;
// This curves in the corners to make a circle.
border-radius:50%;
// Make it look nice.
background-color:$yellow;
// We're going to be doing some funky positioning stuff!
position:relative;
// Yes! We are using both :before and :after pseudoclasses! Each will be a "leg" of the arrow
&:before, &:after {
// Gotta have this to make the pseudoclasses work.
content:"";
// You can mess with these values to change how thick and long the arrow legs are.
// But you will have to mess with positioning below, as well.
width:30%;
height:12%;
// Something to contrast the $yellow.
background-color:$dark_gray;
// Here it comes...
position:absolute;
// Oh, just center it.
// transform will take care of fine tuning the positioning.
top:50%;
left:50%;
}
}
// Here's all the crazy positioning stuff, handled by the "transform" directive.
// :before becomes the top of the arrow, and :after is the bottom (see the second param of translate()).
// Note how the values flip between .prev and .next (and the first param in translate value flipping over -50%)!
// You can tweak these values to make different angles of arrows!
// But if you do you will probably have to change the size of the legs above.
&.prev {
a:before{
transform:translate(-60%, -100%) rotate(-45deg);
}
a:after {
transform:translate(-60%, 0) rotate(45deg);
}
}
// Second verse, same as the first!
&.next {
a:before{
transform:translate(-40%, -100%) rotate(45deg);
}
a:after {
transform:translate(-40%, 0) rotate(-45deg);
}
}
}
The :before
and :after
pseudoclasses are a lifesaver here.
And here’s what it all looks like in the end:
Well, at least I think it’s pretty neat.
This post was originally published on washingtonsteven.net
Top comments (0)