使用CSS实现六边形的图片效果


Posted in HTML / CSS onAugust 05, 2022

前言

CodePen上看到一个有意思的效果:

使用CSS实现六边形的图片效果

这个效果的难点在于六边形的绘制, 那么接下来我们就一起来看下作者是怎么实现他的吧

实现思路

  • 使用grid进行布局, 水平、垂直居中显示
  • 使用clip-path: polygon() 来绘制图片六边形
  • 使用transform: translate()定位六边形的位置
  • 使用filter: grayscale(80%)对图片进行滤镜, 将图片转为灰度图像
  • 鼠标浮动缩放效果

都是我们平时开发中不常用到的CSS3属性, 那么我们先来简单的介绍下吧

1、网格布局grid

兼容性查看

要使 HTML 元素变成一个网格容器,可以将 display 属性设置为 grid inline-grid

网格容器内放置着由列和行内组成的网格元素。

属性:

1、grid-template-columns

定义了网格布局中的列的数量,它也可以设置每个列的宽度。

2、grid-template-rows

定义了网格布局中的行的数量,它也可以设置每一行的高度。

3、grid-areas

指定网格元素在网格布局中的大小和位置, 是以下属性的简写属性: grid-row-start / grid-column-start / grid-row-end / grid-column-end | itemname;

4、justify-content

属性用于对齐容器内的网格,设置如何分配顺着弹性容器主轴(或者网格行轴) 的元素之间及其周围的空间。

5、align-content

属性用于设置垂直方向上的网格元素在容器中的对齐方式。

6、place-content

属性指定网格元素水平、垂直方向元素分布方式

2、var() 函数

兼容性查看

定义: var() 函数用于插入自定义的属性值,如果一个属性值在多处被使用,该方法就很有用。

语法: var(custom-property-name, value)

使用CSS实现六边形的图片效果

实例:

:root {
--main-bg-color: coral;
}
#div1 {
background-color: var(--main-bg-color);
}

3、clip-path

兼容性查看

使用裁剪方式创建元素的可显示区域。区域内的部分显示,区域外的隐藏。可以指定一些特定形状。

polygon( , , …, ) 定义了每一个点的坐标,起点是从左上角开始计算的,可以用百分百,也可以用px等单位。

代码实现

HTML

<div class="gallery-container">
    <div class="gallery">
      <img
        src="https://picsum.photos/id/1040/300/300"
        alt="a house on a mountain"
      />
      <img src="https://picsum.photos/id/106/300/300" alt="sime pink flowers" />
      <img
        src="https://picsum.photos/id/136/300/300"
        alt="big rocks with some trees"
      />
      <img
        src="https://picsum.photos/id/1039/300/300"
        alt="a waterfall, a lot of tree and a great view from the sky"
      />
      <img src="https://picsum.photos/id/110/300/300" alt="a cool landscape" />
      <img
        src="https://picsum.photos/id/1047/300/300"
        alt="inside a town between two big buildings"
      />
      <img
        src="https://picsum.photos/id/1057/300/300"
        alt="a great view of the sea above the mountain"
      />
    </div>
  </div>

CSS

.gallery-container {
  min-height: 100vh;
  display: grid;
  place-content: center; /* 水平垂直方向居中 */
  background: #aabbfb;
}
.gallery {
  --s: 150px; /* control the size */
  --g: 10px; /* control the gap */
  display: grid;
}

.gallery > img {
  grid-area: 1/1; /* 规定从第一行第一列开始显示项目 */
  width: var(--s);
  aspect-ratio: 1.15; /* 宽高比例缩放 */
  object-fit: cover; /* 保持图片原有比例, 会有剪切*/
  clip-path: polygon(25% 0%, 75% 0%, 100% 50%, 75% 100%, 25% 100%, 0 50%);
  transform: translate(var(--_x, 0), var(--_y, 0)) scale(var(--_t, 1)); /* 对图片进行移动和缩放 */
  cursor: pointer;
  filter: grayscale(80%); /* 灰度滤镜 */
  transition: 0.2s linear; /* 过渡效果 */
}
.gallery > img:hover {
  filter: grayscale(0);
  z-index: 1;
  --_t: 1.2;
}
.gallery > img:nth-child(1) {
  --_y: calc(-100% - var(--g));
}
.gallery > img:nth-child(7) {
  --_y: calc(100% + var(--g));
}
.gallery > img:nth-child(3),
.gallery > img:nth-child(5) {
  --_x: calc(-75% - 0.87 * var(--g));
}
.gallery > img:nth-child(4),
.gallery > img:nth-child(6) {
  --_x: calc(75% + 0.87 * var(--g));
}
.gallery > img:nth-child(3),
.gallery > img:nth-child(4) {
  --_y: calc(-50% - 0.5 * var(--g));
}
.gallery > img:nth-child(5),
.gallery > img:nth-child(6) {
  --_y: calc(50% + 0.5 * var(--g));
}

