欲练JS,必先攻CSS——前端修行之路

2021-04-09

 是新朋友吗?记得先点web前端学习圈关注我哦~

今天我讲的主题是css,具体聊一下我大概的css学习历史,分享一些干货,希望这次分享对大家有所启发和帮助。

个人的css历史

说说自己的css学习的历史,12年,当时是老师手把手1对1教我div+float的固定布局,所有元素全部用float,做了学生会网站的全部前端页面,因为有段时间学PS比较多,也是自己做的UI,很丑,老师说第一次做成这样很不错了,那时老师就觉得我有做前端的天赋,我就是从这个时候开始接触前端的。毕业设计自己一个人做了一个全栈的web,做完整个毕业设计后,我就决定出来要做前端,感觉自己更喜欢。14年出来工作,那时候还不会用什么less,就是直接写css,那时候主要还是写固定布局的pc页面,14年底自己在项目里折腾,用了一下JQmobile,超级难用。15年做一个移动端项目的时候,调研了几个css库,学习了bootstrap和它部分源码,还用到了webfont,使用流式布局这一次提升很大再后来学习了rem,并用到了项目中,至此我的css就到了一个缓慢成长期,或者说就没有特意学习css了。

干货

下面来说一些,我平时比较注意的细节、技术点,和一些大家可能不是很熟悉的知识点。

1.box-sizing: border-box

box-sizing主要有两个值content-box和border-box,先看下官方的解释:

 

通俗一点来说,默认情况下,padding和border是会额外占据空间的,假如元素宽是10px,如果设置了1px border边框,实际的宽就是12px,padding同理。那么这样会导致,布局的宽高不好控制,计算也特别麻烦。所以我们会给全局的元素用上border-box, 只要设置了宽高,那么border和padding无论怎么变化,元素的宽高都不会变,这样方便布局和计算。

 

2.左边固定 右边自适应

在布局的时候,比如一些列表页,常常左边是一个固定大小的缩略图,右边剩余部分展示标题,如图

那我们就叫左边固定右边自适应的布局吧,我的方法 100%宽的div用padding-left把左边图片的位置留出来,div元素内容的部分就是标题,图片绝对定位到padding-left区域,这样就实现了左固定右自适应,(前提是box-sizing必须是border-box,否则padding加上100%宽会超出屏幕宽度),大致代码如下:

 

3.伪类的 content attr

伪类before,after的content属性,是用来插入内容的,我们可以通过attr 传入一个当前元素的属性名,把属性值,载入进伪类内容,这个是一种写法,但实际应用场景可能并不多,就当了解一下吧

 

4.中文符号居中效果

对于动态输出文字可以不用在意,某些页面可能会有类似提示文案的地方,用英文标点符号,对于居中效果比较友好。

 

 

5.元素的上下间距

布局的时候从上往下开始写页面,一般都是写下一个的元素margin-top来决定和上一个元素的间距,那么就尽量不要又是写margin-top又是写margin-bottom,如果混着用,后期不好维护,比如某一块区域需要摞位置,或者是一个组件可能会被很多地方共用,混着写的话后期在改的时候,可能会麻烦一点,这里导致的问题可以说不痛不痒,但是不管是js还是css,注重细节并养成好的习惯,是代码能力的一种体现。

 

6.字体颜色透明

有时候设计师,在配置字体颜色的时候可能用透明的百分比,来设置几种不同的颜色,比如主色是#000,浅灰色#000 80%的透明度,这种情况下不建议web写透明度,而是让设计师给到对应的颜色值,因为透明色会根据背景的不同,比如现在看到的这种情况,这样扩展性就比较差。

 

 

7.命名

命名是一个让人最纠结的事情,先看第一种,这样命名的更详细可以一目了然的知道当前类的意思,但是长度比较长,增加代码量。

 

第二种使用缩略命名,会使代码更短,写起来更快,但是不易读。

 

 

如果用缩略命名,可以约定文档,有约定和熟悉成本,但是熟悉以后更高效,类的命名也会变得更规范和统一


 

8. 0.5px边框的理解误区

