css arrow with bottom border [duplicate]

2019-07-14 05:33发布

This question already has an answer here:

I need to create an arrow inside a div. I have created the arrow but need to get the visul effect with border as shown as below

enter image description here

Demo of the tried sample http://jsfiddle.net/rLZkf/4/

div {
  margin: 20px;
  height: 200px;
  width: 200px;
  background-color: #c1c1c1;
  border: #000 solid 2px;
  background-image: -webkit-linear-gradient(135deg, transparent 75%, #fff 75%), -webkit-linear-gradient(45deg, transparent 75%, #fff 75%);
  background-image: -moz-linear-gradient(135deg, transparent 75%, #fff 75%), -moz-linear-gradient(45deg, transparent 75%, #fff 75%);
  background-image: -ms-linear-gradient(135deg, transparent 75%, #fff 75%), -ms-linear-gradient(45deg, transparent 75%, #fff 75%);
  background-image: -o-linear-gradient(135deg, transparent 75%, #fff 75%), -o-linear-gradient(45deg, transparent 75%, #fff 75%);
  background-image: linear-gradient(135deg, transparent 75%, #fff 75%), linear-gradient(45deg, transparent 75%, #fff 75%);
  background-position: 30px 0, 0 0;
  background-repeat: no-repeat;
  background-size: 30px 30px;
}
<div></div>

2条回答
Fickle 薄情
2楼-- · 2019-07-14 06:10

You can use CSS3 rotate property for this. Write like this:

div {
    margin:20px;
    height: 200px;
    width: 200px;
    background-color: #c1c1c1;
    border:#000 solid 2px;
    position:relative;
}
div:after{
    content:'';
    width:20px;
    height:20px;
    background:#fff;
    position:absolute;
    -moz-transform:rotate(45deg);
    -webkit-transform:rotate(45deg);
    transform:rotate(45deg);
    top:-11px;
    left:10px;
    border-right:#000 solid 2px;
    border-bottom:#000 solid 2px;
} 

Check this http://jsfiddle.net/rLZkf/6/

UPDATED

Check this http://jsfiddle.net/rLZkf/9/

查看更多
戒情不戒烟
3楼-- · 2019-07-14 06:12

Personally, I quite like to use a different approach to the chosen answer here.

Using the principle explained on https://css-tricks.com/snippets/css/css-triangle/ for example, you can use two pseudo elements to create the effect you're after.

You will basically create two triangles using this border trick: one will be the same colour as your page background and the other will be the same as your container border and will act as a 'border' to the first triangle.

You then just offset the position of the two triangles so they're on top of your container border and that's it.

.container:after,
.container:before {
  border-left: 10px solid transparent;
  border-right: 10px solid transparent; 
  content: " ";
  left: 10px; 
  margin-top: -1px;
  position: absolute;
}

.container:before {
  border-top: 10px solid #000;
  top: 1px; 
}

.container:after {
  border-top: 10px solid #fff;
  top: 0px; 
}

Of course you can just wrap the whole thing in a mixin if you use Sass or similar and pass it the colours / arrow size.

See http://codepen.io/arnaudvalle/pen/EjgYrp for a quick example

查看更多
登录 后发表回答