Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $YECBGYFECGEAFWHA as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2

Deprecated: imwpcache\f884414bce24ee67f\f73723ec7b1919fa5::__construct(): Implicitly marking parameter $BBWFDDBHHYHDXXAB as nullable is deprecated, the explicit nullable type must be used instead in /www/wwwroot/www.chuangxiangniao.com/wp-content/plugins/imwpcache-dist/build/f884414bce24ee67ff73723ec7b1919fa5.php on line 2
手把手教你使用CSS实现酷炫六边形网格背景图_创想鸟

手把手教你使用CSS实现酷炫六边形网格背景图

本篇文章给大家分享不规则图形背景排版高阶技巧,介绍一下如何使用css实现酷炫六边形网格背景图,希望对大家有所帮助!

手把手教你使用CSS实现酷炫六边形网格背景图

今天,收到一个很有意思的提问,如何实现类似如下的背景效果图:

手把手教你使用CSS实现酷炫六边形网格背景图

嗯?核心主体是由多个六边形网格叠加形成。

立即学习“前端免费学习笔记(深入)”;

那么我们该如何实现它呢?使用纯 CSS 能够实现吗?

当然可以,下面我们就将尝试如何使用 CSS 去实现这样一个背景效果。【推荐学习:css视频教程】

如何绘制六边形?

首先,看到这样一个图形,如果想要使用一个标签完成整个背景,最先想到的肯定是使用背景 background 实现,不过可惜的是,尽管 CSS 中的 background 非常之强大,但是没有特别好的方式让它足以批量生成重复的六边形背景。

因此,在这个需求中,我们可能不得不退而求其次,一个六边形实现使用一个标签完成。

那么,就拿 1 个 DIV 来说,我们有多少实现六边形的方式呢?这里简单介绍 2 种方式:

使用 border 实现六边形使用 clip-path 实现六边形

使用 border 或者 clip-path 实现六边形

首先,使用 border 实现六边形。这里的核心在于上下两个三角形叠加中间一个矩形。这里,利用元素的两个伪元素实现上下两个三角形,从而让这个元素看起来像一个六边形。

思路比较简单,直接上代码:

.hexagon {  position: relative;  width: 200px;  height: 100px;  background-color: red;}.hexagon:before,.hexagon:after {  content: "";  position: absolute;  width: 0;  height: 0;  border-left: 100px solid transparent;  border-right: 100px solid transparent;}.hexagon:before {  bottom: 100%;  border-bottom: 50px solid red;}.hexagon:after {  top: 100%;  border-top: 50px solid red;}

上面的代码会创建一个宽度为 200 像素,高度为 100 像素的六边形,其中由两个三角形和一个矩形组成。使用伪元素的优点是可以很方便地控制六边形的大小、颜色等样式。

手把手教你使用CSS实现酷炫六边形网格背景图

当然,上述的代码不是一个正六边形,这是因为正六边形中,元素的高是元素的宽的 1.1547 倍。

并且,上述的方式也稍微复杂了点,因此,在今天,我们更推荐使用 clip-path 的方式去实现一个六边形:

.clippath {    --w: 100px;    width: var(--w);    height: calc(var(--w) * 1.1547);    clip-path: polygon(0% 25%, 0% 75%, 50% 100%, 100% 75%, 100% 25%, 50% 0%);    background: deeppink;    margin: auto;}

这样,基于 clip-path,也能快速得到一个六边形图形:

手把手教你使用CSS实现酷炫六边形网格背景图

CodePen Demo — Two ways to achieve a hexagon

绘制多个六边形背景

好了,有了上一步的铺垫之后,接下来我们要做的,就是绘制多个六边形,组成背景。

但是我们仔细观察一下由多个六边形组成的背景,会发现每双数行的的六边形,需要向右侧有一个明显的缩进,宽度大概为单个六边形的宽度的一半:

手把手教你使用CSS实现酷炫六边形网格背景图

这里其实是一个非常棘手的问题。首先,我们会想到这样一种解决方案:

每一行为一组,设置一个父 div 容器,填满六边形元素,设置元素不换行