我之前写边框的时候就发现,只要让边框的颜色更淡,边框看起来就更细,所以当设计师问我为什么边框看起来比较粗的时候,我都告诉他们颜色调浅一点就好了,这个技巧我一直在实际使用。网上有博客说通过css3 transform的缩放scale 50%,可以实现0.5px边框,我一直很奇怪,1px实际是物理的最小单位,怎么可能实现0.5px,就这样我做了个实验,我设置了1px颜色为000的边框(黑色),如图,

 当我使用scale缩放50%的时候,颜色变成了c5c5c5,但是实际仍然有1px。如图,

我用的是拾色工具会精确到像素,确实还是1px,所以这种方式并不能实现0.5px而是颜色变浅了。还有些手机屏幕上1px是按照2px来的展示,所以这种方式可以让2px缩放为1px,让1px的边框变得更淡,这种方式确实能让边框变细,但不能说是0.5px。

9.user-select:none

该属性让区域内容无法被选中,可以阻止用户长按复制,也可以避免用户复制无关内容,比如下面我只希望用户复制6655验证码,除了6655我都设置了user-select:none,长按其他部分并不会出现复制按钮,按钮数字就可以,并且第三幅图的左右下标只能在6655间拖动

 

10.js-class

在为dom绑定事件的时候,大家可能会直接绑定当前有样式的class,这样会因为修改或者替换class名称,影响JS,而如果定义一个无样式的js前缀的类 专门用来绑定事件,这样就解除了样式和逻辑的耦合,在读代码的时候,也能一下子看出哪些元素绑定了事件的。

 

11.公共类组合写法   

好吧,这是我自己命名的,我们先看下第一种写法,这很常规,所有样式写在一个class里

再看下第二种,定义一个公共类,通过less在样式里直接引入这个类,第二种效率会高一点(少写几个字母),但是需要熟悉和维护公共类

 

 再看第三种,把公共类写在元素的class里,这一种比较灵活,比如我现在要写两个item的元素,一个左浮动,一个右浮动,那么这种就能不改动item,而直接使用不同的类实现不同的样式,就像JS的代码去重一样,传入一个不同的参数进行区分,一样的地方共用。

第四种公共类全部写在元素里, 在写dom的时候都不用去写css了,直接把想要的类写进dom,是不是有点像JS里的组件化,这种写法在特定情况下比较高效,比如PC后台类项目,对UI要求不高,就比较适合,这个高效也取决于公共class类是否全面,对项目中的class是否熟悉,但是也要注意不要让元素的长度太长,尽量保持在4个类以内,超出的话就不应该用这种写法。

 

这四种写法其实都可以,在一个项目中,针对不同的部分都可以用不同的写法,可以非常灵活的选择想要的方式。


12.rem布局的文字大小

大家都知道浏览器一般不会让文字小于12px,如果设置小于12px浏览器都会显示12px, 我们在用到rem布局的时候,元素是会根据屏幕宽度等比例缩放的,比如设计师给到750px的设计稿,如果某一个元素文字是22px,那么当用户的屏幕宽度是375的时候,文字会缩放为11px,实际浏览器就会显示为最小12像素,那么其他非字体元素比例仍然会缩小,这个时候字体可能和其他元素的比例就不是原设计稿的比例了,如果用户屏幕是320px,那么和原设计稿元素间的比例就差更多了。所以我们一定要根据自己的情况告诉设计师,在宽是750像素的设计稿里,字体最小应该是多少像素。

 

13.object-fit: cover

我们在做列表页的时候,图片都是固定的大小,比如是一个100px*100px的正方形图片,但是很有可能拿到的图片并不是正方形的,这个非正方形图片放到正方形的img标签里,就会变形如果使用object-fit:cover  可以裁剪超出比例的部分,这样图片看起来就不会是变形或者拉伸的了,但是这样会导致图片残缺,根据图片的不同,可能裁剪掉关键部分的内容,但是鉴于列表本来就是缩略图,所以还是可以加上这个属性的,是一个比较折中的办法。

 

14.图片的约定

说到图片拉伸的问题, 就要说说对于图片的约定,因为不管是拉伸还是裁剪都会导致图片的残疾,拉伸影响视觉,裁剪害怕关键部位丢失,如果不严格按照约定的规范来,肯定是不能兼容所有情况的,因此在做项目的一开始就要和产品运营们约定好图片比例,建议约定为正方形。


