HTML六边形蒙版的思路

前几天逛网页的时候偶然发现了个六边形的蒙版效果(其实是逛DNF官网看到的),今儿个突发奇想还原一个六边形

其实最开始做六边形我的思路是使用::before和::after

 1         .box2{
 2             width: 400px;
 3             height: 400px;
 4             border: 1px solid black;
 5             position: relative;
 6         }
 7         .six4{
 8             width: 100px;
 9             height: 173px;
10             position: absolute;
11             top: 50px;
12             left: 100px;
13             background: rgba(0,0,255,0.3);
14         }
15         .six4::before{
16             content:" ";
17             width: 100%;
18             height: 100%;
19             position: absolute;
20             transform: rotate(-60deg);
21             background: rgba(0,0,255,0.3);
22         }
23         .six4::after{
24             content:" ";
25             width: 100%;
26             height: 100%;
27             position: absolute;
28             transform: rotate(60deg);
29             background: rgba(0,0,255,0.3);
30         }        

做出来的效果是这样的

这样六边形就出来了

but

由于before和after经过了旋转,在插入背景图的时候背景图也会跟着旋转,同时由于.six4和before、after层级之间的关系,导致了在添加蒙版的时候,after会被蒙版div所影响,所以这种方法暂时被pass

但是接下来我们会发现,上一步我们做出来的正六边形中,实际上再其内部,还有一个颜色更深的小一些的正六边形,这样就为我们接下来打开了思路

 1         .six1,.six2,.six3{
 2             width: 200px;
 3             height: 300px;
 4             background: rgba(0,0,255,0.3);
 6         }
 7         .six1{
 8             position: absolute;
 9             left: 100px;
10             top: 50px;
11             transform: rotate(-120deg);
12         }
13         .six2{
14             position: absolute;
15             transform: rotate(60deg);
16         }
17         .six3{
18             position: absolute;
19             transform: rotate(60deg);
20         }
<div class="box1">
    <div class="six1">
        <div class="six2">
            <div class="six3"></div>
        </div>
    </div>
</div>

这样的话,通过三个DIV相互嵌套,并且分别进行旋转,就能得到与第一种方法相同的外观效果

接下来我们只需要把30%蓝以及60%蓝进行隐藏,只留下三个DIV同时重叠的90%蓝即可

隐藏方法是对第一级以及第二级DIV进行visibility: hidden;,以及第三级DIV进行visibility: visible;

这里面尤其需要注意的是,visibility属性由于具有继承性,如果在第三级DIV不进行属性值的更改,那么其会默认的继承第二级DIV的visibility属性值

同时对第一级DIV进行超出隐藏overflow: hidden;

这里面的原理是visibility:hidden虽然看上去与display:none有着相似的显示效果,但是visibility:hidden会保留该元素的位置信息,所以在第一级的overflow:hidden会隐藏掉超出第一级DIV的部分而单独保留90%蓝的区域【ps由于第一级第二级DIV被visibility:hidden,所有原90%蓝的区域颜色会降低到30%蓝,而由于位置信息被保留,所以90%蓝不在overflow:hidden范围之内,故能留下六边形区域】

【ps:30%蓝是我个人的一种叫法,对应颜色为rgba(0,0,255,0.3)】

再之后的蒙版效果可以通过在第三级DIV下再下一个width:100%;height:100%的第四级div,设置:hover,配合animation或者transition来完成

而这个正六边形由如果宽高比在√3:2到2:√3之间的话,则为12边形,小于√3:2则为竖向正六边形,大于2:√3则为横向正六边形

【pps:马达你们知道等我做完这个效果之后回去DNF首页看他那个六边形的做法,结果是flash的心情吗

(╯‵□′)╯︵┻━┻】

时间: 2024-11-17 12:00:37

HTML六边形蒙版的思路的相关文章

高德地图画正六边形

题目:已知圆点的经纬度坐标 [ longitude,  latitude ] ,以3公里为半径画一个正六边形,画出六边形 思路:将经纬度坐标转化为平面坐标,在平面坐标上求六个点的坐标,最后将平面坐标转为经纬度坐标 实现:最后的计算单位都相应转化为米 1.  经纬度坐标转化为米 #获取当前的 "米/像素" 的转化比例 var per = map.getResolution(point); // 获取单位 米/像素 #将经纬度坐标转成"像素"var toPx = map

