div 隐藏_CSS实现六边形Div图片展示效果

一. 效果图

3b3f4f5c53fd6cfe11399eb46dc931fb.png

二. 六边形效果涉及到的知识点

1. transform: rotate(120deg); // 元素旋转

2. overflow: hidden; // 超出隐藏

3. visibility: hidden; // 占位隐藏

注:visibility: hidden; 与 display:none; 相似,但不同的是,它虽然隐藏了,但依然会在网页中占有位置。

三. 原理讲解

我们要用到 3 层 div 进行旋转来得到这个效果(注: 3 层 div 的宽高是一样的)。

最外层 div.boxF 旋转 120 度,第二层 div.boxS 旋转 -60 度,第三层 div.boxT 再旋转 -60 度,到第三层时刚好回正,我们的图片就放在第 3 层的 div 背景中。

基本结构如下:

<div class="boxF">
    <div class="boxS">
         <div class="boxT" style="background-image: url(img/1.jpg);">
              // some else
         div>
    div>
div>

因为前两层div中没有东西,纯粹就是用来旋转得到6边形的,所以对 1,2 层 div 设置 visibility: hidden 而第 3 层 div 是放图片的,需要显示出来,因此设置 visibility: visible。 需要注意的是:如果你不对第 3 层 div 设置 visibility: visible 那它默认就会继承第二层 div.boxS 的 visibility: hidden 。经过旋转肯定有超出的部分,因此对 3 个 div 都设置 overflow:hidden。

经过旋转和对超出部分的隐藏我们就可以得到我们想要的 6 边形了。还有一点需要注意,那就是 div 的宽高比例必须满足 4:5 ,不然得到的就不是 6 边形了。在上面的效果图片中。我们在第三层 div.boxT 里面还放置了一个 div.overlay 这个 div 是用于遮罩的,当鼠标移到 6 边形上时,会有遮罩效果。

四. 实例代码

html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>CSS实现六边形图片展示效果title>
    <style type="text/css">body, div, img, ul, li {margin: 0;padding: 0;
        }body {font-size: 12px;background-color: #DDD;min-width: 1200px;
        }ul, ul li { list-style: none; }.clear { clear: both; }       .box {position: relative;width: 630px;margin: 100px auto;
        }.lineF, .lineS {position: absolute;visibility: hidden;
        }.lineS {top: 182px;left: 105px;
        }.boxF, .boxS, .boxT, .overlay {width: 200px;height: 250px;overflow: hidden;
        }.boxF, .boxS {visibility: hidden;
        }.boxF {transform: rotate(120deg);float: left;margin-left: 10px;-ms-transform: rotate(120deg);-moz-transform: rotate(120deg);-webkit-transform: rotate(120deg);
        }.boxS {transform: rotate(-60deg);-ms-transform: rotate(-60deg);-moz-transform: rotate(-60deg);-webkit-transform: rotate(-60deg);
        }.boxT {transform: rotate(-60deg);background: no-repeat 50% center;background-size: 125% auto;-ms-transform: rotate(-60deg);-moz-transform: rotate(-60deg);-webkit-transform: rotate(-60deg);visibility: visible;
        }.overlay {transition: all 250ms ease-in-out 0s;display: none;position: relative;
        }.overlay:hover {background-color: rgba(0,0,0,0.6);
        }.boxT:hover .overlay {display: block;
        }.overlay a {display: inline-block;position: absolute;left: 50%;top: 50%;margin: -16px 0 0 -16px;border-radius: 3px;background-color: #d3b850;text-align: center;line-height: 32px;width: 32px;height: 32px;text-decoration: none;color: White;font-size: 18px;font-weight: bolder;
        }style>
head>
<body>
    <div class="box">
        
        <div class="lineF">
            <div class="boxF">
                <div class="boxS">
                    <div class="boxT" style="background-image: url(img/1.jpg);">
                        <div class="overlay">
                            <a href="#">+a>
                        div>
                    div>
                div>
            div>
            <div class="boxF">
                <div class="boxS">
                    <div class="boxT" style="background-image: url(img/2.jpg);">
                        <div class="overlay">
                            <a href="#">+a>
                        div>
                    div>
                div>
            div>
            <div class="boxF">
                <div class="boxS">
                    <div class="boxT" style="background-image: url(img/3.jpg);">
                        <div class="overlay">
                            <a href="#">+a>
                        div>
                    div>
                div>
            div>

        div>
        
        <div class="lineS">
            <div class="boxF">
                <div class="boxS">
                    <div class="boxT" style="background-image: url(img/4.jpg);">
                        <div class="overlay">
                            <a href="#">+a>
                        div>
                    div>
                div>
            div>
            <div class="boxF">
                <div class="boxS">
                    <div class="boxT" style="background-image: url(img/5.jpg);">
                        <div class="overlay">
                            <a href="#">+a>
                        div>
                    div>
                div>
            div>
        div>
    div>
body>
html>

觉得本文对你有帮助,请分享给更多人:)

113fa5d77da3d19a7c26de4bdc16d1f0.png

关注[ 前端小玖 ]加星标,点赞和在看就是最大的支持


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,下面是实现六边形HTML导航菜单并用CSS实现多彩的六边形蜂窝菜单的步骤: 1. 首先,在 HTML 创建一个容器 div 用于置菜单。 ```html <div class="menu-container"></div> ``` 2. 在 CSS 设置菜单容器的样式。 ```css .menu-container { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; } ``` 这里使用了 flexbox 布局来使菜单居显示。 3. 接下来,创建六边形元素。 ```html <div class="hexagon"> <div class="hexagon-inner"> <span>菜单项1</span> </div> </div> ``` 这里使用了两个 div 元素,一个用于六边形的外部形状,一个用于六边形内部的内容。 4. 在 CSS 设置六边形元素的样式。 ```css .hexagon { position: relative; width: 100px; height: 57.74px; margin: 10px; background-color: #ccc; clip-path: polygon(50% 0%, 100% 25%, 100% 75%, 50% 100%, 0% 75%, 0% 25%); } .hexagon-inner { position: absolute; top: 0; left: 0; width: 100%; height: 100%; text-align: center; display: flex; justify-content: center; align-items: center; } .hexagon-inner span { color: #fff; } ``` 这里使用了 clip-path 属性来创建六边形形状,使用了 flexbox 布局来使内容居显示。 5. 最后,在 CSS 设置每个菜单项的不同背景色。 ```css .hexagon:nth-child(1) { background-color: #ff4d4d; } .hexagon:nth-child(2) { background-color: #ffad33; } .hexagon:nth-child(3) { background-color: #ffd633; } .hexagon:nth-child(4) { background-color: #4dff4d; } .hexagon:nth-child(5) { background-color: #33adff; } .hexagon:nth-child(6) { background-color: #9933ff; } ``` 这里使用了 nth-child 选择器来选择每个菜单项,并且为每个菜单项设置不同的背景色。 完成上述步骤后,我们就可以实现一个多彩的六边形蜂窝菜单了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值