当前位置: 首页 > Web前端 > HTML

css编写建议及性能优化总结

时间:2023-04-02 20:13:20 HTML

1.前言距离国庆、中秋只有几天的时间,假期即将开始。首先祝大家节日快乐!之前写过js的写作建议和技巧,今天就来说说css吧!说到css,每个网页都离不开css,但是对于css,很多开发者的想法是,只要能用css进行布局,就可以排出效果图,其他细节或者优化不需要考虑。但是我觉得css不仅仅是完成页面的布局。它还需要考虑很多细节并对其进行优化。用它!所以今天就分享一下我总结的css写法建议和一些性能优化问题!希望能帮助大家对magiccss有一个全新的认识,当然如果大家觉得还有什么其他的建议。欢迎咨询!2、CSS渲染规则首选。你可能知道,CSS渲染规则是从右到左渲染!下面的chestnut.navh3a{font-size:14px;}渲染过程大致是:先找到所有a,沿着a的父元素找到h3,然后沿着h3找到.nav。如果中途找到符合匹配规则的节点,则将其添加到结果集中。如果没有找到根元素html的匹配,则不会遍历这条路径,从下一个a开始重复查找(只要页面最右边有多个节点是a)。参考:CSS选择器从右到左的匹配规则3.嵌套层数不能超过3层。一般来说,元素的嵌套层数不能超过3层。过多的嵌套会导致代码变得臃肿、冗余、复杂。这样导致css文件体积变大,造成性能浪费,影响渲染速度!并且过分依赖HTML文档结构。这样的css样式维护起来极其麻烦。如果以后要修改样式,可能需要用!important覆盖。4.风格重置我目前是保持中立的态度,因为看网上的文章,有人支持使用风格重置,有人不支持使用,谁也说服不了谁。在我自己的情况下,我使用过stylereset,不过是比较简单的总结,代码如下!body,dl,dd,h1,h2,h3,h4,h5,h6,p,form,ol,ul{margin:0;padding:0;}h1,h2,h3,h4,h5,h6{font-weight:normal;}ol,ul{list-style:none;}h1{font-size:24px;}h2{font-size:20px;}h3{字体大小:18px;}h4{字体大小:16px;}h5{字体大小:14px;}h6{字体大小:12px;}5.样式层级首先css样式层级整理如下!important>inlinestyle>idstyle>classstyle>tagnamestyle。那么有一点要提的是组合选择器使用的权重会叠加。比如id的权重是100,class是10,标签名是1(其他不清楚)!那么div.test-class的权重是11,div#test的权重是101,比如有一个div

然后样式权重值方面是div{color:red!improtant;}(大于下面的所有内容)
(大于111)div#test.test-class(111)#id.test-class(110)div#test(101)#test(100)div.test-class(11).test-class(10)div(1)*(Lessthan1)6.inline-block的margin没有解释。看上图,几个p元素的margin和padding都是0,但是还有margin。对此有两种解决方法:1.删除代码前的空行,删除带有display:inline-block的元素前的空行,如下2.将父元素的font-size设置为0,见图7直接为此。图片需要设置宽高。如果页面使用了img标签,那么强烈推荐img来设置宽高。目的是为了保证在因为网速不好或者其他原因导致图片无法加载的时候,不会把布局搞乱。下面举个栗子,一个很常见的布局。但是以防万一,图片加载不出来,推荐的方案是第一种,显示一张默认图片,即使不显示默认图片,也让图片有占位的效果,保证布局会不要被搞砸了!如果图片加载不出来,而且img没有设置宽高,就会像下面这样,而且布局会乱七八糟!关于设置宽高,顺便说几点。1、对于PC站,建议在img标签的属性中设置width和height。这样就避免了css加载错位。2.对于移动站点,建议使用CSS来设置img的宽高,因为移动站点需要适配,属性中设置宽高不灵活。比如你用rem布局,就不能在properties中设置。宽度和高度。3.如果图片不是固定的,但是有max-width和max-height,那么建议在img的父元素中设置宽高。img根据父元素的宽高设置max-width和max-height。8.任何元素都是垂直居中的。这里只放图片,8-1.table-cell8-2.flex8-3.position,transform8-4.position,margin的方法不推荐,因为这种写法,.div2的宽度必须设置高度,否则为100%;例如,设置top:0;bottom:0;与设置height:100%;效果相同。如果你想避免它,你必须设置高度。9、图片预加载这里所说的预加载不是懒加载。首先根据我个人的科普理解,懒加载和预加载的区别。延迟加载:页面加载时,先加载部分内容(一般是先加载首屏内容),需要加载的时候再加载其他内容!预加载:页面加载时,先加载一部分内容(通常是先加载首屏内容),等到第一部分内容(通常是首屏内容)加载完毕后,再加载其他内容。这两种方式都是为了减少用户进入网站的时间,更快的看到第一屏的内容!下面举个栗子,在html中加入#preloader元素,就可以通过CSS的background属性将图片预加载到屏幕外的背景上。只要这些图像的路径保持不变,当在网页的其他地方调用它们时,浏览器将在渲染期间使用预加载(缓存)的图像。简单、高效且不需要任何JavaScript。#preloader{/*要预加载的图片*/background:url(image1.jpg)no-repeat,url(image2.jpg)no-repeat,url(image3.jpg)no-repeat;宽度:0px;高度:0px;display:inline;}但是这样做会有一个问题,因为#preloader预加载的图片会和页面的其他内容一起加载,增加页面的整体加载时间。所以需要用js控制functionpreloader(urlArr,obj){varbgText='';for(vari=0,len=urlArr.length;i而不是@import。14.想想如何从PSD文件中写出代码并接收效果图。先不看图片,先看psd文件。想想怎么排版,那些模块可以做成公共模块,模块应该怎么命名,写样式等等!当我们拿到设计师给的PSD后,首先不要急着写CSS代码,先分析整个页面,先思考以下几点:  (1)分析哪些模块是通用的page,常见的常用模块有Head、bottom、menubar、floatingbutton等。  (2)分析模块的样式,提取常用样式。常用样式包括常用状态样式,如按钮、输入框、下拉框等。选中状态、禁用状态等样式。15、小图标解决方案一个网站必须有很多小图标。对于这些小图标,目前有两种解决方案,cssSprite(雪碧)、字体图标、将图片转base64。比较下面两种方法!cssSprite:将所有的icon图片组合成一个png图片,使用in,设置节点的宽高,添加bacgroud-position。以背景图像的形式显示所需的图标。如果一个网站有20个图标,那么它需要请求20次。使用cssSprite,只需要一次请求,大大减少了http请求。缺点是管理不灵活。如果需要添加图标,需要更改合并图片的源文件,并且图标定位一定要规范,否则很容易干扰图片之间的定位!字体图标:简单粗暴的理解就是把所有的图标都当成一种字体!这样你就不用索要照片了。通常,类用于定义图标。更换图标时,只需更改样式名称即可。易于管理,语义清晰,缩放灵活,不会造成失真。但仅支持单色图像。base64:另一种方案是将小图标图片转成base64编码,这样就不需要请求图片了,将base64编码直接集成到js或css中,可以防止一些相对路径或图片被删除等。问题导致图像出现404错误。但是想办法会生成一大串base64编码。一般来说,8K以下的图片都会转成base64编码。如果将一张50K的图片转换成base64编码,那么会生成65000多个字符的base64编码,字符的大小已经接近70K了!建议是:只将8K以下的图片转成base64编码。十六、不要在ID选择器前面嵌套或写标签1、ID在页面上是唯一的,而且有这么大的权重。在前面嵌套(.content#test)是一种性能浪费。并编写更多无意义的代码!虽然是一句话,但还是有人会犯这样的错误!2.除了嵌套,id前面不需要加tags或者其他选择器。例如div#test或.test#test。这两种方法完全是多余的,原因是ID在页面上是唯一的。前置任何东西都是多余的!17.将通用样式抽取封装成通用样式。将长段落的相同样式提取出来作为常用样式使用,比如常见的clearfloat,单行超出时的省略号,多行超出时的省略号等。下面举个栗子/*省略号之外*//*