小结

总得来说,学好css,需要长期推敲,长期注重和完善代码的细节,在每一次项目实战中,抽出一点点时间优化、尝试,日积月累成为个人的体系,
个人的风格。这种体系和风格,一般来说你自己都习惯了,会习以为常,甚至总结的时候都不知道应该说什么,但是当你去维护或者看别人的代码的时候,你就能体会出,
原来这个地方别人可能会这样用,你提出自己的见解,就能对团队和周围的同事产生好的影响,如果自己的有问题同事指出来,也可以反过来,提升自己的认识。 

和设计师。。。

要做好css,写好页面,和设计师的沟通也是很重要的一个技能,因为设计师决定页面最终要呈现的样子,要通过项目验收,也必须要设计师验收通过才行。

情景1:


设计师给过来一个交互效果,前端拿到,一想交互效果还可以,但是实现成本比较高,功能都做不完,不想做这么细,然后就直接说没时间这个做不了,设计师一想这个交互很难吗,别人都能做,你为什么不做,就这样来回几句就闹矛盾了,闹到产品那里去了,最后可能交互效果还得做,时间也耽误了。其实这个是很多前端会遇到的问题,时间压得紧,功能可能都要延期,还来做这些交互,自然会有点抱怨,情绪一上来,把产品和设计都得罪了,最后还是要做,久而久之矛盾越来越深,沟通就越来越困难。换个思路想问题,设计师大部分时候时间也很紧,要对产品和设计领导有所交代,前端又在催,好不容易做出来了,你这也不能实现那也不能实现,你这样我也没法交代啊。那么我们换个沟通方式,比如这样说:我们这边时间确实有点紧,这个交互比较麻烦,比较费时间,我做是可以做,只是可能会影响项目进度,你看要不我先做简单点,等到提测的时候有时间再加上这个交互,实在不行能不能等到上线之后,我单独再优化一下这个地方,很快就能上线。

设计师们还是讲道理的,根据web上的一些特性,设计师设计出来的一些样式一些想法或许没法实现,又或者实现成本太高,我们就得说服他们这个地方为什么不能实现,因为他们不懂,所以害怕你忽悠他们(实际有时候就有人忽悠他们),所以要想说服别人,自己一定要把问题搞清楚,把知识点理清楚,不能实现的理由对设计师说清楚,并且要有理有据,同时最好网上找到相关博客或者官方解释进行佐证。有很多矛盾和问题,就在于我们疏忽了沟通,又或者说是我们自己偷懒了,其实当自己把知识点能给外行说清楚了,这也说明是理解透了,也是对自己能力的提升。设计师辛苦设计的稿子一定要尽量达到他们的效果,也要考虑扩展性和可实现性,态度很重要,不要让人觉得是在敷衍他们,什么是敷衍,不解释清楚就说不做,就是敷衍,否则碰一鼻子灰只有怪自己。技术点要搞清楚,要不解释不清楚,别人不买单,在发现设计稿有问题的时候,耐心提醒其中一些不合适的地方,多帮别人承担一点,前端和设计师要友好相处

再随便聊聊

不要兼容IE低版本(我觉得兼容11以上就行了),特别是创业公司,对创业公司来说,性价比极低,本身创业公司没技术、没沉淀、活下去都是一个问题,兼容IE就是甚至浪费人力成本,比如说IE8不支持圆角,得用图片代替,
没有placeholder,得用JS来模拟。对于个人来说,技术的更新换代是大势所趋,我们要往前看,有的是东西给你学,不要在这个地方浪费青春。

有空大家都去看看bootstrap源码,看一些核心的部分就够了,比如变量variable等一些最常用的部分,源码其实不难,能得到很多启发。

 

源自:http://www.cnblogs.com/1wen/p/6839779.html

声明:文章著作权归作者所有,如有侵权,请联系小编删除。

感谢 · 转发欢迎大家留言

相关文章

Flexbox布局中不为人知的细节

2021-04-09
属性在Flex容器上不起作用CSS的 float 和 clear 属性在Flex项目上不起作用,也不会让Flex项目脱离文档流CSS的 vertical-align 属性在...

