CSS九宫格的4种实现

CSS 之 图片九宫格变幻效果 本篇博客用于讲解如何实现图片九宫格变幻的样式效果,将图片分为九块填充在3×3的的九宫格子元素中,并结合`grid`、`hover`、`transition`等CSS属性,实现元素`hover`时,九宫格子元素合并为一张完整图片的动画效果。为了简化代码,demo中通过JS设置CSS变量的方法,优化了元素背景的设置过程,减少了代码的繁杂度。最后还结合js的点击事件实现了一个简易的点击拼图demo。 阅读详情

实现效果

效果如下,就是一个九宫格,点击九宫格中的任意一个小方块,其边框变成红色。
avatar

实现方法

我自己一共总结了4种方法来实现这个效果,前三种方法是大同小异,只有第四种表格布局比较特殊。下面我直接给出每一种布局方式相关的样式和DOM结构的源码。

1. float布局
<style>
    .float{
      margin: 50px; //为了和页面中的其他块拉开距离
      height: 300px;
      width: 300px;
    }
    .float > li{
      box-sizing: border-box;
      float:left;
      width: 100px;
      height: 100px;
      margin-left: -4px;
      margin-top: -4px;
      line-height: 100px;
      text-align: center;
      list-style: none;
      border:4px solid #ccc;
    }
    .float > li:hover{
      border-color: red;
      position: relative;
    }
  </style>
  <ul class="float">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
  </ul>

float布局实现这个9宫格没什么好讲的,关键点在于对li子项设置margin-left:-4px;margin-top:-4px;这样就可以使相邻子块间的边框发生重叠,你可以不设置这个负的margin来看看效果,你会体会更深。整个CSS中我认为最精髓的地方在于hover的样式,给li子项设置了position:relative;。这个地方的精髓在于,对元素设置了relative后,其将脱离文档流,同时其层叠等级会比普通文档流高,就会使其内容覆盖在普通文档流之上,那么它被覆盖的border就会显示出来,同时遮挡住相邻元素的border。这个设置真的很精髓,后面两种方法和该方法差不多,我就不做过多讲解了。

2. flex布局
<style>
.flex{
      display: flex;
      width: 300px;
      /*height: 300px;*/
      margin: 50px;
      flex-wrap: wrap;
      /*align-content: flex-start;      */
      box-sizing: border-box;           
    }
    .flex > li{
      box-sizing: border-box;
      height: 100px;
      width: 100px;
      margin-left: -4px;
      margin-top: -4px;
      line-height: 100px;
      text-align: center;
      list-style: none;
      border: 4px solid #ccc;
    }

    .flex > li:hover{
      border-color:red;
      position: relative;
      /*z-index:2;*/
    }
</style>
 <ul class="flex">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>flex</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
  </ul>

使用flex布局时,有一点需要注意,那就是不要给父容器ul.flex设置高度,如果你设置了高度,那么在垂直方向上子项的margin负值设置将会失效,具体原因我也不知道。如果你设置了高度后,还希望垂直方向的margin值生效,那么你就给ul.flex添加一个algin-content:flex-start;属性即可。这个具体为啥会这样,我也不是很明白,希望有理解的兄弟在评论区指导一下。该flex布局中,也可以在hover时添加z-index:2;来提高叠加等级。

3. grid布局
<style>
.grid{
      margin: 50px;
      height: 300px;
      width: 300px;
      display: grid;
      grid-template-rows: 100px  100px 100px;
      grid-template-columns: 100px 100px 100px;
      box-sizing: border-box;
    }
    .grid > li{
      margin-top: -4px;
      margin-left: -4px;
      box-sizing: border-box;
      list-style: none;
      line-height: 100px;
      text-align: center;
      border: 4px solid #ccc;
    }
    .grid > li:hover{
      border-color: red;
      position: relative;
      /*z-index:2;*/
    }
</style>
<ul class="grid">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>grid</li>
    <li>6</li>
    <li>7</li>
    <li>8</li>
    <li>9</li>
  </ul>

这里有一个地方需要注意,就是不要再给li子项设置宽度和高度。该grid布局中,也可以在hover时添加z-index:2;来提高叠加等级。

