javascript - 如何用 CSS 或 JS 用矩形做 9 级

标签 javascript html css svg

我想在矩形周围有一个自定义 CSS 边框 纹理,例如手绘交叉影线。理论上,我会创建一个“9 比例”的矩形切片,因此无论它的尺寸是多少,它总是有边框。

enter image description here

纯粹在 CSS 中可以实现这样的事情吗?或者,如果没有,那么您如何在 JS 中完成此操作?我正在考虑使用交叉影线创建一个文本输入,它周围有一种内部阴影边界效果。想知道这是否/如何在纯 CSS 中完成,或者如果不是纯 CSS 那么在 JS 中完成。

旁注,刚刚发现border-image ,不确定这是否相关。

我想让边框看起来基本上是这样的:

enter image description here

最佳答案

我会为此使用 border-image

#border-image {
  font-size: 20px;
  width:300px;
  border: 10px solid black;
  padding: 35px;
  margin: 2em;
  
  
  border-image-source: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22'  viewBox='0 0 22 22'%3E%3Cpath d='M2,5 Q2,2 5,2L17,2 Q20,2 20,5L20,17 Q20,20 17,20L5,20 Q2,20 2,17Z' stroke='red' fill='none' /%3E%3C/svg%3E");
  border-image-slice: 5;
  border-image-repeat: round;
  border-image-width: 22px;
}

}
<div id="border-image" class="bi">
</div>

对于 border-image-source 我使用的是 SVG 元素:

<svg id="svg" viewBox='0 0 22 22' width='200'>
<path d='M2,5 Q2,2 5,2L17,2 Q20,2 20,5L20,17 Q20,20 17,20L5,20 Q2,20 2,17Z' stroke='red' fill='none'  />
</svg>

如果你想使用这个 svg 元素作为背景,你可以将它编码成这样:

"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='22' height='22'  viewBox='0 0 22 22'%3E%3Cpath d='M2,5 Q2,2 5,2L17,2 Q20,2 20,5L20,17 Q20,20 17,20L5,20 Q2,20 2,17Z' stroke='red' fill='none' /%3E%3C/svg%3E"

为了将 svg 编码为数据 uri,您可以使用此 URL-encoder for SVG

我为 border-image-slice 使用的值是 5,因为这是圆 Angular 的大小。

Codrops border-image

在上图中,这将是 C1、C2、C3 和 C4 的大小 图片来自这篇文章:border-image

看这个例子:

svg{border:1px solid}
line{stroke:black; stroke-width:.1}
<svg id="svg" viewBox='0 0 22 22' width='200'>
<path d='M2,5 Q2,2 5,2L17,2 Q20,2 20,5L20,17 Q20,20 17,20L5,20 Q2,20 2,17Z' stroke='red' fill='none'  />
  <g id="lines1">
  <line class="h" x1="0" x2="22" y1="5" y2="5"></line>
  <line class="h" x1="0" x2="22" y1="17" y2="17"></line>

  <line class="v" x1="5" x2="5" y1="0" y2="22"></line>
  <line class="v" x1="17" x2="17" y1="0" y2="22"></line>
</g>
</svg>

我正在使用 border-image-width: 22px; 但粗略地说,您可以更改它:

请阅读更多关于 border-image 的信息

关于javascript - 如何用 CSS 或 JS 用矩形做 9 级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57264909/

相关文章:

javascript - 使整个父 div 成为可点击区域

html - Bootstrap CSS 到子 div

css - 在不破坏其目的的情况下为 960.gs 框架添加额外的余量

javascript - 当通过 jQuery 为元素动态添加类时,未应用 CSS 样式

Javascript - 选择 DIV 内的 H1

javascript - 如何在 vue js html 中使用数组检查 v-if 条件?

javascript - 如何制作根据时区变化的日期时间字符串?

javascript - 如何创建 blob : url for local file with FF ext

html - 在 ios/safari/iPhone 上设置 HTML 选择标签的样式

javascript - 如何识别网站中js/css文件包含的来源