给偶数行设置一个固定的 margin-left

基于这个策略,我们的代码,大概会是这样:

// ... 填满六边形
// ... 填满六边形
// ... 填满六边形
// ... 填满六边形

可以看到,我们给偶数行,都添加了一个 margin-left。

但是这个代码,会有几个问题:

我们的页面宽度不一定是固定的,那么每一行设置多少个子六边形元素比较合适呢?设置多了势必会带来浪费,少了又无法满足需求

多了一层嵌套,代码逻辑更为复杂

什么意思呢?也就是效果可能在屏幕非常宽的情况下,失效。

看看,正常情况,我们设置了每行 20 个六边形,下图是正常的

手把手教你使用CSS实现酷炫六边形网格背景图

但是如果我们的屏幕特别宽,那么,可能会得到这样一种效果:

手把手教你使用CSS实现酷炫六边形网格背景图

因此,这种方式存在非常大的弊端,我们希望能有一整布局方式,能够满足我们如下两个诉求:

所有六边形代码写在一个父容器下

这个弹性布局中,第二行的元素最左边,能够实现固定一个缩进

仔细思考一下,CSS 中有能够实现类似布局的方法么?

妙用 shape-outside 实现隔行错位布局

有的!在 CSS 中,有一个神奇的元素能够让元素以非直线形式排布。它就是 shape-outside!

如果你对 shape-outside 不太了解,也可以先看看我的这篇文章 — 奇妙的 CSS shapes

shape-outside 是 CSS 中的一个属性,用于控制元素的浮动方式。它允许你定义一个元素浮动时周围元素的形状。例如,你可以使用 shape-outside 属性来定义一个元素浮动时周围元素的形状为圆形、六边形等。

它和 clip-path 的语法非常类似,很容易触类旁通。看看实例,更易理解:

假设我们有下面这样的结构存在:

@@##@@
xxxxxxxxxxx,文字描述,xxxxxxxxx

定义如下 CSS:

.shape-outside {    width: 160px;    height: 160px;    shape-outside: circle(80px at 80px 80px);    float: left;}

注意,上面 .shape-outside 使用了浮动,并且定义了 shape-outside: circle(80px at 80px 80px) ,表示在元素的 (80px, 80px) 坐标处,生成一个 80px 半径的圆。

如此,将会产生一种图文混排的效果:

手把手教你使用CSS实现酷炫六边形网格背景图

CodePen Demo — 图文混排 shape-outside

总得来说,shape-outside 有两个核心特点:

shape-outside 属性仅在元素定义了 float 属性且不为 none 时才会生效

它能够实现了文字根据图形的轮廓,在其周围排列

手把手教你使用CSS实现酷炫六边形网格背景图

shape-outside 的本质

划重点,划重点,划重点。

所以,shape-outside 的本质其实是生成几何图形,并且裁剪掉其几何图形之外周围的区域,让内容能排列在这些被裁剪区域之内。

所以,了解了这个本质之后,我们再将他运用在上面的六边形布局之中。

为了方便理解,我们首先使用文字代替上面的六边形,假设我们有这样一段文本内容:

Lorem ipsum dolor sit amet conse...

p {    line-height: 36px;    font-size: 24px;}

非常平平无奇的一段代码,效果如下:

手把手教你使用CSS实现酷炫六边形网格背景图

现在,我们想利用 shape-outside,让文本内容的偶数行,向内缩进 24px,怎么实现呢?非常简单:

p {    position: relative;    line-height: 36px;    font-size: 24px;    &::before {        content: "";        height: 100%;        width: 24px;        shape-outside: repeating-linear-gradient(            transparent 0,            transparent 36px,            #000 36px,            #000 72px        );        float: left;    }}

这样,我们就实现了文字隔行缩进 24px 的效果:

手把手教你使用CSS实现酷炫六边形网格背景图

一定有小伙伴会很好奇,为什么呢?核心在于我们利用元素的伪元素实现了一个 shape-outside 图形,如果我们把这个图形用 background 绘制出来,其实它长这样:

p {    position: relative;    line-height: 36px;    font-size: 24px;    &::before {        content: "";        height: 100%;        width: 24px;        shape-outside: repeating-linear-gradient(            transparent 0,            transparent 36px,            #000 36px,            #000 72px        );        float: left;        background: repeating-linear-gradient(            transparent 0,            transparent 36px,            #f00 36px,            #f00 72px        );    }}

效果如下:

手把手教你使用CSS实现酷炫六边形网格背景图

因为文本的行高是 36px,这样我们以 72 为一段,每 36px 绘制一段透明,另外 36px 绘制一段宽为 24px 的内容,这样,结合 shape-outside 的特性,我们就实现了隔行将内容向里面挤 24px 的效果!

非常的 Amazing 的技巧!完整的代码你可以戳这里:

CodePen Demo — Shape-outside achieves even line indentation

基于这个技巧,我们就可以实现上述我们想要的效果了。我们回到正题,重新实现一个充满六边形的背景:

  • //... 非常多个 li
    :root {  --s: 50px;  /* size  */  --m: 4px;    /* margin */  --perHeight: calc(calc(var(--s) * 2 * 1.1547) + calc(var(--m) * 4) - 0.4px)}.wrap {    position: relative;    height: 100%;    font-size: 0;    &::before {        content: "";        height: 100%;        width: 27px;        shape-outside: repeating-linear-gradient(            transparent 0,            transparent 70px,            #000 70px,            #000 var(--perHeight)        );        float: left;    }}li {    width: var(--s);    height: calc(var(--s) * 1.1547);     background: #000;    clip-path: polygon(0% 25%, 0% 75%, 50% 100%, 100% 75%, 100% 25%, 50% 0%);    margin: var(--m);    display: inline-block;}

    借助 shape-outside,我们就实现了隔行让我们的六边形向内缩进的诉求!效果如下:

    手把手教你使用CSS实现酷炫六边形网格背景图

    当然,有一些优化点:

    为了让两边不那么空,我们可以让整个容器更宽一点,譬如宽度为父元素的 120%,然后水平居中,这样,两侧的留白就解决了

    让两行直接贴紧,可以设置一个 margin-bottom

    做完这两点优化之后,效果如下:

    手把手教你使用CSS实现酷炫六边形网格背景图

    可以做到任意屏幕宽度下的六边形完美平铺布局:

    手把手教你使用CSS实现酷炫六边形网格背景图

    完整的代码你可以戳这里:CodePen Demo — Hexagon Layout

    配置上色彩变换

    有了上述的铺垫后,要实现文章一开头的效果就不难了。

    是的,我们要实现这样一个效果:

    手把手教你使用CSS实现酷炫六边形网格背景图

    如何让它们动态的实现颜色变换呢?是给每一个六边形一个单独的颜色,然后进行动画吗?不,借助混合模式,我们可以非常快速的实现不同的颜色值。

    首先,我们将上述效果,改成白底黑色六边形色块:

    手把手教你使用CSS实现酷炫六边形网格背景图

    然后,利用父容器剩余的一个伪元素,我们叠加一层渐变层上去:

    .wrap {    position: relative;    // 代码与上述保持一致    &::before {        content: "";        // ... 实现 shape-outside 功能,代码与上述保持一致    }        &::after {        content: "";        position: absolute;        inset: 0;        background: linear-gradient(45deg, #f44336, #ff9800, #ffe607, #09d7c4, #1cbed3, #1d8ae2, #bc24d6);    }}

    这样,我们就叠加了一层渐变色彩层在原本的六边形背景之上:

    手把手教你使用CSS实现酷炫六边形网格背景图

    接着,只需要一个混合模式 mix-blend-mode: darken,就能实现六边形色块与上层渐变颜色的融合效果:

    .wrap {    position: relative;    // 代码与上述保持一致    &::before {        content: "";        // ... 实现 shape-outside 功能,代码与上述保持一致    }        &::after {        content: "";        position: absolute;        inset: 0;        background: linear-gradient(45deg, #f44336, #ff9800, #ffe607, #09d7c4, #1cbed3, #1d8ae2, #bc24d6);        z-index: 1;      + mix-blend-mode: darken;    }}

    效果如下:

    手把手教你使用CSS实现酷炫六边形网格背景图

    好, 我们再给上层的渐变色块,添加一个 filter: hue-rotate() 动画,实现色彩的渐变动画:

    .wrap {    position: relative;    // 代码与上述保持一致    &::before {        content: "";        // ... 实现 shape-outside 功能,代码与上述保持一致    }        &::after {        content: "";        position: absolute;        inset: 0;        background: linear-gradient(45deg, #f44336, #ff9800, #ffe607, #09d7c4, #1cbed3, #1d8ae2, #bc24d6);        z-index: 1;        mix-blend-mode: darken;      + animation: change 10s infinite linear;    }}@keyframes change {    100% {        filter: hue-rotate(360deg);    }}

    这样,我们就完美的实现了我们想要的效果:

    手把手教你使用CSS实现酷炫六边形网格背景图

    完整的代码,你可以戳这里:CodePen Demo — Hexagon Gradient Layout

    扩展延伸

    当然,有了这个基础图形之后,其实我们可以基于这个图形,去做非常多有意思的效果。

    下面我是尝试的一些效果示意,譬如,我们可以将颜色放置在六边形背景的下方,制作这样一种效果:

    手把手教你使用CSS实现酷炫六边形网格背景图

    CodePen Demo — Hexagon Gradient Layout

    配合 mask 的蒙版效果及鼠标定位,我们还能实现这样一种有趣的交互效果:

    手把手教你使用CSS实现酷炫六边形网格背景图

    CodePen Demo — Hexagon Gradient & MASK Layout

    当然,3D 效果也不在话下:

    手把手教你使用CSS实现酷炫六边形网格背景图

    CodePen Demo — 3D Hexagon Gradient Layout

    原文地址:https://www.cnblogs.com/coco1s/p/17005071.html

    作者:ChokCoco

    (学习视频分享:web前端)

    手把手教你使用CSS实现酷炫六边形网格背景图

    以上就是手把手教你使用CSS实现酷炫六边形网格背景图的详细内容,更多请关注创想鸟其它相关文章!

    版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
    如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
    发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1624877.html

    赞 (0)
    打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
    CSS技巧分享:纯CSS实现表格响应式布局
    上一篇 2025年12月24日 08:35:50
    带你吃透Flex布局的三个属性:flex-grow、flex-shrink、flex-basis
    下一篇 2025年12月24日 08:36:14

    相关推荐

    • 自定义组件(Component)的开发方法

      开发自定义组件的步骤包括:1. 使用html和css定义组件结构和样式;2. 用javascript实现动态效果和状态管理;3. 确保跨浏览器和设备兼容性;4. 采用模块化设计和外部状态管理工具;5. 进行性能优化和测试驱动开发。通过这些步骤,可以创建出优雅且高效的自定义组件,提升用户体验。 在开发…

      2026年9月21日
      000
    • Laravel与Vue.js/React前端框架集成

      laravel可以与vue.js或react集成。1) 使用命令“php artisan preset vue”或“php artisan preset react”设置开发环境。2) 在laravel视图中引入编译后的javascript文件。3) 通过laravel的api路由和前端框架的htt…

      2026年9月21日
      100
    • 如何制作抖音点单小程序:全面指南与实用技巧

      引言: 随着移动互联网的飞速发展,抖音已不仅仅是短视频平台,更成为商家连接用户的重要入口。越来越多企业开始关注抖音点单小程序的搭建,以提升服务效率和用户体验。本文将为您系统讲解抖音点单小程序的制作流程,并分享实用技巧与真实案例,助您快速打造专属的小程序,实现流量变现与销售增长。 1. 明确核心需求与…

      2026年9月21日
      200
    • VSCode有哪些必备的插件?

      EditorConfig for VS Code统一代码风格,2. Prettier自动格式化多语言代码,3. ESLint检查JS/TS错误并集成Prettier,4. GitLens增强Git可视化,5. Path Intellisense补全文件路径,6. 括号高亮提升嵌套识别,7. Auto…

      2026年9月20日
      1000
    • 为什么VSCode的CSS代码提示不全?

      答案:VSCode CSS提示不全通常由配置或环境问题导致。1. 确保文件语言模式为CSS并正确关联扩展名;2. 更新VSCode以支持现代CSS特性,自定义属性需插件辅助;3. 安装IntelliSense、Tailwind或PostCSS等插件增强提示功能;4. 检查settings.json中…

      2026年9月20日
      000
    • edge浏览器无法打开本地HTML文件或显示空白怎么办_Edge浏览器打开本地HTML文件失败解决方法

      1、检查文件路径并选择Edge打开,确保路径为纯英文;2、在edge://flags中启用“Allow file access from files”;3、使用开发者工具排查资源加载错误;4、通过命令行启动Edge绕过安全限制;5、推荐使用npx live-server搭建本地服务器运行HTML文件…

      2026年9月20日
      000
    • 如何在Laravel中配置HTTPS支持

      配置https支持主要分为以下步骤:1.获取ssl证书,可通过购买或使用let’s encrypt免费证书;2.配置服务器(nginx或apache),设置443端口及证书路径;3.强制https重定向,通过服务器配置或laravel中间件实现;4.配置laravel的url生成为htt…

      2026年9月20日
      100
    • VSCode的Markdown预览功能好用吗?

      VSCode的Markdown预览功能支持实时渲染,通过Ctrl+Shift+V(或Cmd+Shift+V)开启,自动刷新,可显示标题、列表、代码块、图片及LaTeX数学公式,并可通过插件扩展目录生成、PDF导出等功能,还能自定义CSS样式,集成于开发环境,适合技术写作,轻量高效,稳定实用。 VSC…

      2026年9月20日
      200
    • 如何为VSCode配置一个自定义的文件编码检测策略?

      VSCode无直接自定义编码检测API,需通过files.encoding设默认编码,files.autoGuessEncoding启自动识别,files.associations按文件类型指定编码,.editorconfig统一项目规范,辅以扩展处理特殊需求,组合实现自定义策略;编码误判主因包括B…

      2026年9月20日
      000
    • 如何在Laravel中使用Blade模板

      blade模板引擎是laravel框架的核心组件,用于创建动态视图。它允许在html中嵌入php代码,同时保持代码简洁易读。其使用步骤包括:1. 在resources/views目录下创建以.blade.php为扩展名的模板文件;2. 使用blade指令如@if、@foreach控制逻辑与渲染;3.…

      2026年9月20日
      000
    • VSCode怎么把代码整齐_VSCode代码格式化与自动排版功能设置教程

      VSCode代码格式化可显著提升代码可读性与质量,通过内置功能及Prettier、ESLint插件实现。安装Prettier和ESLint插件后,需在设置中配置默认格式化工具、保存时自动格式化(Format On Save)、粘贴时格式化(Format On Paste)及保存时修复ESLint问题…

      2026年9月20日
      100
    • 如何在Laravel中实现数据导出

      在laravel中实现数据导出,核心思路是根据具体需求选择合适方法。1. 使用maatwebsite/laravel-excel处理excel或csv导出;2. 通过队列优化大量数据导出性能;3. 结合分块读取降低内存占用;4. 利用lazy collections控制内存使用;5. 支持多种格式如…

      2026年9月20日
      000
    • huARdb:单细胞水平克隆型-转录组分析的人类抗原受体数据库

      前言 摘要 人类的适应性免疫系统是免疫反应的一个重要分支,负责识别和清除特定抗原。通过与特定抗原的结合,适应性免疫系统被激活,并能保存对目标抗原的长期免疫记忆。因此,具有高特异性的长期免疫记忆能够在后续抗原暴露中引发更强烈的反应。适应性免疫反应的激活需要T细胞或B细胞上的受体识别抗原,这些受体分别称…

      2026年9月20日
      000
    • windows怎么查看系统体系结构(32位或64位)_Windows系统体系结构查看方法

      通过系统设置可快速查看:进入“设置-系统-关于”,在“系统类型”中查看是否为64位或32位操作系统;2. 使用系统信息工具:运行msinfo32,查看“系统类型”项明确标注x64或x86架构;3. 命令提示符查询:执行wmic cpu get DataWidth,值为64表示支持64位系统,或使用e…

      2026年9月20日
      100
    • 如何在Laravel中管理静态资源

      在laravel中管理静态资源的核心方法是使用public目录结合vite或laravel mix等构建工具实现高效加载和版本控制。1. public目录作为所有公开访问资源的根目录,由web服务器直接提供服务;2. 使用asset()、vite()或mix()辅助函数生成带版本哈希的url,确保浏…

      2026年9月13日
      100
    • VSCode写HTML怎么写_VSCode编写HTML代码的基础与高效技巧教程

      VSCode写HTML怎么写_VSCode编写HTML代码的基础与高效技巧教程VSCode写HTML怎么写_VSCode编写HTML代码的基础与高效技巧教程VSCode写HTML怎么写_VSCode编写HTML代码的基础与高效技巧教程VSCode写HTML怎么写_VSCode编写HTML代码的基础与高效技巧教程

      VSCode写HTML的核心在于利用其高效工具与扩展提升开发效率。首先,保存文件为.html后,语法高亮与Emmet自动补全即刻生效,输入!+Tab可生成HTML5骨架,div、p等标签输入后按Tab即可扩展为完整标签对。Emmet支持复杂缩写如div.container>ul>li*3…

      2026年9月13日 • 用户投稿
      200
    • 如何为VSCode配置自动补全(Auto Complete)?

      VSCode默认启用自动补全,通过LSP提供智能建议,可手动触发或设置自动弹出;2. 安装Pylance、Rust Analyzer等语言扩展提升各语言补全准确性;3. 调整editor.quickSuggestions、延迟时间和参数提示优化体验。 VSCode 的自动补全功能默认已启用,大多数情…

      2026年9月12日
      300
    • 什么是ThinkPHP框架?ThinkPHP如何安装配置?

      什么是ThinkPHP框架?ThinkPHP如何安装配置?什么是ThinkPHP框架?ThinkPHP如何安装配置?什么是ThinkPHP框架?ThinkPHP如何安装配置?什么是ThinkPHP框架?ThinkPHP如何安装配置?

      thinkphp的安装配置主要包括下载框架、配置服务器环境、进行初始化设置。1. 下载框架可通过composer安装或手动下载;2. 配置服务器环境需设置apache虚拟主机、启用url重写、配置.htaccess文件并重启服务器;3. 初始化设置包括修改数据库配置、定义应用目录并测试访问。 Thi…

      2026年9月12日 • 用户投稿
      100
    • ThinkPHP的分页功能怎么做?ThinkPHP如何实现数据分页?

      ThinkPHP的分页功能怎么做?ThinkPHP如何实现数据分页?ThinkPHP的分页功能怎么做?ThinkPHP如何实现数据分页?ThinkPHP的分页功能怎么做?ThinkPHP如何实现数据分页?ThinkPHP的分页功能怎么做?ThinkPHP如何实现数据分页?

      thinkphp实现分页功能的核心是使用内置的paginate()方法。具体步骤如下:1. 在控制器中通过db门面或模型调用paginate()方法执行分页查询,可结合where、order等链式操作设置查询条件;2. 将分页结果传递到视图层,使用$list->render()渲染分页链接;3…

      2026年9月12日 • 用户投稿
      100
    • 怎样通过扩展API自定义鼠标悬停提示的样式和内容?

      通过HTML、CSS和JavaScript可自定义tooltip样式与内容,支持静态展示与动态渲染;利用data属性或UI库(如Ant Design、Element Plus)的API实现灵活扩展,结合事件监听与DOM操作可创建富文本提示;建议封装通用模块以统一管理,兼顾可访问性与多端兼容。 通过扩…

      2026年9月12日
      200

    发表回复

    登录后才能评论
    关注微信