4. table布局
<style>
    .table{
      margin-top: 100px;
      width: 300px;
      height: 300px;
      text-align: center;
      border: 4px solid #ccc;
      border-collapse: collapse;
      box-sizing: border-box;
    }
    .table td{
      /*height: 100px;*/
      width: 100px;
      vertical-align: middle;
      border: 4px solid #ccc;
      text-align: center;
      box-sizing: border-box;
      line-height: 100px;
    }
    .table td:hover{
      border-color: red;      
      position: absolute;
      width: 94px;
      height: 100px;
      margin-top: -4px;
      margin-left: -4px;
      box-sizing: content-box;
    }
  </style>
  <table class="table">
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
    </tr>
    <tr>
      <td>1</td>
      <td>table</td>
      <td>3</td>
    </tr>
    <tr>
      <td>1</td>
      <td>2</td>
      <td>3</td>
    </tr>
  </table>

使用table布局时,有以下几点需要注意:

  1. line-height的设置值需要与height的值保持一致。因为对于表格中的一行来说,它的高度取决于该行最大的单元格的高度或者行高,line-height与height不一致会导致该列中的边框溢出单元格。
  2. 要想使某个单元格的边框覆盖其他单元格的边框,必须给单元格设置position:absolute;而不是relative。
  3. margin-left的设置值是border-width的1.5倍,这个是我在chrome下的测试结果,具体原因我也不清楚,希望有老铁评论区解答一下。

总结

CSS的知识还是十分博大精深的,一个简单的9宫格布局就给我留下了这么多的未解之谜,还需要加强CSS的学习啊!希望后面能把埋下的坑给填了。文中如有纰漏,欢迎在评论区指正。博文中的代码,均是在chrome环境下进行的测试,如有兼容性问题,欢迎在评论区一起探讨。

用H5实现四宫格切换九宫格,再切换十六宫格 废话不多说,直接上代码 效果图如下 点击右上角按钮,即可切换4宫格,9宫格,16宫格 html部分 <!-- 切换按钮 --> <div class="center"> <div id="video"> <label class="label1"> <input type="rad... 阅读详情

相关推荐

九宫格游戏开发:从数学原理到算法实现

九宫格是一种经典的逻辑游戏,基于排列组合和线性代数等数学原理构建。其核心机制是通过数字填充使每行、每列及对角线和相等,这个固定值被称为'魔数'。在游戏开发中,算法设计尤为关键,包括谜题生成、实时校验和难度分级等核心算法。这些技术不仅应用于传统数字游戏,也可扩展到图像识别等创新玩法。以Python实现的校验函数为例,展示了如何通过行列对角线求和来验证九宫格正确性。这类游戏具有显著的教育价值,能培养逻辑思维和问题解决能力,适合作为编程教学中的算法实践案例。现代九宫格游戏开发还需考虑UI设计、性能优化等工程实践问

weixin_29056701的博客 345

CSS 之 动态九宫格效果

一个纯CSS实现的动态九宫格布局效果,使用到了CSS自定义属性、 :has()伪类选择器、trasition过渡等知识点。

weixin_45092437的博客 1219

Web开发:图片九宫格与非九宫格动态切换效果(HTML、CSS、JavaScript)

本文主要记录图片九宫格与非九宫格展示效果动态切换的实现过程;

m0_65029152的博客 1914

css:九宫格布局的五种方法(grid布局、flex布局、table布局、float浮动定位、inline-block+letter-spacing属性)

css实现九宫格的五种方法:grid网格布局、flex布局、inline-block+letter-spacing属性、float浮动定位、table表格布局

YangLu888 9223

通信原理期末考试试题及答案

五、(总分12分)设某信道具有均匀的的双边噪声功率谱密度在该信道中传输抑制载波的单边带(上边带)信号,并设调制信号m(t)的频带限制在5K HZ,而载波为100 K HZ,已调信号的功率为10KW。:(1)单边带信号的载频为100kHz,带宽B=5kHz,为使信号顺利通过,理想带通滤波器的中心频率为。8、对最高频率为fH的调制信号m(t)分别进行AM、DSB、SSB调制,相应已调信号的带宽分别为。7、设调制信号为f(t)载波为,则抑制载波双边带调幅信号的时域表达式为,频域表达式为。

