css编码技巧【css揭秘读书笔记】

接单狂魔
• 阅读 4183

最近在看《css揭秘》,于是写了文章来作笔记,除此以外还会补充一些自己遇到的笔试题。希望大家都有所收获。

css编码技巧

尽量减少代码重复

在实践中,代码可维护性的最大要素是尽量减少改动时要编辑的地方
举例说明

padding:6px 12px;
border: 1px solid #446d88;
background: #58a linear-gradient(#77a0bb, #58a);
border-radius: 4px;
box-shadow: 0 1px 5px gray;
color: white;
text-shadow:0 -1px 1px #335166;
font-size:20px;
line-height:30px;

以上的代码有什么问题呢?

  1. 如果需要改变字号,那么同时需要调整行高。
    【当某些值相互依赖时,应该把它们的相互关系用代码表达出来】

  2. 如果将父级的字号加大,则不得不修改每一处使用绝对值作为字体尺寸的样式。

  3. 需要确定哪些效果是应该跟着变大变小,哪些效果是保持不变的

  4. 产生主色调的亮色和暗色变体,其实可以使用将半透明的黑色或白色叠加在主色调上。
    background: #58a linear-gradient(hsla(0,0%,100%,.2),transparent);
    //作者建议使用HSLA而不是RGBA来产生半透明的白色。因为它的字符长度更短,重复率更低。

那么经过修改后的代码如下:

padding: .3em .8em;
border: 1px solid rgba(0,0,0,.1);
background: #58a linear-gradient(hsla(0,0%,100%,.2),transparent);
border-radius: .2em
box-shadow: 0 .05em .25em rgba(0,0,0,.5);
color: white;
text-shadow: 0 -.05em .05em rgba(0,0,0,.5);
font-size: 125%;
line-height:1.5

关于使用rem还是em还是百分比,需要根据具体情况来决定。

【插播笔试题】
Q:line-height:1.5 与line-height:150%的差别?
  • line-height:1.5 是根据自身元素的font-size进行计算。

  • line-height:150% 是根据父元素继承而来的font-size进行计算。

Q:rem,em,px的差别
  • rem css3新增单位。rem为元素设定字体大小时,相对的只是HTML根元素。【IE8以下不支持】

  • em 相对于父元素的字体大小。

  • px 像素px是相对于显示器屏幕分辨率而言的
    px,em,rem的转换工具

继续回到css编码技巧。

  1. 有时候,代码易维护和代码量少不可兼得。

    例如,为元素添加一个10px宽的边框,但左侧不加边框
    border-width: 10px 10px 10px 0;
    但若以后需要改动边框的宽度,需要同时改3个地方。那么以下这种方式可能更好。
    border-width: 10px;
    border-left: 0;

  2. currentColor【IE9+支持】

    例如,我们想让所有的水平分割线元素自动与文本颜色保持一致,只需要这样写。
    hr { background: currentColor;}
    border和box-shadow默认的颜色就是当前的文字颜色,也就是类似currentColor。currentColor本身就是很多颜色属性的初始值,例如border-color、outline-color、text-shadow和box-shadow的颜色。【iOS Safari浏览器下(iOS8)下,currentColor有一些bug,例如伪元素hover时候,background:currentColor的背景色不会跟着变化。关于currentColor其他信息可查看张鑫旭博客,currentColor-CSS3超高校级好用CSS关键字

  3. 继承 inherit

    例如,在创建提示框时,可能希望小箭头能自动继承背景和边框的样式。就可以这样做。
    .callout:before {

       //其他代码
       background: inherit;
       border: inherit;

    }

相信你的眼睛,而不是数字

视觉上的错觉在任何形式的视觉设计中都普遍存在。如果希望四边的内边距看起来基本一致,需要减少顶部和底部的内边距。

css编码技巧【css揭秘读书笔记】

css编码技巧【css揭秘读书笔记】

关于响应式网页设计

作者提出了一些建议,可能可以避免不必要的媒体查询

  1. 使用百分比长度来取代固定长度,如果做不到,尝试使用与视口相关的单位(vw,vh,vmin,vmax),它们的值解析为视口宽度与高度的百分比。

  2. 当需要在较大分辨率得到固定宽度时,使用max-width

  3. 不要忘记为替换元素(例如img,object,video,iframe等)设置一个max-width,值为100%

  4. 假设背景图片需要完整的铺满一个容器,可以使用background-size:cover。【在移动网页中通过css把一张大图缩小显示往往不太明智】

  5. 当图片或其他元素以行列式进行布局,让视口的宽度来决定列的数量。可以使用弹性盒布局(Flexbox)或者display:inline-box加上文本折行行为。

  6. 在使用多列文本时,指定column-width而不是column-count,这样可以在较小的屏幕上自动显示为单列布局。
    【尽量实现弹性可伸缩的布局,并在媒体查询的各个断点区间内制定相应尺寸】

