仅使用CSS创建三角形

时髦的健康

我正在开发一个自适应Web应用程序,需要创建2个单独的内容区域,如下所示, 参考图片

到目前为止,我尝试过

border-right: 30px solid transparent;
border-bottom: 30px solid #4c4c4c; 
height: 100%;
width: 100%;
position: fixed;

但是,不幸的是无法创建一个三角形。

除了使用border属性,还有其他方法可以使用CSS创建三角形,并且可以将内容完全包裹在div中吗?

任何帮助将不胜感激。

哈里

我相信您正在寻找带有边界且中间有透明切口的三角形(现有答案似乎都没有解决),因此这里是一个示例。这绝对是可以实现的,但需要花很多精力。

使用CSS转换:

下面的代码段使用伪元素并进行转换以产生三角形效果。输出是响应式的,但是偏斜变换的使用意味着如果容器的形状变为矩形,则偏斜角将需要修改,并且需要对定位属性进行更多调整。

.container {
  position: relative;
  overflow: hidden;
  height: 200px;
  width: 200px;
}
.div-1,
.div-2 {
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
  overflow: hidden;
}
.div-1 {
  top: calc(-100% - 5px);
  transform: skewY(45deg);
  transform-origin: left top;
  border-bottom: 2px solid;
}
.div-1:after {
  position: absolute;
  content: '';
  height: calc(100% - 2px);
  width: calc(100% - 2px);
  top: calc(100% + 7px);
  left: 0px;
  transform: skewY(-45deg);
  transform-origin: left top;
  border: 1px solid;
}
.div-2 {
  top: 5px;
  transform: skewY(45deg);
  transform-origin: left bottom;
  border-top: 1px solid;
}
.div-2:after {
  position: absolute;
  content: '';
  height: calc(100% - 7px);
  width: calc(100% - 7px);
  top: 0px;
  left: 0px;
  transform: skewY(-45deg);
  transform-origin: left bottom;
  border: 1px solid;
}
* {
  box-sizing: border-box;
}

/* just for demo */
.container{
  transition: all 1s;
}
.container:hover{
  width: 400px;
  height: 400px;
}
body{
  background: radial-gradient(circle at center, aliceblue, mediumslateblue);
  min-height: 100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='container'>
  <div class='div-1'></div>
  <div class='div-2'></div>
</div>


使用渐变:

另一种方法是使用几个线性渐变作为背景图像,如下面的代码片段所示。但是这里也有很多缺点。(1)目前,梯度对浏览器的支持非常差。(2)角度梯度往往会产生锯齿状的线条,需要进行平滑处理。(3)您在所讨论的图像中特别提到了2个div元素,我想您希望在其中包含内容,在这种情况下,这需要额外的工作。

.container {
  position: relative;
  overflow: hidden;
  height: 200px;
  width: 300px;
  background: linear-gradient(to top right, transparent calc(50% + 2px), black calc(50% + 2px), black calc(50% + 4px), transparent calc(50% + 4px)), linear-gradient(to bottom left, transparent calc(50% + 2px), black calc(50% + 2px), black calc(50% + 4px), transparent calc(50% + 4px)) ;
    }
.container:before{
  position: absolute;
  content: '';
  height: calc(100% - 6px);
  width: calc(100% - 6px);
  left: 4px;
  border-top: 2px solid black;
  border-right: 2px solid black;
}
.container:after{
  position: absolute;
  content: '';
  height: calc(100% - 6px);
  width: calc(100% - 6px);
  top: 4px;
  border-left: 2px solid black;
  border-bottom: 2px solid black;
}
/* just for demo */
.container{
  transition: all 1s;
}
.container:hover{
  width: 700px;
  height: 400px;
}
body{
  background: radial-gradient(circle at center, aliceblue, mediumslateblue);
  min-height: 100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='container'>
</div>


使用SVG:

所有这些使我想到了我的建议,那就是使用SVG创建此类形状。它们仅需使用path元素即可轻松创建,易于维护并且具有天生的响应能力。

.container {
  position: relative;
  height: 300px;
  width: 200px;
}
svg {
  position: absolute;
  top: 0px;
  left: 0px;
  height: 100%;
  width: 100%;
}
svg path {
  fill: transparent;
  stroke: black;
}
/* just for demo */

.container {
  transition: all 1s;
}
.container:hover {
  height: 400px;
  width: 700px;
}
body {
  background: radial-gradient(circle at center, aliceblue, mediumslateblue);
  min-height: 100vh;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
<div class='container'>
  <svg viewBox='0 0 100 100' preserveAspectRatio='none'>
    <path d='M4,2 L98,2 98,96 4,2z M2,4 L2,98 96,98 2,4z' vector-effect='non-scaling-stroke' />
  </svg>
</div>

注意:使用上述任何方法(或其他答案中给出的方法),您都无法使内容保留在这些三角形的边界内。可以在其上放置文本,但是除非shape-inside完全实现CSS Shapes模块的属性,否则文本不能包含在这些边界内

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何仅使用CSS创建三角形动画

来自分类Dev

如何仅使用 css 创建一个三角形的 div?

来自分类Dev

在CSS中创建三角形标记

来自分类Dev

在CSS中创建三角形标记

来自分类Dev

创建边框三角形CSS

来自分类Dev

如何使用JavaFX创建三角形?

来自分类Dev

如何使用JavaFX创建三角形?

来自分类Dev

使用CSS,Canvas或SVG的三角形

来自分类Dev

仅使用CSS在div中插入三角形

来自分类Dev

使用CSS使仅三角形具有悬停效果

来自分类Dev

如何使用CSS创建可缩放至父div高度的三角形?

来自分类Dev

使用css在矩形右侧创建动态三角形大小

来自分类Dev

使用CSS边框的三角形和倒三角形

来自分类Dev

使用CSS边框的三角形和倒三角形

来自分类Dev

三角形CSS中的三角形

来自分类Dev

OpenGL:创建彩色三角形

来自分类Dev

在UIButton中创建三角形

来自分类Dev

为三角形div创建阴影

来自分类Dev

创建全边框三角形div

来自分类Dev

创建全边框三角形div

来自分类Dev

仅传递三角形的边长是否足以在WebGL中绘制三角形?

来自分类Dev

React Native中的CSS三角形

来自分类Dev

带纯css边框的三角形

来自分类Dev

CSS三角形被切断

来自分类Dev

带边框的CSS三角形

来自分类Dev

基于角度的CSS三角形/角度

来自分类Dev

CSS三角形的边框半径

来自分类Dev

悬停并单击CSS三角形

来自分类Dev

盒子内CSS中的三角形