css3绘制六边形

六边形思路:使用CSS3绘制六边形主要使用伪类:before和:after在源元素之前和之后再绘制两个元素,并利用css3的边框样式,将这两个元素变成三角形放置在源元素的两端即可. <h2>三角形在左右两侧</h2> <!-- 第一种方法 不兼容低版本浏览器 --> <div class="hexagon1"></div> <!-- 第二种方法 兼容低版本浏览器 --> <div class="he

九宫格的计算思路

(以下图片在IE浏览器中可能无法显示) 在开始笔记之前先加点之前记下的小知识点: UIView的常见属性和方法: [email protected](nonatomic,radonly)UIView *superview: 获得自己的父控件对象 [email protected] (nonatomic,radonly,copy)NSArray *subviews: 获得自己的所有子控件的对象(数组元素的顺序决定着子控件的显示层级顺序-下标越大的越显示在上面) 3.-(void)addSubvie

我也来开发2048之确定思路

以下内容拔自百度: 2048是比較流行的一款数字游戏.原版2048首先在github上公布,原作者是Gabriele Cirulli.它是基于<1024>和<小3传奇>的玩法开发 而成的新型数字游戏.随后2048便出现各种版本号,走各大平台.由Ketchapp公司移植到IOS的版本号最为火热,如今约有1000万下载,其名字跟 原版一模一样.衍生版中最出名的是<2048六边形>版本号,先后在全球81个国家中的board game中排进了前200.安卓版非常火爆的有<

css3--布局正六边形

怎样布局正六边形?-->如果不能直接布局,就只能采用图形的组合.-->既然是正六边形,则: -->AB=2分之根号3乘2倍的边长,也就是对于矩形ABCD来说,AB是BD的根号3倍(也可以用正切算tan30deg).这样的矩形旋转两次60deg,轨迹就恰好是一个正六边形. -->事实上我们常常是要让它有一个完整背景的,如果只是搞三个块拧在一起,必然背景是不能一体的, -->所以,我们的目标是:既要撑开其余四边,又要获得完整背景的. -->达到背景一体的思路思路:把其中两块

模拟 (NOIP17提高模拟训练11六边形)

棋盘是由许多个六边形构成的,共有5种不同的六边形编号为1到5,棋盘的生成规则如下:1.从中心的一个六边形开始,逆时针向外生成一个个六边形.2.对于刚生成的一个六边形,我们要确定它的种类,它的种类必须满足与已生成的相邻的六边形不同.3.如果有多个种类可以选,我们选择出现次数最少的种类.4.情况3下还有多个种类可以选,我们选择数字编号最小的.现在要你求第N个生成的六边形的编号?前14个六边形生成图如下: 输入格式: 第一行:T,表示数据组数接下来T行,每行一个数:N,表示第N个六边形 输出格式: 共

51nod - 1388 六边形平面

题目链接:1388 六边形平面 思路:乍一看,这不是挺简单的吗?判断有没有三个紧贴在一起的,或者两个贴在一起的.然后信心满满敲完了,交了,WA了.还好51nod可以下载数据,一看数据,哇!原来还有环!!然后再dfs跑过去看看有没有奇数环就好了.终于AC了! 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 50 + 5; 5 char s[maxn][maxn]; 6 int n; 7 int dx[]

毛玻璃蒙版

应用程序毛玻璃蒙版保护账户信息(如支付宝) 先说说实现的的思路: 当程序即将进入后台时,把当前屏幕截个图,此时要将图片毛玻璃化,并作为UIImageView的image,然后将imageView放在window的最上面,等即将进入前台时移除毛玻璃蒙版. 下面就来说代码实现吧(在代理文件中实现): 1 2 3 @interface AppDelegate () @property (nonatomic, weak)UIImageView *cover; @end 主要代码: - (void)app

应用程序加毛玻璃蒙版保护账户信息

废话不多说,先来看看没有蒙版的效果 ,再来看看有蒙版的效果  ,明显可以看出有明显的区别. 先说说实现的的思路: 当程序即将进入后台时,把当前屏幕截个图,此时要将图片毛玻璃化,并作为UIImageView的image,然后将imageView放在window的最上面,等即将进入前台时移除毛玻璃蒙版. 下面就来说代码实现吧(在代理文件中实现): @interface AppDelegate () @property (nonatomic, weak)UIImageView *cover; @end