您现在的位置是:网站首页> 编程资料编程资料
我就是要用CSS实现九宫格图HTML5+CSS3实现的图片多种滤镜特效源码深入浅析css3 border-image边框图像详解纯CSS3实现扁平风格的图标特效源码CSS3+jQuery实现的时尚大气全屏立体焦点图特效源码CSS3图片可展开扇形效果的层叠展开特效源码基于jquery+css3实现的通栏响应式图片轮播动画特效源码纯CSS3实现天气动画图标特效源码css3使网页、图片变成灰色兼容大多数浏览器纯CSS3实现的百叶窗图片切换效果源码一款精美清新的CSS3小图标菜单导航
2021-09-05
870人已围观
简介 本文介绍的就是我们最熟悉的老朋友,CSS。不讲枯燥的语法,抛开js,让我们一起来看业务中那别致的纯CSS实现,让我们一起来追求那更好的页面实现,希望我带着你走完这段旅程后,你能收获一些惊喜甚至灵感,感兴趣的小伙伴们可以参考一下
下图是手Q吃喝玩乐 好友去哪儿九宫格图的图示:
从上图我们可以分析出如下需求:
- 图片大小自适应;
图片个数不同时,图片按照指定方式排列;
图片相邻处有1px空白间隙。
我们以最复杂的6图布局为例,一步一步来看如何以纯CSS实现。
1、float布局
最容易想到的,也是最简单的方案,就是 float 布局:
图片大小自适应:宽度百分比,高度使用 padding-top 百分比
图片个数不同时,图片按照指定方式排列:使用 nth-child 伪类指定不同情况下的元素大小
图片相邻处有1px空白间隙:使用 border-box + border模拟边框
这里父元素的高度未知,height使用百分比行不通,而padding的百分比值是依据父元素的宽度来计算的,我们可以使用padding-top撑开高度。
让我们一瞅伪码:
XHTML
- <div class="float">
- <div class="item">1div>
- ...
- <div class="item">6div>
- div>
CSS
- .float {
- overflow: hidden;
- }
- .item {
- float: left;
- padding-top: 33.3%;
- width: 33.3%;
- border-right: 1px solid #fff;
- border-top: 1px solid #fff;
- }
- .item:nth-child(1) {
- padding-top: 66.6%;
- width: 66.6%;
- }
- .item:nth-child(2), .item:nth-child(3), .item:nth-child(6) {
- border-right: 0 none;
- }
- .item:nth-child(1), .item:nth-child(2) {
- border-top: 0 none;
- }
实际效果并不理想,如下图:
可以看到 float 布局的优点是DOM结构十分简单,缺点是容易出现空白间隙错位,优缺点都十分明显,它更适用于js计算的版本。
2、flex布局
还有谁?flex!flex布局有以下重要特性:
- 可以将 flex 布局下的元素展示在同一水平、垂直方向上;
可以支持自动换行、换列(移动端-webkit-box暂不支持,好消息是从iOS9.2、Android4.4开始都支持新flex了);
可以指定 flex 布局下的元素如何分配空间,可以让元素自动占满父元素剩余空间;
可以指定 flex 布局下的元素的展示方向,排列方式。
这里面的子元素同一水平、垂直方向展示对我们很有帮助,它使我们更容易控制子元素的排列,而不会错位。
使用 flex 布局与 float 布局不同的地方在于,移动端目前主要还是-webkit-box,因此图片个数不同时,我们需要使用不同的html,组合出不同的块。
flex 布局上下划分
来,我们快动手分块吧!新解决方案出现导致的肾上腺素上升,使我们迫不及待使用了传统css文档流自上而下的方式来划分,我称为上下划分,如下图:
上面一块包含左侧1个2/3的大块,右侧2个1/3的小块,下面一块则是3个1/3的小块。
我们指定2/3的大块宽度是66.6%,1/3的小块宽度是33.3%(实际可以使用-webkit-box-flex来分配,这里为了下面的计算方便)。
来看下实际效果,你也可以猛击demo来查看源码:
demo中我们看到中间那条竖空白间隙错位了,为什么?按照预期我们上面块左侧宽度66.6%,下面块左侧宽度33.3% + 33.3%,两个宽度应该相等才对。
然而我们忽略了flex一个重要特性,子元素会自动占满父元素剩余空间,这时子元素宽度计算受flex控制,下面块的3个子元素宽度计算并非一定是相等的,会有些许差异,此时66.6% != 33.3% + 33.3%。
怎么破!别急,让我们冷静下来重新思考如何划分。
flex 布局左右划分
问题在于竖间隙涉及到的左右侧宽度计算不稳定,既然如此,我们可以考虑依据竖间隙左右划分,排除不稳定因素,如下图:
这样就解决了竖间隙错位问题,但我们依然有所担心,中间的横间隙会错位吗?我们来算一下。
整体父元素宽度确定,为W;
整体父元素高度由子元素撑开,不确定;
左侧大块高度:左侧flex父元素宽度(W * 66.6%) * 100% = W * 66.6%;
左侧小块高度:左侧flex父元素宽度( W * 66.6%) * 50% = W * 33.3%;
右侧小块高度:右侧flex父元素宽度( W * 33.3%) * 100% = W * 33.3%。
依然是66.6%与33.3% + 33.3%的等式,但这次高度计算会受 flex 影响吗?
不会,因为此时整体父元素的高度是不确定的,是由子元素内容撑开的,flex的高度也是由子元素来撑开的。
最终 66.6% === 33.3% + 33.3%
我们来看下伪码,猛击我看demo:
XHTML
- <div class="wrap-box wrap-6">
- <div class="flex-inner">
- <div class="flex-box1 flex-item">div>
- <div class="flex-box2">
- <div class="flex-item">div>
- <div class="flex-item">div>
- div>
- div>
- <div class="flex-inner">
- <div class="flex-item">div>
- <div class="flex-item">div>
- <div class="flex-item">div>
- div>
- div>
CSS
- .wrap-box {
- display: -webkit-box;
- }
- .flex-inner {
- -webkit-box-flex: 1;
- display: -webkit-box;
- }
- .flex-item {
- -webkit-box-flex: 1;
- position: relative;
- }
- .wrap-6 {
- -webkit-box-orient: horizontal;
- }
- .wrap-6 .flex-inner {
- -webkit-box-flex: 0;
- -webkit-box-orient: vertical;
- }
- .wrap-6 .flex-inner:first-child {
- width: 66.6%;
- }
- .wrap-6 .flex-inner:last-child {
- width: 33.3%;
- }
- .wrap-6 .flex-item {
- padding-top: 100%;
- }
- .wrap-6 .flex-box2 .flex-item {
- padding-top: 50%;
- }
- .wrap-6 .flex-box2 {
- display: -webkit-box;
- -webkit-box-orient: horizontal;
- }
- .wrap-6 .flex-inner:first-child,
- .wrap-6 .flex-box2 .flex-item:first-child {
- margin-right: 1px;
- }
- .wrap-6 .flex-box1,
- .wrap-6 .flex-inner:last-child .flex-item:first-child,
- .wrap-6 .flex-inner:last-child .flex-item:nth-child(2) {
- margin-bottom: 1px;
- }
实际效果:
以上就是本文的全部内容,希望对大家的学习有所帮助。
本站声明:
1、本站所有资源均来源于互联网,不保证100%完整、不提供任何技术支持;
2、本站所发布的文章以及附件仅限用于学习和研究目的;不得将用于商业或者非法用途;否则由此产生的法律后果,本站概不负责!
相关内容
- CSS icon图标之纯CSS实现带动画效果的天气图标 css3使用svg实现天气预报图标动画特效源码CSS3实现带动画的天气icon图标特效源码纯CSS3实现的动态天气小图标特效源码纯CSS3实现天气动画图标特效源码纯css实现乌云密布的天气图标效果
- CSS3+Sprite实现僵尸行走动画特效源码 CSS3 steps属性制作僵尸行Sprite动画特效源码纯CSS3实现的人物行走动画特效源码
- 结合CSS3的布局新特征谈谈常见布局方法CSS3哪些新特性值得称赞
- css3 border旋转时的动画应用CSS border虚线边框属性教程CSS中使用border来创建三角形的基本方法讲解CSS3 flex布局之快速实现BorderLayout布局深入浅析css3 border-image边框图像详解实例讲解CSS3中的border-radius属性详解CSS3中border-image的使用CSS3使用border-radius属性制作圆角css border属性的使用方法和技巧
- css实现鼠标滑过五角星高亮效果 纯CSS3实现鼠标滑过按钮动画第二节CSS实现鼠标滑过鼠标点击代码写法CSS3制作炫酷带方向感应的鼠标滑过图片3D动画纯CSS3实现8组超炫酷鼠标滑过图片动画纯CSS实现鼠标滑过显示子菜单的二级菜单效果CSS实现鼠标滑过文字弹出一段说明文字无JS代码纯css实现鼠标滑过弹出层效果CSS控制当鼠标滑过时更换图片的效果css实现鼠标滑过改变文字(中文变英文)使用css的filter写鼠标滑过效果的实现示例
- CSS学习总结 简要总结CSS编程中的响应式设计CSS的一些编程规范总结10个必备的CSS技巧总结CSS清除浮动方法总结css 调试方法与经验总结CSS多浏览器兼容总结(个人经验)CSS样式的基础学习总结深入CSS3 动画效果的总结详解IE下css常见问题总结及解决CSS(Cascading Style Sheet)级联样式表常用术语总结
- CSS文本超出div或者span时用省略号代替 文本超出部分隐藏的两种方法css3实现渐变、阴影、超出指定文本省略号显示等一些效果实例CSS文本超出指定宽度后隐藏并显示为省略号的实现方法CSS控制文本超出指定宽度显示省略号和文本不换行效果的实现CSS超出文本指定宽度用省略号代替和文本不换行css实现li中文本超出行宽自动隐藏CSS文本超出2行就隐藏并且显示省略号
- CSS3实现swap交换动画css3中transform属性实现的4种功能详解CSS3.0(Cascading Style Sheet) 层叠级联样式表纯CSS3实现div按照顺序出入效果CSS3实现列表无限滚动/轮播效果css3 利用transform-origin 实现圆点分布在大圆上布局及旋转特效CSS3实现的侧滑菜单CSS3实现的3D隧道效果用CSS3画一个爱心css3 实现文字闪烁效果的三种方式示例代码六种css3实现的边框过渡效果
- 让IE6支持兼容min-width、max-width CSS样式属性的方法浅谈前端制作中,IE6还有必要兼容吗使用语义化标签去写你的HTML 兼容IE6,7,8兼容IE6、IE7的min-width、max-width写法一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10Css样式兼容IE6,IE7,FIREFOX的浏览器的写法示例介绍兼容IE6的min-width、min-height的简单方法
- 兼容IE6、IE7的min-width、max-width写法浅谈前端制作中,IE6还有必要兼容吗使用语义化标签去写你的HTML 兼容IE6,7,8让IE6支持兼容min-width、max-width CSS样式属性的方法一行代码解决各种IE兼容问题,IE6,IE7,IE8,IE9,IE10Css样式兼容IE6,IE7,FIREFOX的浏览器的写法示例介绍兼容IE6的min-width、min-height的简单方法
点击排行
本栏推荐
