.c-btn{
  border: none;
  background-color: orange;
  padding: 12px 48px 12px 24px;
  border-radius: 4px;
  color: #fff;
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='7.41' height='12' viewBox='0 0 7.41 12'%3E%3Cpath d='M10,6,8.59,7.41,13.17,12,8.59,16.59,10,18l6-6Z' transform='translate(-8.59 -6)' fill='%23fff'/%3E%3C/svg%3E");
  background-repeat: no-repeat;
  background-position: right 24px center;
}
<button class="c-btn">View Profile</button>

Answer from Ehsan on Stack Overflow
🌐
CodePen
codepen.io › condensed › pen › MwzQym
CSS button with right arrow
/* Button-arrow CSS: */ // NOTE: I feel I could re-write the CSS to make a little more sense, but it's pretty good as-is: .arrow { cursor: pointer; display: inline-block; height: 40px; margin-left: 40px; margin-right: 40px; position: relative; line-height: 2.5em; padding-left: 1em; padding-right: 2em; background: white; color: black; &:after { // triangle hover color border-left: 20px solid white; } } .arrow:after { // the triangle content: ""; position: absolute; border-bottom: 20px solid transparent; border-top: 20px solid transparent; height: 0px; width: 0px; margin-right: -20px; right: 0;
Discussions