附图一张, 帮助理解元素移动位置

使用CSS实现六边形的图片效果

到此这篇关于使用CSS实现六边形的图片效果的文章就介绍到这了,更多相关css六边形图片内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS心形加载的动画源码的实现
Mar 09 HTML / CSS
全面总结使用CSS实现水平垂直居中效果的方法
Mar 10 HTML / CSS
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
Dec 22 HTML / CSS
利用html5 canvas破解简单验证码及getImageData接口应用
Jan 25 HTML / CSS
HTML5中使用postMessage实现两个网页间传递数据
Jun 22 HTML / CSS
html5实现图片转圈的动画效果——让页面动起来
Oct 16 HTML / CSS
HTML5新标签兼容——&gt; 的两种方法
Sep 12 HTML / CSS
使用Html5中的cavas画一面国旗
Sep 25 HTML / CSS
如何给HTML标签中的文本设置修饰线
Nov 18 HTML / CSS
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
May 26 HTML / CSS
canvas 绘图时位置偏离的问题解决
Sep 16 HTML / CSS
CSS作用域(样式分割)的使用汇总
Nov 07 HTML / CSS
el-form每行显示两列底部按钮居中效果的实现
Aug 05 #HTML / CSS
纯CSS打字动画的实现示例
Aug 05 #HTML / CSS
新的CSS 伪类函数 :is() 和 :where()示例详解
前端使用svg图片改色实现示例
Jul 23 #HTML / CSS
详解flex:1什么意思
Jul 23 #HTML / CSS
CSS子盒子水平和垂直居中的五种方法
Jul 23 #HTML / CSS
如何用H5实现好玩的2048小游戏
Jul 23 #HTML / CSS
You might like
咖啡历史、消费和行业趋势
2021/03/03 咖啡文化
虹吸壶煮咖啡26个注意事项
2021/03/03 冲泡冲煮
微信接口生成带参数的二维码
2017/07/31 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
javascript 异常处理使用总结
2009/06/21 Javascript
js中Math之random,round,ceil,floor的用法总结
2013/12/26 Javascript
基于jquery实现简单的手风琴特效
2015/11/24 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
jquery拖拽排序简单实现方法(效果增强版)
2016/02/16 Javascript
基于nodejs+express4.X实现文件下载的实例代码
2017/07/13 NodeJs
vue 系列——vue2-webpack2框架搭建踩坑之路
2017/12/22 Javascript
详解node child_process模块学习笔记
2018/01/24 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
JavaScript 装逼指南(js另类写法)
2020/05/10 Javascript
浅谈vue 组件中的setInterval方法和window的不同
2020/07/30 Javascript
解决VUE项目localhost端口服务器拒绝连接,只能用127.0.0.1的问题
2020/08/14 Javascript
python实现的用于搜索文件并进行内容替换的类实例
2015/06/28 Python
Python中支持向量机SVM的使用方法详解
2017/12/26 Python
Python列表切片操作实例总结
2019/02/19 Python
python操作日志的封装方法(两种方法)
2019/05/23 Python
Python 串口读写的实现方法
2019/06/12 Python
Python 实用技巧之利用Shell通配符做字符串匹配
2019/08/23 Python
Python中list循环遍历删除数据的正确方法
2019/09/02 Python
python logging添加filter教程
2019/12/24 Python
pandas之分组groupby()的使用整理与总结
2020/06/18 Python
解决tensorflow/keras时出现数组维度不匹配问题
2020/06/29 Python
美国电子产品主要品牌的授权在线零售商:DataVision
2019/03/23 全球购物
英国No.1体育用品零售商:SportsDirect.com
2019/10/16 全球购物
初中生三年学习生活的自我评价
2013/11/03 职场文书
初中学生期末评语
2014/04/24 职场文书
党员评议表自我评价范文
2014/10/20 职场文书
小学教师2014年度工作总结
2014/12/03 职场文书
深入探讨opencv图像矫正算法实战
2021/05/21 Python
JavaScript offset实现鼠标坐标获取和窗口内模块拖动
2021/05/30 Javascript
nginx日志格式分析和修改
2022/04/28 Servers
JavaScript正则表达式实现注册信息校验功能
2022/05/30 Java/Android