下面是css3实现六边形边框的攻略,分成以下几个部分:
1.初步准备
首先,我们需要定义一个六边形的容器(div):
<div class="hexagon"></div>
然后,给这个容器定义一些基本样式:
.hexagon {
width: 120px;
height: 100px;
background-color: #eee;
position: relative;
margin: 0 auto;
}
现在,我们已经定义了一个基本的六边形容器,接下来我们需要对这个容器进行进一步的处理。
2.使用clip-path创建六边形
现在,我们要使用clip-path
创建一个六边形。clip-path
是一个CSS属性,它可以根据指定的形状,将元素的可见区域剪裁成某种形状。
.hexagon {
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
}
使用clip-path
属性后,我们的六边形容器的边缘就变成了六边形的形状。
3.使用伪元素绘制六边形边框
现在,我们已经有了一个基本的六边形,接下来我们需要绘制六边形的边框。这里,我们可以使用伪元素(pseudo-elements)来绘制。
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
}
这里我们定义了两个伪元素::before
和::after
,并使用clip-path
为它们定义成六边形的形状。现在,我们的容器周围已经框起了一个六边形的形状,但是边框会覆盖原始的背景色,我们需要把边框变成透明的。接下来我们将透明边框添加到伪元素的样式中:
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
}
这样之后,我们的边框就变成了透明S的,现在我们需要将边框的另一个属性设置为颜色。
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
border-top-color: #f00;
}
现在,我们的边框已经变成了红色,但是我们只画了一个三角形的边框,我们需要将这个边框绕着六边形旋转五次,形成六边形。接下来我们将前两行去掉,使用transform将边框旋转。
.hexagon::before,
.hexagon::after {
/*content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);*/
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
border-top-color: #f00;
transform: rotate(60deg);
}
这里我们将伪元素旋转了60度,接下来我们再将伪元素复制五次,每个伪元素旋转60度,就可以得到一个六边形的边框了。
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
border-top-color: #f00;
}
.hexagon::before {
transform: rotate(60deg);
}
.hexagon::after {
transform: rotate(-60deg);
}
.hexagon::before::before {
transform: rotate(120deg)
}
.hexagon::before::after {
transform: rotate(-60deg)
}
.hexagon::after::before {
transform: rotate(60deg)
}
.hexagon::after::after {
transform: rotate(-120deg)
}
现在,我们已经完成了一个六边形的边框,效果如下:
示例说明1
下面我们来看一个示例,如何在一个背景图片的上方绘制六边形边框。
先去掉原先六边形的背景色和边框:
.hexagon {
width: 120px;
height: 100px;
position: relative;
margin: 0 auto;
}
然后将六边形容器设置一个背景图片:
.hexagon {
/* width: 120px;
height: 100px; */
position: relative;
margin: 0 auto;
background: url('https://picsum.photos/120/100') center/cover no-repeat;
}
最后按照之前的步骤给六边形容器添加六边形边框即可:
.hexagon {
/* width: 120px;
height: 100px; */
position: relative;
margin: 0 auto;
background: url('https://picsum.photos/120/100') center/cover no-repeat;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
}
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
border-top-color: #f00;
}
.hexagon::before {
transform: rotate(60deg);
}
.hexagon::after {
transform: rotate(-60deg);
}
.hexagon::before::before {
transform: rotate(120deg)
}
.hexagon::before::after {
transform: rotate(-60deg)
}
.hexagon::after::before {
transform: rotate(60deg)
}
.hexagon::after::after {
transform: rotate(-120deg)
}
示例完成后,效果应该长成下面这样:
示例说明2
下面我们来看一下,如何在六边形边框内部绘制一张图片。
首先给我们的六边形容器添加一个父容器:
<div class="container">
<div class="hexagon"></div>
</div>
然后给容器添加一些基本样式:
.container {
width: 300px;
height: 260px;
margin: 0 auto;
background-color: #eee;
position: relative;
}
.hexagon {
width: 120px;
/* height: 100px; */
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
}
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
border-top-color: #f00;
}
.hexagon::before {
transform: rotate(60deg);
}
.hexagon::after {
transform: rotate(-60deg);
}
.hexagon::before::before {
transform: rotate(120deg)
}
.hexagon::before::after {
transform: rotate(-60deg)
}
.hexagon::after::before {
transform: rotate(60deg)
}
.hexagon::after::after {
transform: rotate(-120deg)
}
这样,我们就得到了一个包含背景颜色和六边形的容器。
接下来,就可以在六边形边框内部绘制图片了。我们可以在容器中添加一个图片元素,并将其定位在六边形容器的内部。
<div class="container">
<div class="hexagon"></div>
<img src="https://picsum.photos/120/100/?random" alt="">
</div>
然后,我们可以将这个图片元素绝对定位到容器的中心,使它居中对齐到六边形容器的中心。
.container {
width: 300px;
height: 260px;
margin: 0 auto;
background-color: #eee;
position: relative;
}
.hexagon {
width: 120px;
/* height: 100px; */
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
}
.hexagon::before,
.hexagon::after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
clip-path: polygon(50% 0, 100% 25%, 100% 75%, 50% 100%, 0 75%, 0 25%);
border: 10px solid transparent;
border-top-color: #f00;
}
.hexagon::before {
transform: rotate(60deg);
}
.hexagon::after {
transform: rotate(-60deg);
}
.hexagon::before::before {
transform: rotate(120deg)
}
.hexagon::before::after {
transform: rotate(-60deg)
}
.hexagon::after::before {
transform: rotate(60deg)
}
.hexagon::after::after {
transform: rotate(-120deg)
}
img {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
z-index: 999;
max-width: 100%;
max-height: 100%;
}
示例完成后,效果如下:
以上就是css3实现六边形边框的攻略,希望对您有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:css3实现六边形边框的实例代码 - Python技术站