Need help adding left and right arrows to a button
I'm trying to add two buttons at the bottom of the page signifying going onto the next or back to another case study in a portfolio. I found the CSS for the right arrow and it currently looks like Bakery Redesign pic with this code: .sqs-block-button-element:after { content: '➔'; color... More on forum.squarespace.com
🌐 forum.squarespace.com
9
July 22, 2023
css - Button with right arrow - transition - Stack Overflow
I've made css button with right border in arrow shape, with the help of css transforms and pseudo elements. Now I'm trying to add transition to background on hover but realized there is a problem, ... More on stackoverflow.com
🌐 stackoverflow.com
css - Create a Button with right triangle/pointer - Stack Overflow
Alfred's solution did the trick to get a right arrow button. I wanted this to be dynamic so I could reuse it across multiple projects and easily adjust the width and height of the button. I was able to use CSS variables to do the calculations to modify the button according to the base width ... More on stackoverflow.com
🌐 stackoverflow.com
sass - CSS Toggle arrow left and right with just css - Stack Overflow
I was to create a toggle button in css where I have something like the image attached. It needs to have an arrow pointing left or right. Can this be done using just css? More on stackoverflow.com
🌐 stackoverflow.com
🌐
W3Schools
w3schools.com › howto › howto_css_arrows.asp
How To Create Arrows/Triangles with CSS
Well organized and easy to understand Web building tutorials with lots of examples of how to use HTML, CSS, JavaScript, SQL, Python, PHP, Bootstrap, Java, XML and more.
🌐
Squarespace Forum
forum.squarespace.com › home › customize with code › need help adding left and right arrows to a button
Need help adding left and right arrows to a button - Customize with code - Squarespace Forum
July 22, 2023 - I'm trying to add two buttons at the bottom of the page signifying going onto the next or back to another case study in a portfolio. I found the CSS for the right arrow and it currently looks like Bakery Redesign pic with this code: .sqs-block-button-element:after { content: '➔'; color...
🌐
Medium
medium.com › @dimterion › arrow-buttons-with-html-css-2b3906da23f4
Arrow buttons with HTML & CSS. Sometimes you may want not to use icons… | by Dimterion | Medium
March 14, 2025 - Recently, I was playing around ... HTML and CSS and then realized that, as I was making them with <button> elements, they looked a bit different from what is usually shown in various guides on how to make simple triangles. Mainly, it was due to the fact that even when button does not have any content, it will still show the gray rectangle by default. We can use it to turn our triangles into arrows. Here are a couple of buttons in HTML; one will be pointing left and the other one — right (back and ...
🌐
Slider Revolution
sliderrevolution.com › home › interesting html and css arrows to use on a website
Interesting HTML And CSS Arrow Examples To Use In A Website
January 27, 2026 - A solid transparent arrow-right option with animation effects that help indicate content position. This technique uses CSS transforms and transitions to create smooth directional indicators.
Top answer
1 of 3
7

As stated in my comment, this is kind of expected because roughly speaking what happens is that a semi-transparent white layer is being placed on top of another such layer in the areas where there is an overlap and so, that area quickly appears whiter than the rest.

Using Skew Transform:

One solution would be like in the below snippet but it makes the hover/hit area a rectangle. What I've done here is to make the pseudo-elements create the entire shape (other than the left border) and a overflow-hidden on the parent prevents the unwanted skewed portions on left side from showing up.

body {
  background: gray;
  font-family: sans-serif;
}
.more-skewed {
  display: inline-block;
  position: relative;
  color: white;
  text-decoration: none;
  border-left: solid 2px white;
  box-sizing: border-box;
  padding: 15px 40px;
  letter-spacing: 3px;
  transition: all 1s ease-out;
  overflow: hidden;
}
.more-skewed:before {
  content: '';
  position: absolute;
  left: -2px;
  top: 0px;
  bottom: 50%;
  border-right: solid 2px white;
  border-top: solid 2px white;
  transform: skewX(25deg);
  transform-origin: right bottom;
  width: 100%;
  transition: all 1s ease-out;
  z-index: -1;
}
.more-skewed:after {
  content: '';
  position: absolute;
  left: -2px;
  bottom: 0px;
  top: 50%;
  border-right: solid 2px white;
  border-bottom: solid 2px white;
  transform: skewX(-25deg);
  transform-origin: right top;
  width: 100%;
  transition: all 1s ease-out;
  z-index: -1;
}
.more-skewed:hover {
  color: black;
}
.more-skewed:hover:before,
.more-skewed:hover:after {
  background: white;
}
<a class="more-skewed" href="#">MORE</a>


Using Rotate with Perspective:

Another solution could be to use rotate transforms with a bit of perspective added to it. By setting the appropriate value for transform-origin we can make it produce a trapezoid which can be placed at the appropriate positions to produce an arrow. Here, the hover/hit area remains within the shape but this approach is useful only if the text is small and static. If the text becomes longer, the slope on the right side of the shape becomes more gradual instead of being steep (of-course, we can change the transforms to make it look better, but it is not very useful if we have to keep changing it often).

.more-skewed {
  display: inline-block;
  position: relative;
  color: white;
  text-decoration: none;
  border: solid 2px white;
  border-right: none;
  box-sizing: border-box;
  padding: 16px 40px;
  letter-spacing: 3px;
  margin: 10px;
}
.more-skewed:before,
.more-skewed:after {
  position: absolute;
  content: '';
  height: 50%;
  width: 100%;
  left: 0;
  border-right: 3px solid white;
  transition: all 1s ease-out;
}
.more-skewed:before {
  top: -2px;
  border-top: 2px solid white;
  transform-origin: left top;
  transform: perspective(100px) rotateX(30deg);
}
.more-skewed:after {
  bottom: -2px;
  border-bottom: 2px solid white;
  transform-origin: left bottom;
  transform: perspective(100px) rotateX(-30deg);
}
.more-skewed:hover {
  color: black;
}
.more-skewed:hover:before,
.more-skewed:hover:after {
  background: white;
}
.more-skewed span {
  position: relative;
  z-index: 1;
}
body {
  background: gray;
  font-family: sans-serif;
}
<a class="more-skewed" href="#">
  <span>MORE</span>
</a>
<br/>
<a class="more-skewed" href="#">
  <span>MORE LONGER TEXT</span>
</a>

(Feedback is that the above snippet breaks in IE. I will address that when I find time.)


Here is another version that I came up with as I was playing around. It is a bit like a background slide-fill effect which keeps the hover/hit area within the shape but due to the way gradients are rendered by browsers, it isn't very clean. Thought of leaving it here just in-case you find it useful.

body {
  background: gray;
  font-family: sans-serif;
}
.more-skewed {
  display: inline-block;
  position: relative;
  color: white;
  text-decoration: none;
  border: solid 2px white;
  border-right: none;
  box-sizing: border-box;
  padding: 15px 40px;
  letter-spacing: 3px;
  transition: all 1s linear;
  background: linear-gradient(245deg, transparent 9px, white 10px), linear-gradient(295deg, transparent 9px, white 10px);
  background-size: 0% 50%;
  background-position: top right, bottom right;
  background-repeat: no-repeat;
}
.more-skewed:before {
  content: '';
  position: absolute;
  left: 100%;
  margin-left: -7px;
  top: -2px;
  bottom: 50%;
  transform: skewX(25deg);
  width: 15px;
  background: linear-gradient(white, white);
  background-size: 3px 100%;
  background-repeat: no-repeat;
  background-position: top right;
  transition: all 1s 1s linear;
}
.more-skewed:after {
  content: '';
  position: absolute;
  left: 100%;
  margin-left: -7px;
  bottom: -2px;
  top: 50%;
  transform: skewX(-25deg);
  width: 15px;
  background: linear-gradient(white, white);
  background-size: 3px 100%;
  background-repeat: no-repeat;
  background-position: top right;
  transition: all 1s 1s linear;
}
.more-skewed:hover {
  color: black;
  background-size: 100% 50%;
  transition: all 1s 1s linear;
}
.more-skewed:hover:before,
.more-skewed:hover:after {
  color: black;
  background-size: 100% 100%;
  transition: all 1s linear;
}
<a class="more-skewed" href="#">MORE</a>

2 of 3
1

Please check below arrow code with transition, hope it help.

Thanks

HTML

<a class="arrow_box">
MORE
</a>

CSS

body {
  background: gray;
  font-family: sans-serif;
}
.arrow_box {
    position: relative;
    background: gray;
    border: 2px solid #ffffff;
  display:inline-block;
  padding: 15px 40px;
  letter-spacing: 3px;
  color:#FFF;
  transition:0.4s;
}
.arrow_box:after, .arrow_box:before {
    left: 100%;
    top: 50%;
    border: solid transparent;
    content: " ";
    height: 0;
    width: 0;
    position: absolute;
    pointer-events: none;
  transition:0.4s;
}

.arrow_box:after {
    border-color: rgba(128, 128, 128, 0);
    border-left-color: gray;
  border-width: 24px;
  margin-top: -24px;
}
.arrow_box:before {
    border-color: rgba(255, 255, 255, 0);
    border-left-color: #ffffff;
    border-width: 26px;
  margin-top: -26px;
  margin-left: 2px;
}
.arrow_box:hover{
  color:#000;
  background:#FFF;
}
.arrow_box:hover:after{
  border-left-color: #FFF;
}

Check fiddle here

Find elsewhere
🌐
FreeFrontend
freefrontend.com › css-arrows
69 CSS Arrows
January 21, 2026 - A technically advanced use of ::before and ::after pseudo-elements to create an arrow. jQuery toggles the .right class, and CSS animates the left and transform: rotate() properties of the pseudo-elements, creating a “switch” or 3D flip effect. ... See the Pen Arrow Icon Animation. ... A “snake” arrow style loader animation where each circle smoothly changes color using @keyframes, and animation-delay sets an offset for each element, creating a running wave effect. ... See the Pen Arrow Keyframes Animation. A minimalist “back to top” button featuring a color-swipe fill effect and smooth arrow reshaping using pure CSS.
🌐
Csslab
csslab.app › buttons › arrow-button
Arrow Button - CSSLab
Solid button with arrow hover animation View a the source code of a button component, made for CSSLab
🌐
Flatifycss
flatifycss.com › docs › components › buttons › arrow-button
Arrow button | FlatifyCSS
<button class="button arrow-button" aria-label="Arrow button"/></button> <button class="button arrow-button arrow-top" aria-label="Arrow button"/></button> <button class="button arrow-button arrow-left" aria-label="Arrow button"/></button> <button class="button arrow-button arrow-right" aria-label="Arrow button"/></button> Copy · To change the button size use size setter classes. These classes just set a font-size property so it is possible to change it yourself by writing custom CSS.
🌐
Presscoders
presscoders.com › make-a-css3-button-with-an-arrow-using-pseudo-elements
Make a CSS3 button with an arrow using Pseudo-elements | Press Coders
.button:after { content: url(images/white-rt-triangle.png); width: 8px; height: 10px; float: right; margin: 1px 0 0 10px; } Pretty simple, you add the image with the content property, then you style it just like any other element. Boom! Triangle button domination. Here’s the full CSS with ...
Top answer
1 of 3
16

Have you tried something using html/css??

#vert_menu{   overflow: hidden;  width: 100%; }
#vert_menu li{  float: left; }
#vert_menu a{
  padding: 8px 20px 8px 40px;
  float: left; text-align:center;
  text-decoration: none; font: normal 16px Myriad Pro, Helvetica, Arial, sans-serif;  text-shadow:0px 1px 0px #000;
  color: #e6e2cf;
  position: relative; text-shadow:1px 0 0 #000;
  background: #525252;  min-width:181px; width:auto
}

