- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
当我知道每个 Angular 的度数时,如何使用 css 创建四边形。
我已经尝试通过变换和倾斜重新创建一个四边形。
但是,这并不是很好。
这是我尝试存档的内容。
具体要求是:
以此为背景的一个 div,采用一种颜色。图像上只是构造线。它应该是具有这些 Angular 实心四边形。
这是我的第一个想法:
transform: rotate(-45deg) skew(27.5deg, 62.5deg)
transform-origin: top center;
最佳答案
我会考虑多个背景来实现这一点,我只需要找到元素的宽度/高度。根据您的说明,我们有这个:
由此我们可以得到如下公式:
tan(alpha) = W/H
和
tan(beta/2) = H/W
我们只需要使用其中之一,您会注意到没有一种解决方案是合乎逻辑的,因为您只需要保持 H
之间的比率即可。和 W
我们元素的宽度将是 2*W
及其高度2*H
.
自 H/W
也与 2*H/2*W
相同我们可以简单地认为 width = tan(alpha)*height
.box {
height:var(--h);
width:calc(1.92098213 * var(--h)); /* tan(62.5)xH */
background:
linear-gradient(to bottom right,transparent 49%,red 50%) top left,
linear-gradient(to top right,transparent 49%,red 50%) bottom left,
linear-gradient(to bottom left ,transparent 49%,red 50%) top right,
linear-gradient(to top left ,transparent 49%,red 50%) bottom right;
background-size:50% 50%;
background-repeat:no-repeat;
}
<div class="box" style="--h:50px;"></div>
<div class="box" style="--h:100px;"></div>
<div class="box" style="--h:200px;"></div>
如果你只想要边框,你可以调整渐变:
.box {
height:var(--h);
width:calc(1.92098213 * var(--h)); /* tan(62.5)xH */
background:
linear-gradient(to bottom right,transparent 49%,red 50%,transparent calc(50% + 2px)) top left,
linear-gradient(to top right,transparent 49%,red 50%,transparent calc(50% + 2px)) bottom left,
linear-gradient(to bottom left ,transparent 49%,red 50%,transparent calc(50% + 2px)) top right,
linear-gradient(to top left ,transparent 49%,red 50%,transparent calc(50% + 2px)) bottom right;
background-size:50% 50%;
background-repeat:no-repeat;
}
<div class="box" style="--h:50px;"></div>
<div class="box" style="--h:100px;"></div>
<div class="box" style="--h:200px;"></div>
使用transform的思路是依赖rotateX()
为了在视觉上降低高度以保持先前定义的公式。所以我们从 Width=height
开始(一个正方形)然后我们像下面这样旋转:
这是侧面图。绿色是我们旋转的元素,红色是初始元素。很明显,我们将看到高度 H1
执行旋转后,我们有这个公式:
cos(angle) = H1/H
我们已经有了tan(alpha)=W/H1
所以我们会有
cos(angle) = W/(H*tan(alpha))
和H=W
因为我们最初定义了一个正方形所以我们将有cos(angle) = 1/tan(alpha) --> angle = cos-1(1/tan(alpha))
.box {
width:150px;
height:150px;
background:red;
margin:50px;
transform:rotateX(58.63017731deg) rotate(45deg); /* cos-1(0.52056)*/
}
<div class="box">
</div>
我们也可以使用 rotateY()
应用相同的逻辑在 beta 大于 90deg
的情况下更新宽度和 alpha 小于 45deg
.在这种情况下,我们将有 W < H
和 rotateX()
不会帮助我们。
数学可以很容易地证实这一点。什么时候alpha
小于 45deg
tan(alpha)
将小于 1
因此1/tan(alpha)
将大于 1
和 cos
仅在 [-1 1]
之间定义所以没有 Angular 我们可以使用 rotateX()
这里有一个动画来说明:
.box {
width:100px;
height:100px;
display:inline-block;
background:red;
margin:50px;
animation:change 5s linear infinite alternate;
}
.alt {
animation:change-alt 5s linear infinite alternate;
}
@keyframes change {
from{transform:rotateX(0) rotate(45deg)}
to{ transform:rotateX(90deg) rotate(45deg)}
}
@keyframes change-alt {
from{transform:rotateY(0) rotate(45deg)}
to{ transform:rotateY(90deg) rotate(45deg)}
}
<div class="box">
</div>
<div class="box alt">
</div>
关于css - 如何创建具有特定度数的四边形(菱形)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55148401/
我确实遇到了这个问题。 我有一个可以是任何形状的多边形(四边形)。当我的鼠标位于多边形内时,我需要找到鼠标所在位置(四边形内)的 x,y 值,就好像多边形是完美的正方形一样。进一步解释;我有一个 32
我的问题是关于 OpenGL 和法线,我理解它们背后的数学原理,并且我取得了一些成功。 我在下面附加的函数接受一个交错的顶点数组,并计算每 4 个顶点的法线。这些代表具有相同方向的 QUADS。据我了
我想检测图像中的矩形。 我使用 cv2.findContours() 和 cv2.convexHull() 过滤掉不规则多边形。 之后,我将使用船体长度来判断轮廓是否为矩形。 hull = cv2.c
有谁知道将 vector 路径转换为由三角形/四边形面组成的描边路径的好算法?理想情况下使用圆线连接。 基本上,我试图绘制一条粗路径,其颜色基于随路径距离变化的值。我正在考虑将路径转换为三角形/四边形
我有 WebGL/OpenGL 的基本知识,但不了解 gl.bufferSubData。所以我的目标是创建一个 SpriteBatch 类,就像这个问题 First Question 一样。由于我认为
我用 OpenGL 渲染两个具有相等 z 的四边形。当我启用 DEPTH 时,我得到以下图像,但当它关闭时,我得到我需要的一个水果而不是另一个。是否可以按我的意愿绘制具有相等 z 的四边形?我的 OG
我一直在尝试让模板测试在我的 OpenTK 2D 游戏中工作,但没有成功 - 我只想在模板缓冲区中绘制低于 say 1 值的纹理部分。花了很长时间阅读模板及其工作原理,但在 C# 中找不到一个示例。下
我有一个 2D 空间,其中包含任意数量的对象(它们是圆形或四边形 - 这无关紧要),在每个时间刻度中具有不同的大小和不同的位置。我想为任何基元(示例图片中的绿色圆圈)找到一个 y 位置,使其不与任何其
我是一名优秀的程序员,十分优秀!