合理使用缩写

如果要明确地去覆盖某个具体展开式属性并保留其他相关样式,则需要用展开式属性。

background: url(tr.png) no-repeat top right / 2em 2em,
            url(br.png) no-repeat bottom right / 2em 2em,
            url(bl.png) no-repeat bottom left / 2em 2em;
            
//如果只为某个属性提供一个值,那么它会扩散并应用到列表中的每一项。
//在简写时,使用一个斜杠(/)作为分隔,是为了消除歧义。

background: url(tr.png) top right,
            url(br.png) bottom right,
            url(bl.png) bottom left;
background-size: 2em 2em;
background-repeat: no-repeat;

//此时,只需要在一处修改,就可以改变所有的background-size和background-repeat
点赞
收藏
评论区
推荐文章
Alex799 Alex799
4年前
Vue进阶(幺柒陆):CSS预编译语言Sass、Scss、Less和Stylus
什么是CSS预处理器CSS预处理器定义了一种新的语言,它的基本思想是,用一种专门的编程语言,进行网页样式设计,然后再编译成正常的CSS文件。开发者只需要使用这种语言进行编码工作,减少枯燥无味的CSS代码
徐小夕 徐小夕
4年前
巧用css圆角实现有点意思的加载动画
作为一名前端工程师,需要对css技巧有充分的研究和了解,接下来笔者将会带大家一起掌握如何用css的圆角属性来实现有点意思的加载动画.如果想学习更多css实用技巧,可以参考笔者以下的文章:<divstyle"display:flex;flexwrap:wrap;alignitems:center;"<ahref"https:/
徐小夕 徐小夕
4年前
用css3实现惊艳面试官的背景即背景动画(高级附源码
我们传统的前端更多的是用javascript实现各种复杂动画,自从有了Css3transition和animation以来,前端开发在动画这一块有了更高的自由度和格局,对动画的开发也越来越容易。这篇文章就让我们汇总一下使用Css3实现的各种特效。这篇文章参考《css揭秘》这本书,并作出了自己的总结,希望能让大家更有收获,也强烈推荐大家看看这本书,你值得拥有
徐小夕 徐小夕
4年前
css3实战汇总(附源码)
本文是继上一篇文章用css3实现惊艳面试官的背景即背景动画(高级附源码)(https://juejin.im/post/6844903950123188237)的续篇也是本人最后一篇介绍css3技巧的文章,因为css这块知识难点不是很多,更多的在于去熟悉css3的新特性和基础理论知识。所以写这篇文章的目的一方面是对自己工作中一些css高级技巧的总结,另一
徐小夕 徐小夕
4年前
《前端实战总结》之使用纯css实现网站换肤和焦点图切换动画
今天我们来继续复盘一些工作中常用的css技巧和知识,以便我们可以更加优雅的用css实现富有动感的网站.你将收获网站换肤设计方案介绍:target伪类介绍和用法以及如何使用css实现网站换肤transition动画以及如何用纯css实现焦点图动画效果展示1.网站换肤(https://imghelloworld.ossc
Stella981 Stella981
3年前
Less功能特性
(1)变量   我们常常在CSS中看到同一个值重复多次,这样难易于代码维护constbgColor"skyblue";$(".postcontent").css("backgroundcolor",bgColor);$("wrap").css("backgroundcolor",bgColor);
Stella981 Stella981
3年前
CSS兼容性(IE和Firefox)技巧大全
CSS对浏览器的兼容性有时让人很头疼,或许当你了解当中的技巧跟原理,就会觉得也不是难事,从网上收集了IE7,6与Fireofx的兼容性处理技巧并整理了一下。对于web2.0的过度,请尽量用xhtml格式写代码,而且DOCTYPE影响CSS处理,作为W3C的标准,一定要加DOCTYPE声明。CSS技巧1.div的垂直居中问题verti
Wesley13 Wesley13
3年前
CSS 样式书写规范
编码设置采用 UTF8 编码,在CSS代码头部使用:@charset"utf8";注意,必须要定义在CSS文件所有字符的前面(包括编码注释),@charset 才会生效。例如,下面的例子都会使得 @charset 失效:/字符编码/@charset"utf8";
Stella981 Stella981
3年前
Python+Selenium练习篇之5
前面介绍了,XPath,id,class,linktext,partiallinktext,tagname,name七大元素定位方法,本文介绍webdriver支持的最后一个方法:by\_css。css和XPath类似,也需要掌握一些语法,才能写出正确的,完整的css选择表达式。相关脚本代码如下:codingu
Stella981 Stella981
3年前
Sass
嵌套规则(NestedRules)Sass允许将一套CSS样式嵌套进另一套样式中,内层的样式将它外层的选择器作为父选择器mainp{color:00ff00;width:97%;.redbox{
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(