#vert_menu a::after,
#vert_menu a::before{
  content: "";
  position: absolute;
  top: 50%;
  margin-top: -19px;   
  border-top: 19px solid transparent;
  border-bottom: 19px solid transparent;
  border-left: 1em solid;
  right: -1em;
}
#vert_menu a::after{   z-index: 2;  border-left-color: #525252;   }
<ul id="vert_menu">
<li><a href="#" class="current">test</a></li>
</ul>

2 of 3
4

You may this in your HTML;

<div>
    <a href="#"><button>Button</button></a>
</div>

And this in your CSS

a {
    background: #950006;
    border: none;
    display: inline-block;
    height: 28px;
    line-height: 28px;
    position: relative;
    text-decoration: none;
    width: 100px
}

a:before{
    background: #950006;
    border: none;
    content: '';
    display: block;
    height: 20px;
    left: 90px;
    position: absolute;
    top: 4px;
    -moz-transform: rotate(45deg);
    -webkit-transform: rotate(45deg);
    -o-transform: rotate(45deg);
    transform: rotate(45deg);
    width: 21px;
}
a button {
    color: #fff;
    background: none;
    border: none;
    font-weight: bold;
    position: relative;
    width: 120px;
    height: 28px;
}

and will output a button like this:-

Here is a working Live Demo. The complete button is CLICKABLE. You may test the button by changing the background of the parent div.

