如何使矩形的边框不同?

How to make rectangle's border different?

HTML:

<div class="rectangle">Some text</div>

CSS:

.rectangle {
    width: 300px;
    height: 80px;
    border: 5px solid red;
}

有什么方法可以让div看起来像照片中的样子吗?

如果只保留边框而不填充 div,您可以尝试使用 ::before::after

像这样:

.rectangle {
   width: 200px;
   height: 40px;
   position: relative;
   border-top: 2px solid red;
   border-bottom: 2px solid red;
   border-left: 2px solid red;
   -moz-border-radius: 3px 0 0 3px;
   -webkit-border-radius: 3px 0 0 3px;
   border-radius: 3px 0 0 3px;
   margin-left: 50px;
}
.rectangle::after {
   content: "";
   position: absolute;
   left: 100%;
   width: 0;
   height: 0;
   top: 2px;
   border-top: 18px solid transparent;
   border-left: 10px solid #fff;
   border-bottom: 17px solid transparent;
}
.rectangle::before {
   content: "";
   position: absolute;
   left: 100%;
   width: 0;
   top: -2px;
   height: 0;
   border-top: 22px solid transparent;
   border-left: 14px solid red;
   border-bottom: 22px solid transparent;
}
<div class="rectangle">Some text</div>

你必须使用伪 class after

.rectangle {
    position: relative;
    width:200px;
    height:40px;
    margin-left:40px;
    color:#FFFFFF;
    background-color:red;
    text-align:center;
    line-height:40px;
}
.rectangle:after {
    content:"";
    position: absolute;
    left: 100%;
    top:0px;
    width:0px;
    height:0px;
    border-top:20px solid transparent;
    border-left:40px solid red;
    border-bottom:20px solid transparent;
}
<div class="rectangle">Some text</div>

勾选CSS Shapes

#pointer {
  width: 200px;
  height: 40px;
  position: relative;
  background: red;
}

#pointer:after {
  position: absolute;
  left: 0;
  bottom: 0;
  width: 0;
  height: 0;
  border-left: 20px solid white;
  border-top: 20px solid transparent;
  border-bottom: 20px solid transparent;
}

#pointer:before {
  content: "";
  position: absolute;
  right: -20px;
  bottom: 0;
  width: 0;
  height: 0;
  border-left: 20px solid red;
  border-top: 20px solid transparent;
  border-bottom: 20px solid transparent;
}
<div id="pointer">


</div>

您可以使用 ::after and ::before 来实现结果。

.rectangle {
  width: 300px;
  height: 80px;
  border: 5px solid red;
  border-right: none;
  position: relative;
}

/* for the triangular shape */
.rectangle::after {
  content: "";
  position: absolute;
  right:-45px;
  bottom: 0;
  top:-5px;
  width: 0;
  height: 0;
  border-left: 45px solid red;
  border-top: 45px solid transparent;
  border-bottom: 45px solid transparent;
  z-index:1000;
}


/* for hiding the portion except the border 
 of the triangle shape */
.rectangle::before {
  content: "";
  position: absolute;
  right:-40px;
  bottom: 0;
  top:0;
  width: 0;
  height: 0;
  border-left: 40px solid white;
  border-top: 40px solid transparent;
  border-bottom: 40px solid transparent;
  z-index:1001;
}
<div class="rectangle">Some text</div>


如果您不需要类似边框的结构,那么您可以避免 ::before 部分并将背景颜色设置为主要 div。

.rectangle {
  width: 300px;
  height: 80px;
  border: 5px solid red;
  border-right: none;
  position: relative;
  background:red;
}

.rectangle::after {
  content: "";
  position: absolute;
  right:-45px;
  bottom: 0;
  top:-5px;
  width: 0;
  height: 0;
  border-left: 45px solid red;
  border-top: 45px solid transparent;
  border-bottom: 45px solid transparent;
}
<div class="rectangle">Some text</div>

更多形状参考:CSS Tricks

您可以使用 :before:after

.rectangle {
    width: 300px;
    height: 80px;
    border: 5px solid blue;
    border-right: none;
    position: relative;
}
.rectangle::before {
    content: '';
    border-top: 5px solid blue;
    width: 120px;
    position: absolute;
    right: -115px;
    bottom: 16px;
    transform: rotate(-21deg);
}
.rectangle::after {
    content: '';
    border-top: 5px solid blue;
    width: 120px;
    position: absolute;
    right: -115px;
    top: 16px;
    transform: rotate(21deg);
}
<div class="rectangle">Some text</div>

考虑通过声明 transform: rotate() 属性 值来旋转 伪元素,如下面嵌入的代码片段所示。

作为实现声明 border 属性 规则的相同行为的替代方法,此方法允许仅使用一个 伪-以直观的方式在元素上声明边框元素

以这种方式旋转元素还可以让您选择用纯色填充元素 - 让您可以更自由地进行自定义。

代码片段演示:

.rectangle {
    width: 300px;
    height: 80px;
    border: 5px solid red;
    /* additional */
    border-right: 0;
    box-sizing: border-box;
    position: relative; /* required */
}

/* Additional */
.rectangle:after {
    content: "";
    position: absolute;
    width: 55px;
    height: 55px;
    border-right: 5px solid red;
    border-top: 5px solid red;
    box-sizing: inherit;
    right: -28px;
    top: 7px;
    transform: rotate(45deg);
}
<div class="rectangle">Some text</div>