【整理】让你更有效率的20条CSS编码技巧
时间:2023-04-02 17:24:08
HTML
本文汇集了各大CSS网站总结推荐的20条实用规则和实战经验,与大家分享。有些是给CSS初学者的,有些知识点是进阶的。希望大家能从这篇文章中学到有用的知识。好的,我们开始吧。1.请注意边距折叠与大多数其他属性不同。当顶部和底部的垂直边距同时存在时,会发生边距折叠。这意味着当一个元素的底边接触到另一个元素的顶边时,只会保留两个边距值中较大的一个。例如:HTML
CSS.square{width:80px;height:80px;}.red{背景色:#F44336;margin-bottom:40px;}.blue{背景色:#2196F3;margin-top:30px;}红色方块和蓝色方块的上下间距是40px,不是70px。有很多方法可以解决margincollapsing问题。对于初学者来说,最简单的方法是对所有元素仅在一个方向上使用边距。例如,我们对所有上下边距都使用margin-bottom。2、使用flex进行布局flex弹性布局的出现是有原因的。floating和inline-block虽然也可以实现很多布局效果,但本质上是文本和块元素布局的工具,并不是针对整个网页的。Flex使按我们期望的方式创建布局变得容易。flex有一组“flexcontainer”的属性和一组“flexitem”的属性,一旦你学会了它们,做任何响应式布局都是小菜一碟。目前各种浏览器最新版本支持flex都没有问题,所以还是多用flex布局吧。.container{display:flex;}3.重置元素的CSS样式尽管这些年来已经有了很大的改进,但是不同浏览器中各种元素的默认样式还是有很大的差异。解决这个问题最好的办法就是在CSS开头为所有元素设置一个通用的CSSReset重置代码,这样你在布局时就没有任何默认的内外边距,这样效果就统一了。网上已经有成熟的CSS代码库为我们解决浏览器不一致的问题,比如normalize.css、minireset、ress,大家可以在项目中引用。如果你不想使用第三方代码库,你可以使用下面的样式来做一个非常基本的CSS重置:*{margin:0;填充:0;box-sizing:border-box;}上面的代码看起来有点霸道,将所有元素的内外边距都设置为0,也正是不受这些默认的内外边距的影响,让我们后续的CSS设置变得更加简单。同时box-sizing:border-box也是一个很棒的设置,我们稍后会介绍。4.所有元素都设置为Border-box。大多数初学者不知道box-sizing的属性,但它实际上非常重要。box-sizing属性有两个值:content-box(默认值)——当我们设置元素的宽度或高度时,我们设置了它的内容的大小。排除所有填充和边框值。例如,一个宽度为100、padding为10的div将占用120个像素(100+2*10)。border-box-填充和边框包含在元素的宽度或高度中。设置为width:100px和box-sizing:border-box的div元素总宽度为100px,无论其填充和边框如何。多少。将所有元素设置为border-box可以更轻松地更改元素的大小,而不必担心padding或border值将元素拉伸变形或包裹它们。5.使用图片作为背景在页面中添加图片时,尤其是图片需要响应时,最好使用background属性来引入图片,而不是
![]()
标签。这对于图像来说可能看起来更复杂,但实际上它使图像样式化变得更加容易。有了background-size、background-position等属性,可以更方便的保持或改变图片的原始尺寸和纵横比。例如HTML
CSSimg{width:300px;高度:200px;}div{宽度:300px;高度:200px;背景:url('https://tutorialzine.com/media/2016/08/bicycle.jpg');背景位置:中心中心;背景大小:封面;}部分{浮动:左;margin:15px;}background引入其中一张图片缺点是页面的网络可访问性会受到轻微影响,因为屏幕阅读器和搜索引擎无法正确获取图像。这个问题可以通过CSS的object-fit属性来解决,目前除了IE之外的所有浏览器都可以使用object-fit。6.更好的表格边框HTML中的表格总是很丑陋。它们很难做出响应,而且通常很难设计风格。例如,如果你想给一个表格和它的单元格添加一个简单的边框,最可能的结果是:如你所见,有很多重复的边框,看起来很难看。这里有一个快速去除所有双边框的方法:border-collapse:collapse,设置这个属性,表格的边框看起来顺眼多了:7.更友善的评论CSS也许不是一种编程语言,而是它的代码仍然需要记录在案。添加一些简单的注释可以对代码进行分类区分,方便自己和同事后期维护。对于大面积划分或重要组件,可以使用如下注释样式:/*----------------#Header----------------*/header{}headernav{}/*----------------#Slideshow----------------*/.slideshow{}for细节和不太重要的样式可以在一行中注释:/*FooterButtons*/.footerbutton{}.footerbutton:hover{}另外,请记住,CSS中没有//注释,只有/**/注意:/*正确*/p{padding:15px;/*border:1pxsolid#222;*/}/*错误*/p{padding:15px;//border:1pxsolid#222;}8.短横线行命名当类或ID包含多个单词时,应使用连字符(-)。CSS不区分大小写,因此不能使用驼峰式大小写。同样,下划线连接的命名方式在CSS中也不推荐。/*true*/.footer-column-left{}/*false*/.footerColumnLeft{}.footer_column_left{}命名的时候也可以考虑BEM,它遵循一套原则,提供基于组件和添加一致性的开发方法。9、不要重复设置值大多数CSS属性都是??从DOM树中的上层元素继承而来的,所以被命名为层叠样式表。以font属性为例-它总是从父级继承,您不必为页面上的每个元素单独设置它。只需将你要设置的字体样式添加到或元素中,让它们自动向下继承即可。html{font:normal16px/1.4sans-serif;}那么我们就可以一次统一更改页面上所有的文字样式。当然,CSS中并不是所有的属性都是可继承的,我们仍然需要在每个元素上单独设置它们。10.使用transform属性创建动画。最好使用transform()函数来创建元素的位移或大小动画。尽量不要直接改变元素的width、height、left/top/bottom/right属性值。在下面的示例中,我们向.ball元素添加了一个从左到右的移动动画。建议使用transform:translateX()函数代替left属性。.ball{左:50px;transition:0.4sease-out;}/*不推荐*/.ball.slide-out{left:500px;}/*推荐*/.ball.slide-out{transform:translateX(450px);}transformandall其功能(平移、旋转、缩放等)几乎没有浏览器兼容性问题,可以随意使用。11.不要DIY,多用代码库CSS社区很大,新的代码库不断出现。它们有多种用途,从用于构建响应式应用程序的小块到整体框架。他们中的大多数也是开源的。下次遇到CSS问题时,请在全力以赴之前检查一下Github或Codepen上是否已有可用的解决方案。12.保持选择器的低权重CSS选择器并非生而平等。刚开始学习CSS的时候,我一直以为选择器会覆盖它上面的所有内容。然而,情况并非如此,正如我们在下面的示例中所说明的:HTML
ButtonCSSa{color:#fff;padding:15px;}a#blue-btn{background-color:blue;}a.active{background-color:red;}我们希望.active类中设置的样式生效,让按钮变成红色。但它不会起作用,因为按钮上有一个ID选择器,它还设置了背景颜色,而ID选择器具有更高的权重,所以按钮的颜色是蓝色。选择器的权重规范如下:ID(#id)>Class(.class)>Type(如header)权重也会叠加,所以a#button.active的权重高于a#按钮。一开始使用高权重的选择器会导致你在后续的维护中继续使用更高权重的选择器,最后选择使用!important。不推荐这样做,具体原因后面会说。13.不要使用!important说真的,不要使用!important。现在看起来像是一个快速修复,但最终可能会被大规模重写。相反,我们应该花时间找出CSS选择器不起作用的原因并进行更改。唯一可以使用!important的时候是当你想覆盖HTML中的内联样式时,但内联样式也是一种不好的做法,应该尽可能避免。14.使用text-transform将字母转为大写本文适合英文环境,不适合中文。在HTML中,可以用全部大写字母写一个词来表达强调的意思。例如:EmployeesMUSTDetailahelmet!
如果需要将某个文本转换为大写,我们可以正常用HTML写,然后通过CSS转换。这使上下文的内容保持一致。StarWars:TheForceAwakens .movi??e-poster{text-transform:uppercase;}15.Em、Rem和px设置元素大小应使用的单位和文本、em、rem或px?一直存在很多争议。事实上,这三种选择都是可行的,并且各有利弊。何时为哪个项目使用哪个单元没有最终结论。开发者有不同的习惯和不同的项目需求,他们可能使用不同的单位。然而,虽然没有硬性规定,但每个单位都有一些注意事项:em-将元素设置为1em,其大小相对于父元素的font-size属性。该单元用于媒体查询,特别适合响应式开发。但是由于em单位在每一层都是相对于父元素计算的,所以有时需要获取子元素的em单位对应的px值。很麻烦。rem-相对于元素的字体大小计算,rem可以很容易地统一更改页面上所有标题和段落的文本大小。px-像素单位是最准确的,但不适合响应式设计。px单位可靠且易于理解,我们可以精细地控制高达1px的元素的大小和移动。最重要的是,不要害怕尝试,尝试一切,看看什么最有效。有时em和rem可以节省很多工作,尤其是在构建响应式页面时。16.为大型项目使用预处理器你一定听说过它们——Sass、Less、PostCSS、Stylus。预处理器是CSS的未来。它们提供诸如变量、CSS函数、选择器嵌套和许多其他使CSS代码更易于管理的很酷的功能,尤其是在大型项目中。作为一个简单的例子,下面是一段使用了一些CSS变量和函数的SASS代码:$accent-color:#2196F3;a{padding:10px15px;background-color:$accent-color;}a:hover{background-color:darken($accent-color,10%);}预处理器的唯一缺点是它们仍然需要编译为纯CSS。CSS引入的自定义属性是真正意义上的预处理。17.使用AutoPrefixer实现更好的兼容性。浏览器前缀是CSS中最烦人的事情之一。每个属性所需的前缀不一致。你永远不知道你需要哪一个。如果真的要将它一个一个地手动添加到样式表中,那无疑是一场无聊的噩梦。值得庆幸的是,有一些工具可以自动为我们提供添加浏览器前缀的能力,甚至可以决定需要支持哪些浏览器:在线工具:Autoprefixer文本编辑器插件:SublimeText,Atom代码库:Autoprefixer(PostCSS)18。压缩CSS文件要提高网站和应用程序的加载速度和页面负载,您应该使用压缩资源。该文件的压缩版本将删除所有空白和重复项,从而减小整体文件大小。当然,这个过程也使得样式表完全不可读,所以使用.min版本进行生产,同时保留常规版本进行开发。压缩CSS代码的方法有很多种:在线工具:CSSMinifier、CSSCompressor文本编辑器插件:SublimeText、Atom代码库:Minfiy(PHP)、CSSO、CSSNano(PostCSS、Grunt、Gulp),具体取决于您的工作流程,您可以使用上述任何一种方法。19.CaniuseWeb浏览器中的CSS属性仍然存在许多兼容性不一致的问题。使用caniuse检查您使用的属性是否得到广泛支持?是否需要前缀?或者在某个浏览器中使用时有什么需要注意的地方吗?有了caniuse,你写CSS的时候会更加得心应手。20.验证验证CSS可能不如验证HTML或JavaScript代码那么重要,但通过工具运行代码仍然非常有用。如果您犯了任何错误,它会告诉您,警告错误用法,并为您提供改进代码的提示。像压缩和Autoprefixer一样,有免费的工具可以利用:在线工具:W3Validator、CSSLint文本编辑器插件:SublimeText、Atom代码库:stylelint(Node.js、PostCSS)、css-validator(Node.js)