Hope this helps.

🌐
CodePen
codepen.io › giana › pen › VLRmgG
CSS arrow buttons
HTML CSS JS Result · HTML Options · Format HTML · View Compiled HTML · Analyze HTML · Maximize HTML Editor · Minimize HTML Editor · Fold All · Unfold All · <h1>Sign-post arrow buttons</h1> <p><button class="btn-right"><a href="#">R...
🌐
Freebie Supply
freebiesupply.com › blog › css-arrows
CSS Arrows From CodePen - Freebie Supply
See the Pen Curved CSS Arrow by zomgbre (@zomgbre) on CodePen. Elastic left and right arrows made for React & GSAP with SVGs. See the Pen Elastic Arrow Buttons (React & GSAP) by asistapl (@asistapl) on CodePen.
🌐
CodePen
codepen.io › jc111345 › details › YxWZGa
CSS button with right arrow (overlapping)
Easy way to make an arrow-button with just CSS and HTML, no extra markup, it just uses an anchor tag, also has a rollover color working in the example...
🌐
Stack Overflow
stackoverflow.com › questions › 73423623 › how-do-i-make-an-arrow-shaped-button-with-css
How do I make an arrow shaped button with css? - Stack Overflow
<html> <head> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.1.2/css/all.min.css" integrity="sha512-1sCRPdkRXhBV2PBLUdRb4tMg1w2YPf37qatUFeS7zlBy7jJI8Lf4VHwWfZZfpXtYSLy85pkm9GaYVYMfw5BC1A==" crossorigin="anonymous" referrerpolicy="no-referrer" /> </head> <body> <button><i class="fa-solid fa-angles-right"></i></button> </body> </html> ... button, li { font-size: 40px; font-weight: bold; } li { list-style: none; } ul li:before { content: '» ➫ ➾'; margin: 5px; } <button>button ➵</button> <ul> <li>one</li> <li>two</li> </ul> ... Aside from the character based options in the other answers, you can also make an arrow shape, or any other shape, for your button by using a background image.
🌐
Bootstrap
icons.getbootstrap.com › icons › arrow-right
Arrow right · Bootstrap Icons
Button Button Button · Download the SVG to use or edit. Download SVG · Using the web font? Copy, paste, and go. <i class="bi bi-arrow-right"></i> Unicode: U+F138 · CSS: \F138 · JS: \uF138 · HTML: &#xF138; Paste the SVG right into your project's code.
🌐
CodePen
codepen.io › MaryG › pen › WbvRrz
css-arrows
HTML CSS JS Result · HTML Options · Format HTML · View Compiled HTML · Analyze HTML · Maximize HTML Editor · Minimize HTML Editor · Fold All · Unfold All · <div class="button-up"></div> <div class="button-down"></div> <div class="arrow-right"></div> <div class="arrow-left"></div> <div class="long-arrow-right"></div> <div class="long-arrow-left"></div> <div class="triangle-bottom"></div> <div class="triangle-top"></div> <div class="triangle-right"></div> <div class="triangle-left"></div> !