*/.text-ellipsis{overflow:hidden;空白:nowrap;text-overflow:ellipsis;}/*Clearfloat*//*
*/.clearfix:after{display:block;内容:'';明确:两者;height:0;}18、css3动画的优化在我之前的文章(移动web开发问题及优化总结)中也写过这个优化建议。我之前提过的两个建议是:1、CSS3动画或者transition,尽量用transform和opacity来实现动画,不要用left和top。2、动画和过渡用css3可以解决的就不要用js了。如果是复杂的动画,可以使用css3+js(或者html5+css3+js)配合开发。效果只是出乎意料,但并非不可能。下面再补充一句:动画不要太多,尤其是手机网站,否则会出现性能问题,比如cpu一下子占满,掉帧等。另外,不建议使用硬件加速对于每个元素。参考链接:CSS动画性能优化css3动画性能优化CSS动画硬件加速网页动画19.设置最小body宽度这是PC站会出现的问题,大家应该都知道。简单说一下吧!比如下面的栗子是一个页面内容宽度为1200px的网站。看起来很正常,没什么特别的。如果此时,缩小页面窗口。如果小于1200px,页面会出现滚动条,然后将滚动条拖到最右边,这样你会发现顶部图片和背景的部分被破坏了!解决这个问题也很简单,给body加上min-width就可以了。该值是页面宽度的值。body{min-width:1200px;}重复上一步。不管你怎么改变浏览器窗口的大小,都是正常的。之所以会出现这样的问题是因为,比如窗口缩小到900px时,小于1200px的内容宽度。即出现水平滚动条,但是body的宽度是900px。这时候如果某些元素(比如图片的灰色区域和粉色图片)相对于body的宽度设置为100%,那么这些元素的宽度其实就是900px。所以那些异象就会有错!解决方案是在body中添加min-width。使正文的最小宽度不小于内容的宽度!20.总结至于我的css编写建议和性能优化的总结,就这些吧。CSS绝对不是那种只要会用就能用的语言,或者说只要用CSS就可以做布局的语言。CSS给我的感觉是非常容易上手,但是想要用好CSS,还是要花时间研究一下。css或者css3,还有很多可以优化的地方。用好css或者css3可以省去很多js代码,做出来的东西也很神奇。你还是要继续学习知识!如果您认为我的文章有任何地方写得不好或错误,请指正。如果大家还有其他的建议,欢迎提出建议,让大家互相交流,互相学习,共同进步!最后祝大家节日快乐!--------------------------华丽的分割线-------------------------想了解更多,关注我微信公众号:手厚书阁

猜你喜欢