gpt4 book ai didi

html - 将模拟底部边框应用于旋转的 div

转载 作者:太空狗 更新时间:2023-10-29 12:32:57 26 4
gpt4 key购买 nike

我目前正在使用 CSS3 rotate 值来为模态框提供箭头外观。我现在处于需要创建带有底部边框的完整箭头的情况。由于这只是一个旋转了 45° Angular 的 div,因此将另一个 border 应用于两侧的任何一侧都不能解决问题。

我的第一个想法是对 div 的 :after 伪选择器应用一些样式并使其垂直居中。由于某种原因,它继承了旋转值。我尝试将值设置为 none 并尝试手动调整旋转 Angular 但无济于事。关于如何使此边框水平重置有任何想法吗?

根据 Harry 的建议,我将 :after 选择器的 Angular 设置为 -45deg 并将 top 值设置为 50%。现在唯一的问题是它没有完全扩展到div的左右两侧。有什么想法吗?

.arrow {
background-color: transparent;
border-top: 2px solid #c7c7c7;
border-left: 2px solid #c7c7c7;
position: relative;
height: 18px;
width: 18px;

-moz-transform: rotate(45deg);
-ms-transform: rotate(45deg);
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
}

.arrow:after {
content: "";
background: #c7c7c7;
display: inline-block;
position: absolute;
top: 50%;
height: 2px;
width: 100%;

-moz-transform: rotate(-45deg);
-ms-transform: rotate(-45deg);
-webkit-transform: rotate(-45deg);
transform: rotate(-45deg);
}
<div class="arrow"></div>

最佳答案

使用 CSS 转换:

您可以使用以下代码段中采用的方法创建带底部边框的完整箭头。在这里,箭头是由 :after 元素创建的,而底部的行是使用父容器创建的。旋转轴是固定的,使用相同的 transform-origin 父子。

使用这种方法创建的形状应该能够适应所有尺寸,而无需对定位进行任何调整(将箭头悬停在片段中以查看实际效果)。

.arrow {
position: relative;
height: 25px;
width: 25px;
border-bottom: 2px solid #c7c7c7;
}
.arrow:after {
position: absolute;
content: "";
bottom: -1px; /* half of border top */
left: -2px; /* equal to border left */
height: calc(100% / 1.414); /* division by 1.414 because parent has to be larger */
width: calc(100% / 1.414);
border-top: 2px solid #c7c7c7;
border-left: 2px solid #c7c7c7;
transform-origin: left bottom;
transform: rotate(45deg);
}

/* Just for demo */
.arrow { transition: all 1s; }
.arrow:hover { height: 50px; width: 50px; }
<div class="arrow"></div>


使用 SVG:

您还可以查看使用 SVG 创建此类形状,因为这样做更容易,而且输出也是响应式的。我们只需要一个 path 元素,它通过连接 d 属性中提供的坐标来创建形状。 M 命令将笔移动到指定的坐标,而 L 命令从前一点到命令后指定的点画线。

svg {
width: 25px;
height: 18px;
}
path {
stroke: #c7c7c7;
stroke-width: 2;
fill: transparent;
}

/* Just for demo */
svg{ transition: all 1s; }
svg:hover{ width: 50px; height: 36px; }
<svg viewBox='0 0 50 50' preserveAspectRatio='none'>
<path id='arrowhead' d='M0,48 L25,2 50,48z' vector-effect='non-scaling-stroke'/>
</svg>


使用渐变:

下面使用 linear-gradient 的方法也可以工作,并且只需要一个元素,但它对浏览器的支持较少,并且仅适用于固定大小的容器。由于渐变使用百分比值,底部边框会随着容器尺寸的变化而变粗(因此使其对响应式设计无用)。

.arrow {
position: relative;
height: 18px;
width: 18px;
border-top: 2px solid #c7c7c7;
border-left: 2px solid #c7c7c7;
background: linear-gradient(to left top, transparent 50%, #c7c7c7 50%, #c7c7c7 60%, transparent 60%);
transform: rotate(45deg);
}

/* Just for demo */
.arrow { transition: all 1s; }
.arrow:hover { height: 50px; width: 50px; }
<div class="arrow"></div>

关于html - 将模拟底部边框应用于旋转的 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33153158/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com