qq_67692062的博客 2392

【UE5 C++开发指南】从零配置Visual Studio 2022开发环境

本文详细指导如何从零开始为UE5 C++开发配置Visual Studio 2022环境。文章强调了VS2022与UE5的深度兼容性,并逐步讲解了社区版下载、核心工作负载(如“使用C++的游戏开发”)与组件安装、界面优化、专属工具设置以及首个C++项目的创建与验证流程,帮助开发者高效搭建专业开发环境。

weixin_29016865的博客 393

css实现九宫格布局的几种方案

实现效果如下:首先,定义好通用的HTML结构:

捂耳听风的博客 5528

手把手教你用差分放大电路搭建LC振荡器(实测频率误差分析)

本文通过一个差分放大电路搭建LC振荡器的实践案例,深入分析了实测频率与理论值产生显著误差的原因。核心在于共模电感的互感效应改变了谐振回路的等效电感,导致频率偏差。文章提供了从电路搭建、误差根源剖析到波形优化与稳定性提升的完整解决方案,帮助电子爱好者深入理解模拟电路的实际行为。

svm4gardener的博客 541

css九宫格(父元素宽高指定或不指定时的实现方法)

# 情况一:指定父元素的宽高时 指定父元素的宽高时,若格数确定,子元素的宽高也确定。在这种情况下,调整浏览器窗口大小,元素的大小不会发生改变。 下面我用一份css代码实现对九宫格和田字格两种布局。

weixin_45830447的博客 2900

Orange3实战教程:文本挖掘---主题建模

主题建模通过LDA、LSI或HDP算法分析文档集合,自动发现隐含主题结构。组件输入为文档语料库,输出包括带主题权重的语料库、主题词分布及完整主题数据。不同算法特性各异:LSI允许正负权重但解释性较弱,LDA更易解释,HDP参数复杂需谨慎设置。结果可结合词云、热力图等可视化工具分析主题特征及分布。示例显示如何通过预处理文本、选择算法(如提取5个LDA主题),并利用MDS和箱线图探索主题间关系及关键词分布。

err2008的专栏 362

Lammps实现随机粗糙度表面沸腾

Lammps实现随机粗糙度表面沸腾前言 前言

Rockyoung 2703

九宫格布局 - Flex (有手就会系列)

使用 flex,仅需 4 行 css 轻松实现九宫格布局。

2404_87284726的博客 616

【纯实战】C#基于TCP/IP实现三菱PLC MC协议完整通信(含完整源码+通信原理+避坑指南)

MC协议是三菱电机为旗下MELSEC系列PLC量身定制的以太网专用通信协议,本质是一套基于TCP/IP的应用层协议规范,专门用于实现上位机(PC/工控机)与PLC之间的双向数据交互,支持对PLC的软元件(X/Y/M/D/W/T/C等)进行读、写、批量读写等核心操作,同时支持PLC状态查询、程序启停等控制指令。重要:三菱PLC的MC协议默认基于TCP 4999端口通信,部分新版本FX5U/Q系列也支持TCP 5000端口,核心通信逻辑一致。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 894

css 九宫格图片

【代码】css 九宫格图片。

cainiaoxuexi666的博客 255

从误检率30%到99.7%:YOLOv8/v9工业零件缺陷检测实战(附产线部署全流程与参数调优秘籍)

工业场景YOLO实战:从实验室到车间的关键调优策略 本文针对工业缺陷检测的特殊性,系统总结了YOLOv8/v9在工业应用中的实战经验。通过齿轮厂缺陷检测案例,揭示了实验室模型与工业场景的三点本质差异:小目标特性(0.2-1mm缺陷)、复杂背景干扰(油污/反光)和数据量不足问题。重点提出了工业级解决方案:1)数据采集需覆盖极端工况(不同光照/污染/角度);2)标注采用LabelStudio+预标注提升效率;3)定制工业增强策略(反光模拟/缺陷复制粘贴)。文章还提供了完整的参数调优记录和TensorRT加速部署

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1733

YOLOv11改进 | 特殊场景检测篇 | 低照度图像增强网络SCINet改进黑暗目标检测(全网独家首发)