css float(浮动)如何运用呢?

2021-04-09
css浮动什么是css float(浮动)CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列.Float(浮动),往往...

CSS float 盒子模型 position

2021-04-09
属性:float 浮动浮动的内容用div包起来,给div设置宽高clear 清除浮动.box-sizing 标准模式下的盒模型 content-box:(默认属性)...

必看!春招攻略:我是怎样进入字节跳动做技术的

2021-04-09
CSS浮动相关(float)移动端适配响应式布局CSS3新增内容2-3、JSJS变量类型相关函数、类相关闭包、作用域相关promise、async...

jsp大马代码之三

2021-04-09
css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this....

自习室.11 | 知乎上关于前端领域33个的热门问题,高赞值得收藏

2021-04-09
浏览量27、在 CSS 中,用 float 和 position 的区别是什么?https://www.zhihu.com/question/1958885414w 浏览量28、为什么 Web 前端...

22-CSS 浮动

2021-04-09
CSS浮动CSS提供了元素对象的浮动属性,浮动也是属于定位的一种.float 属性用于设置元素浮动.可能的取值如下:取值说明none...

R tips:如何使用css控制RMarkdown渲染的html样式

2021-04-09
```{css}.section.level2{ float:left; width: 50%;}.section.level2:nth-child(odd){ text-align:right;}```加上刚才的字体格式调整,其效果如下图....

React v15.0 正式版发布

2021-04-09
#6032React DOM现在支持cssFloat、ridRow和gridColumn CSS属性.作者@stevenvachon,pull request链接 #6133;作者@mnordick,...

​css绝对定位和相对定位的区别

2021-04-09
css绝对定位和相对定位的区别一:绝对定位position: absolute;... float会隐式地改变display的类型(display:none除外).即是当元...

随机推荐

2021年,电子签名在典当行业应用趋势分析

2021-04-26
2021年,电子签名在典当行业应用趋势分析,先让我们来看看支持电子签名的政策举措:解密2020电子签名出圈之路,40+政策举措助...

762个书源,免费看 vip 小说,安卓 ios 都有!!!

2021-04-01
ios和安卓 的小说app.1.安卓我还是说说好评最多的 "阅读",我提供了两个文件,都必须下载下来,公众号后台发送:665打开软件...

安卓影视神器来了 看全网视频超方便!

2021-03-27
广告少,支持视频下载,全网影视剧大都可以看,堪称安卓影视神器.1、首先在安卓手机上下载安装“安卓影视神器APP”(大小约...

企业题目php mysql动态网站毕业设计成品

2020-03-29
企业题目php mysql动态网站毕业设计成品 企业主题大学生网页设计制作动态网页作业,php mysql动态网站,一共29个页面,网站有...

UI设计是什么?现在为什么这么火?

2017-12-29
UI设计是什么?更通俗的来说呢,当今这个时代它是移动互联网的时代,我们大部分人都拥有手机.人们的生活已经离不开手机了,手...

城市如何在发展经济的同时降低碳排放?

2017-07-10
第三,现有的城市排放核算方法不同,系统边界不同,数据来源不同,无法进行比较(Creutzig, F.等2015).文章通过编制2005年、...

五分钟学Java:如何掌握Java Web里这么多的技术?

2017-03-25
Java Web是各位Java前辈们对于Java在Web方向应用的相关技术栈,正如现在的Python Web,golang web等等,只不过是通过某种语言...

这究竟属于下一代验证的方法、语言还是工具?

2016-12-31
使用语言我们可以有序地传递信息,从而去构建工具,但工具也不是方法.我们所说的方法是指以某种可管理的方式系统地分解及解决...

部编版一年级语文下册《写字表》生字组词,读一读!

2016-03-25
姓氏歌姓(xìng)(姓名)(姓氏)(百姓)国(guó)(中国)(国家)(国王)什(shén)(什么)(为什么)(干什么)王(wá...

聊聊我觉得程序员该有的提问方式~附《JavaGuide 面试突击版》V4.0最新进度

2016-01-26
什么环境变量怎么配置啊( 我的内心 OS: Google?百度?)随便截个 bug 图,然后扔下一句话:“这是什么问题”(我的内心 OS:...