【问题标题】:Is it possible to draw a border with 1 angled corner? [duplicate]是否可以绘制带有 1 个角的边框? [复制]
【发布时间】:2018-02-06 06:57:27
【问题描述】:

我希望在 div 周围画一个实心边框,唯一的问题是我希望 1 个角是“狗耳朵的”(见附图)。

这可以在 CSS 中实现吗?我找到了 clip-path,但这似乎并没有自愿接受边框。

请注意,我还想用内容填充这个区域 - 文本/图像。

【问题讨论】:

  • 你试过 SVG 吗?
  • @JamesAMohler 我没有,您是否建议使用 SVG 作为 div 的背景图像?
  • 我是这么建议的,但我发现那里有很多更好的答案。我会推荐一个基于 CSS 的答案

标签: html css css-shapes


【解决方案1】:

这是一个线性渐变的解决方案:

.box {
  height:100px;
  width:200px;
  background:linear-gradient(to bottom,red 50%,transparent 0) 0 0/calc(100% - 20px) 2px no-repeat,
  linear-gradient(to bottom,transparent 50%,red 0) 0 100%/100% 2px no-repeat,
  linear-gradient(to right,red 50%,transparent 0) 0 0/2px 100% no-repeat,
  linear-gradient(to right,transparent 50%,red 0) 100% 20px/2px 100% no-repeat,
  linear-gradient(to top right,transparent 50%,red 50%,red calc(50% + 1px),transparent calc(50% + 2px)) 100% 0/20px 20px no-repeat;
}
<div class="box">
</div>

对于剪辑路径解决方案,您可以这样做:

.box {
  height:100px;
  width:200px;
  background:linear-gradient(to top right,transparent 50% ,red 0) 100% 0/20px 20px no-repeat;
  border:2px solid red;
  clip-path:polygon(1px 1px,1px calc(100% - 1px),calc(100% - 1px) calc(100% - 1px),calc(100% - 1px) calc(100% - 84px), calc(100% - 20px) 1px);
}
<div class="box">
</div>

这是另一种使用伪元素和倾斜变换的方式:

.box {
  height: 80px;
  width: 200px;
  margin-top: 50px;
  border: 1px solid red;
  border-top: none;
  position: relative;
}

.box:before {
  content: "";
  position: absolute;
  left: -1px;
  right: 50%;
  top: -20px;
  height: 20px;
  border-top: 1px solid red;
  border-left: 1px solid red;
}

.box:after {
  content: "";
  position: absolute;
  right: -1px;
  left: 50%;
  top: -20px;
  height: 20px;
  border-top: 1px solid red;
  border-right: 1px solid red;
  transform: skew(45deg);
  transform-origin: bottom right;
}
<div class="box">
</div>

【讨论】:

  • 我正要回答同样的问题。你应该模糊一下俚语部分,让它看起来更好;):codepen.io/anon/pen/NyrYKZ
  • 非常有趣。那么线性渐变是否只是“覆盖”了右上角并绘制了一条斜线?
  • @brendo234 好吧,我为每条线使用了 5 个渐变... 4 个直线和一个与对角线方向成角度的渐变 :) 正如您所看到的,我只是为这个渐变指定了 2px 的颜色
  • @G-Cyr 喜欢更新吗? :)
  • @brendo234 如果有兴趣,我还添加了更多方法;)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多