可以让你受益匪浅的10个css使用技巧,值得收藏
wxin55 2024-11-18 17:52 10 浏览 0 评论
◆◆CSS技巧大杂烩◆◆
01.Safari 中z-index的层级问题
在Safari浏览器下(此Safari浏览器包括iOS的Safari,iPhone上的微信浏览器,以及Mac OS X系统的Safari浏览器),当我们使用3D transform变换的时候,如果祖先元素没有overflow:hidden/scroll/auto等限制,则会直接忽略自身和其他元素的z-index层叠顺序设置,而直接使用真实世界的3D视角进行渲染。例如下面的场景,图中红框里面的模块,使用 3D transform变换,进行旋转动画,但是在Safari浏览器下,忽略了二维码遮罩层的z-index,结果使用了真实世界的3D视角进行渲染。出现了重叠的bug:
解决方法:
- 父级,任意父级,非body级别,设置overflow:hidden可恢复和其他浏览器一样的渲染。
- 以毒攻毒。有时候,页面复杂,我们不能给父级设置overflow:hidden,那么可以将被影响的元素设置一个足够大的translateZ值就可以,如translateZ(100px)。
02.文字居中兼容
正常处理文字上下居中的手段是让元素height和line-height相等,但是安卓环境下当字体大小<14px/0.7rem的时候会出现居中失效的情况。
解决方法:
- 判断系统环境(安卓/IOS)分别作微调;
- font-size、height、width全部放大为2倍,利用transform进行缩放
height: 1rem; width: 2rem; font-size: 0.5rem; 变成: height: 2rem; width: 4rem; font-size: 1rem; transform: scale(0.5);
但由于放大之后占据空间,左右会留白,需要利用margin负值 margin: -0.35rem -0.45rem 0;调整
3.有解决方案是将rem改为px。
03.2个a标签做90度旋转bug
定义了一个动画效果如下(sass代码):
@keyframes official-featured_rotate { 10%,50%{ transform:rotateY(90deg); } 60%,100%{ transform:rotateY(0deg); } } &-rotate { position: absolute; width: rem(350/2); height: rem(160/2); transform-style:preserve-3d; transform:translate3d(0,0,0); &.ani_rotate { animation:official-featured_rotate 5s linear 0s infinite; animation-delay: 2s; } &__item { width: rem(350/2); height: rem(160/2); position: absolute; &:nth-child(1) { transform: translateZ(rem(350/4)); } &:nth-child(2) { transform: rotateY(90deg) translate3d(0,0,rem(350/4)); } } }
这里是2个a标签,做90度的旋转效果使得两个a可以循环切换展示。这里2个的基本样式是一致的,宽高也一样。但是在安卓下(ios正常)只有打开页面能看到的第一个a标签能正常跳转,能正常绑定事件。第二个a不能跳转,我就想那我通过点击事件来跳转可以不,结果绑定任何事件都不生效。
解决方法:
然后测试发现,在旋转过程中(只要未完全旋转90度)点击还是能一切正常的。于是把旋转角度改为了89.99度,一切正常。动画效果修改为:
@keyframes official-featured_rotate { 10%,50%{ transform:rotateY(-89.99deg); } 60%,100%{ transform:rotateY(0deg); } }
后来查找了一下stackoverflow(https://stackoverflow.com/questions/23548612/cant-click-on-buttons-after-css-transform)。里面也是说了这个解决方法。
04.使用currentColor来简化css
设置border-color、background-color等颜色的时候,可以使用currentColor[与当前元素的字体颜色相同]来简化css。
.div{ color: rgba(0,0,0,.85); font-weight: 500; text-align: left; padding: 20px; border: solid 1px currentColor; }
05.灰色滤镜做样式的disable
灰色图可以直接加滤镜,不用切多一张图。如图:
解决方法:
.coupon_style .disable { -webkit-filter: grayscale(1); }
06.曲线阴影的实现
- 多个阴影重叠,就是正常阴影+曲线阴影
- 正常情况下,有个矩形有正常的阴影,作为主投影,这时候再定义一个有一定弧度圆角的圆角矩形,然后放在正常矩形的下面,并露出一点点底部有弧度的阴影,这样的话就可以形成曲线投影的效果。
效果:
代码:
07.翘边阴影的实现
利用:before和:after,加上绝对定位的性质,可以形成一个矩形,这个时候结合CSS3的倾斜属性skew和旋转属性rote。就可以形成一个有旋转角度的平行四边形,这个时候再和原来的矩形重叠,则可产生翘边效果。
效果:
代码:
08.用-webkit-mask实现蒙版
效果图:
代码:
background: url("images/logo.png") no-repeat;-webkit-mask : url("images/mask.png");
mask.png中黑色代表是不透明的(alpha:1),其他部分为透明的(alpha:0),将它盖在背景图上,注意:背景图对应mask.png中透明的位置也会变成透明,留下非透明的形状,即背景图的可见形状与mask.png的可见形状相同,即为"蒙版"。
09.图片自适应占位方式
当图片未正确加载,或加载完成前,由于图片高度为0,其容器会因为没有内容,导致容器无法撑高而塌陷,而如果加载较慢则会在图片加载完成后出现闪烁的情况。
css中,当padding-top/bottom值为百分比时,其值都是以其父元素的宽度为参照对象。因此对于宽高比例固定的情况,可以利用padding-top/bottom用于图片自适应占位,解决页面闪烁的问题。
如果仅设置值padding-top/bottom为百分比,会出现一个问题,就是该方法容器的max-height属性会失效,就无法限制容器的最大高度了。
因此,可以给容器添加一个伪元素的子元素用于撑起内容,该子元素拥有一个padding-top:100%,同时给容器一个max-height尝试限制容器的高度,最后内容用绝对定位的方式添加即可。如:
#container{ width: 50%; max-height:300px; background-color:#ddd; /*由于margin存在塌陷的问题,需要通过构建BFC来保证容器不会受到影响,因此这里可以给容器一个overflow:hidden来保证伪元素的margin不会塌陷。*/ overflow:hidden; position: relative; /* 父容器相对定位 */ } .placeholder::after{ content:""; display:block; margin-top:100%; } img{ position:absolute; /* 内容绝对定位 */ left: 50%; top: 50%; transform: translateX(-50%) translateY(-50%); /* 控制内容绝对定位位置 */ width:80%; /* 控制图片不溢出,因此这里使用的图片实际宽度受父容器影响 */ }
但是对于宽高比例不定的图片来说,这样做可能导致图片显示不全,使用时要注意。
10.页面自适应最佳实践
经过大型项目实践,下面这段CSS是最好的基于rem和vm和calc实践代码:
html { font-size: 16px; } @media screen and (min-width: 375px) { html { /* iPhone6的375px尺寸作为16px基准,414px正好18px大小, 600 20px */ font-size: calc(100% + 2 * (100vw - 375px) / 39); font-size: calc(16px + 2 * (100vw - 375px) / 39); } } @media screen and (min-width: 414px) { html { /* 414px-1000px每100像素宽字体增加1px(18px-22px) */ font-size: calc(112.5% + 4 * (100vw - 414px) / 586); font-size: calc(18px + 4 * (100vw - 414px) / 586); } } @media screen and (min-width: 600px) { html { /* 600px-1000px每100像素宽字体增加1px(20px-24px) */ font-size: calc(125% + 4 * (100vw - 600px) / 400); font-size: calc(20px + 4 * (100vw - 600px) / 400); } } @media screen and (min-width: 1000px) { html { /* 1000px往后是每100像素0.5px增加 */ font-size: calc(137.5% + 6 * (100vw - 1000px) / 1000); font-size: calc(22px + 6 * (100vw - 1000px) / 1000); } }
◆◆最后◆◆
有兴趣学习前端的小伙伴们,可以私信回复(1)
感谢您的阅读!
相关推荐
- 总结雅虎前端性能优化技巧(16条)
-
前言在日常开发中,有很多场景需要我们去做好前端优化,为了防止遗忘,加深记忆,今天参阅了一些资料以及自己的一些总结,梳理出来15条优化技巧。1.合并文件css、js合并,减少http请求数,每次http...
- 前端掉坑血泪史!4 个 React 性能优化绝招让页面秒开
-
在前端圈子里摸爬滚打这么多年,我发现React开发时踩坑的经历大家都大同小异。页面加载慢、组件频繁重渲染、状态管理混乱……这些痛点,相信不少前端工程师都感同身受。别愁!今天就给大家分享4个超...
- Qwik:革新Web开发的新框架
-
听说关注我的人,都实现了财富自由!你还在等什么?赶紧加入我们,一起走向人生巅峰!Qwik:革新Web开发的新框架Qwik橫空出世:一场颠覆前端格局的革命?是炒作还是未来?前端框架的更新迭代速度,如同...
- 大模型服务平台百炼使用
-
提供完整的模型训练、微调、评估等产品工具,预置丰富的应用插件,提供便捷的集成方式,更快更高效地完成大模型应用的构建。一、通过变量的方式使用平台模板一个好的Prompt可以更好的让模型理解我们的需求,产...
- Vue应用性能优化实战:8 个提升页面加载速度的关键策略
-
一、构建优化与代码精简1.1代码分割与异步加载路由级代码分割:使用动态导入语法拆分路由组件组件级懒加载:结合Suspense实现按需加载javascript//vue-router4.x配置...
- 前端里那些你不知道的事儿之 【window.onload】
-
作者:京东科技孙凯一、前言相信很多前端开发者在做项目时同时也都做过页面性能优化,这不单是前端的必备职业技能,也是考验一个前端基础是否扎实的考点,而性能指标也通常是每一个开发者的绩效之一。尤其马上接近...
- 谷歌站长后台的“核心网页指标”不合格先优化哪个最有效?
-
根据对上千个网站案例的分析,90%的站长在修复时都陷入“盲目优化”误区——要么死磕服务器配置却忽略图片规范,要么过度压缩JS反而引发CLS布局错位。事实上,移动端页面抖动(CLS)才是60%中小网站的...
- Vue3 开发效率拉胯?这 10 个技巧让你开发速度翻倍!
-
写Vue3项目时,是不是经常被数据更新延迟、组件间传值混乱、页面卡顿这些问题搞得焦头烂额?别担心!今天带来10个超实用的Vue3实战技巧,全是从真实项目中总结出来的“血与泪”经验,帮你...
- 2024年的JavaScript性能优化:仍然重要吗?
-
#记录我的9月生活#在不断发展的Web开发领域,新的JavaScript框架和库令人眼花缭乱,很容易让人忽视一些基本的东西。但在这股兴奋之中,性能作为一个卓越用户体验的基石,不能被忽略。为什么?因为...
- JS 图片简易压缩【实践】
-
作者:政采云前端团队转发链接:https://juejin.im/post/5ea574cc518825736e57fcca前言说起图片压缩,大家想到的或者平时用到的很多工具都可以实现,例如,客户端类...
- Vue3 开发总踩坑?这 10 个技巧让你少走半年弯路!
-
前端开发的路上,Vue3虽然强大,但坑也不少!性能优化总没效果?复杂组件通信一头雾水?别担心!今天分享10个超实用的Vue3实战技巧,全是一线开发总结的经验,帮你轻松避开开发雷区,效率直接拉...
- 前端分享-Vue首屏加载优化
-
首屏加载速度直接影响用户留存率——当加载时间超过3秒,53%的用户会直接离开(网上来的数据)。Vue单页应用尤需重视,因为传统打包方案会将所有资源打包成巨大的vendor.js,导致用户首次访问时像下...
- Core Web Vitals 变了,网站性能这件事得重新关注
-
现在做网站优化,不能只看速度条,不管你是搞外贸独立站,还是给品牌建站,体验页面这件事你迟早得面对。谷歌这两年把网站的“体验感”提得越来越多,尤其是CoreWebVitals(网页核心指标)一出来,...
- 页面卡顿到崩溃?5 个实战技巧让前端性能飙升 80%!
-
作为前端工程师,你有没有遇到过这种情况:精心开发的页面,一上线就被用户吐槽卡顿、加载缓慢,甚至频繁崩溃。明明代码逻辑没问题,可性能就是上不去,这到底是哪里出了问题?别着急,今天就来分享5个超级实用...
- 周末复习前端js基础知识点总结一,记录完之后好复习(大佬勿喷)
-
一、深浅拷贝知识1、基本数据类型只有赋值没有拷贝2、数组和对象的赋值是浅拷贝3、结构赋值是深拷贝还是浅拷贝?二、实现深拷贝的几种常用方法方法1、通过json方法深拷贝方法2.基本的封装深拷贝的方法采用...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- hive行转列函数 (63)
- sourcemap文件是什么 (54)
- display none 隐藏后怎么显示 (56)
- 共享锁和排他锁的区别 (51)
- httpservletrequest 获取参数 (64)
- jstl包 (64)
- qsharedmemory (50)
- watch computed (53)
- java中switch (68)
- date.now (55)
- git-bash (56)
- 盒子垂直居中 (68)
- npm是什么命令 (62)
- python中+=代表什么 (70)
- fsimage (51)
- nginx break (61)
- mysql分区表的优缺点 (53)
- centos7切换到图形界面 (55)
- 前端深拷贝 (62)
- kmp模式匹配算法 (57)
- jsjson字符串转json对象 (53)
- jdbc connection (61)
- javascript字符串转换为数字 (54)
- mybatis 使用 (73)
- 安装mysql数据库 (55)