本文给大家带来的改进机制是低照度图像增强网络SCINet,SCINet(自校正照明网络)是一种专为低光照图像增强设计的框架。它通过级联照明学习过程和权重共享机制来处理图像,优化了照明部分以提升图像质量。我将该网络集成在YOLOv11的主干上针对于图像的输入进行增强,同时该网络的并不会增加参数和计算量,基本和普通的网络结构保持一致,同时该结构支持自定义调节层数,来控制图像增强的效果 ,非常适合想要在黑夜目标检测领域发表文章的读者,该基本网络不会影响模型的速度。欢迎大家订阅我的专栏一起学习YOLO!

Snu77的博客 2207

基于物理引擎的九宫格抽奖转盘实现与优化

物理引擎在现代Web动画中扮演着关键角色,通过模拟真实世界的物理规律,可以显著提升用户交互体验。其核心原理是通过数学函数(如贝塞尔曲线、指数衰减等)模拟加速度、摩擦力和惯性等物理特性。在营销活动场景中,这种技术能有效增强用户参与感,九宫格抽奖转盘就是典型应用案例。通过CSS Grid布局结合JavaScript动画控制,开发者可以实现包含加速、匀速、减速三阶段的物理运动效果。实践表明,优化后的物理动画可使用户停留时长提升47%,转化率提高23%。关键实现要点包括运动曲线设计、硬件加速优化和移动端兼容处理。

weixin_29016833的博客 184

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

九宫格布局

1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title></title> 6 <style> 7 * {margin: 0;pa...

weixin_30449239的博客 114

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

css3 实现九宫格布局

提问: 九宫格布局,鼠标移动上去时边框显示红色? <ul> <li class="t0">1</li> <li class="t0">2</li> <li class="t0">3</li> <li>4</li> <li>5</li> ...

weixin_41643133的博客 2774

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

用html和css制作九宫格,我就是要用CSS实现九宫格图

下图是手Q吃喝玩乐好友去哪儿九宫格图的图示:我就是要用CSS实现九宫格图-1.jpg (10.42 KB, 下载次数: 0)2020-7-21 10:52 上传从上图我们可以分析出如下需求:图片大小自适应;图片个数不同时,图片按照指定方式排列;图片相邻处有1px空白间隙。我们以最复杂的6图布局为例,一步一步来看如何以纯CSS实现。1、float布局最容易想到的,也是最简单的方案,就是 floa...

weixin_36362326的博客 1862

CSS 九宫格拼图动画效果实现与原理解析

这篇博客详细介绍了使用CSS实现九宫格拼图动画的技术方案。通过CSS Grid布局创建3×3网格,利用background-position分割背景图,配合transform的translate属性实现拼图块的散开效果。鼠标悬停时通过:hover触发transform动画,使碎片平滑合并为完整图片。文章深入讲解了核心CSS属性,包括Grid布局、background定位、transform变换和transition过渡,并对比了transform与gap两种实现方式的优缺点。该方案适用于作品集展示、网页Ba

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 904

css中利用float:left快速实现DIV九宫格布局

今天用到九宫格的布局,顺便记一下。 在css布局中,简单的九宫格利用flat:left就可以实现。 <body> <div class="main"> <div></div> <div></div> <div></div> <...

我是Sinlion 2509

CSS九宫格带边框的多种实现

九宫格,每个单元格滑动上去显示完整边框。 本身考察的知识点并不复杂,margin负值的遮挡,以及流布局中relative的超越。 代码固定部分是这样的, <div> <div>1</div> <div>2</div> <div>3</div> <div>4</div&gt...

weixin_34072458的博客 1733

css实现九宫格效果

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X...

JackieDYH的博客 839

css的flex布局实现响应式九宫格

flex布局:flex布局为盒子模型提供了很大的便利性,具有lfex布局的元素成为容器,它的所有子元素成为项目。flex容器默认有两条相交轴,一条水平方向的主轴(main axis),一条垂直方向的交叉轴(cross axis)。水平轴的开始位置叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。默认项目沿主轴排列,在...

wakaka_cy的博客 2万+
上一篇: setTimeout与循环闭包
下一篇: JS清空数组的三种方式
izwell
博客等级 码龄14年 16粉丝 88原创
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值