接触CSS有很长的一段时间了,我对它的感情每次都有些不同,简单··· 费解··· 神奇··· 好玩···
CSS就是这么一门不正交的语言,你无需一步步从头学起,它就像乐高积木,学会了一点就能用上一点。
尽管CSS不正交,属性也比较多不好记,但没关系,你只要记住用的最多的几种方法足矣应付业务中大部分需求:
- 行内水平居中,块级水平居中
- 行内垂直居中,块级垂直居中,fixed定位的margin:auto 居中
- 浮动左右结构布局,flex左右结构布局
- 浮动左中右结构布局,flex左中右结构布局
- 一行省略,多行省略
除了以上用的最多的几种方法外,我们还需要知道CSS一些基本常识:
控制文档流
- 文档流是一个很垃圾的翻译,英文原文是 Normal Flow
- 文档流中内联元素默认从左到右排列,宽度不够则自动换行
- 文档流中块级元素从上到下排列,每个元素占一行
- float:left、position:absolute、position: fixed 可以使元素脱离文档流
- 块级元素的高度由其文档流中元素高度的总和确定
- 内联元素中,给 inline 元素设置宽高是没有任何效果的
- 例如如果 span 的 font-size 为 20px,则该 span 里面的文字大小和 line-height 跟字体有关
- 例如想要在页面上显示两个空格,应该在代码里写 才行
- 介意不要写死height和width。因为宽高定死之后,如果文字变多,会出现BUG。用户缩小窗口大小,会出现滚动条,影响体验。width: 100% 再加上 padding 就会撑出父元素之外,很难看。不写死宽高,页面就是自适应的。
控制z-index:堆叠上下文和堆叠顺序
- 什么是堆叠上下文
- 出发堆叠上下文,可以理解为堆叠作用域。跟 BFC 一样,我们只知道一些属性会触发堆叠上下文,但并不知道堆叠上下文是什么。
- 例如border在background上面,绝对定位元素在浮动元素上面,内联元素在浮动元素上面,但z-index 为 9999 的绝对定位元素不一定在z-index为0的相对定位元素上面。
理解BFC
- 官方学名:块格式化上下文。
- 首先要明确一件事,BFC根本不好解释,每个人的解释都不同,就像解释什么是面向对象编程一样。如果一定要回答BFC是什么,请举例说明。
- 功能1:爸爸管儿子(用BFC包住浮动元素)
- 功能2:兄弟之间划清界限(用float+div做左右自适应布局)
理解IFC(BFC的兄弟)
- 官方学名:内联格式化上下文。与他兄弟一样,不好解释
- 所有的内联元素都有两个高度
- 基于字体度量的 content-area
- virtual-area(也就是 line-height )
- 这两个高度你都无法看到
- line-height: normal 是基于字体度量计算出来的
- line-height: n (n=1,2,3…) 可能得出一个比 virtual-area 还要矮的 content-area
- vertical-align 不靠谱
- line-box 的高度的受其子元素的 line-height 和 vertical-align 的影响
- 我们无法轻易的用 CSS 来控制字体度量
- 了解更多
理解 Float 布局和 Flex 布局
- 需要支持IE8吗?No!:Flex布局+弹性宽度 。Yes!:Float布局+定宽 可支持到IE5
- 原则:不到万不得已不要写死width和height,尽量使用高级语法,如:calc,flex,如果是IE9以下,宽高全部写死。
- float口诀:子元素全部加:float:left(right),父元素加: .clearfix,如果宽度不够,可以用 margin: 0 -4px;
- felx口诀:父元素加:display:flex。
理解响应式与移动端页面
- 做好媒体查询:media query
- 学会隐藏元素:display:none
- 手机端需要加上:
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
- 手机端的交互方式不一样:没有hove,没有touch事件,没有resize,没有滚动条
- 移动端页面最好使用flex布局
掌握动态REM方案
- 动态rem移动端适配
- rem:root rem 根元素font-size的计算值
- 所有手机显示的界面都是一样的,只是大小不同
- 1rem == html font-size == viewport width
- 动态rem:通过js计算算出屏幕宽度,然后确定比例,于是每进入一次设备将会根据设备视口的宽度来调整rem的px值。
- rem可以与其它单位同时存在
掌握 icon 的使用
- 关于css图标icon的六种实现方法
- img 法:简单暴力,缺点:图片过多时增加服务器的请求,可做CDN优化
- background法:把图片放在css背景标签中,background属性能够控制图片居中,平铺,横向或者纵向自适应剪裁,在做复杂的图片处理时用background属性比img标签要好。
- css sprites法:国内一般叫雪碧图或者精灵图,思路就是将多张图片拼成一张背景图,然后选择性展示背景图某一部分来达到展示不同icon的目的。优点:减少请求。
- font法:用字体做icon,有些设计师将一些常用的icon集合做成了一套字体,通过字体选择将icon打出来,跟搜狗输入法的特殊符号有点像,不过大小不太好调整,得用font-size。
- SVG法:目前比较流行的方法,用svg矢量图做成icon图标。比如阿里巴巴矢量图图标库,比如搜索iphone,会有很多设计师设计的svg图片供你使用,选好图片后创建项目,生成js代码,按照教程将网站上生成的icon图标代码拷贝至你的代码中即可。优点:无论放多大都不存在图片锯齿。
- css法:用你学到的css知识写出来。
掌握 Bootstrap 的使用
- bootstrap的核心方式就是:复制粘贴
- 先引入bootstrap
- 掌握bootstrap的网格系统
- 掌握bootstrap css组件怎么用
- 掌握bootstrap jQuery怎么用
Grid布局
- Grid布局详解
- grid布局是css中最强大的布局系统,适合复杂布局使用,可以同时处理行和列
- 缺点:目前兼容性不太好