CSS学习笔记3 CSS三大特性

CSS三大特性:盒子模型、浮动、定位。其余都是细节

1. 盒子模型

盒子模型就是把HTML页面中的元素看作是一个矩形盒子,也就是一个容器。每个盒子都由元素的内容、内边距、边框、外边距组成。

1.1 盒子边框 

1.1.1 整体边框border

border的所有样式

border属性可以单独选取设置,也可以连写且没有顺序

border: solid 1px #000

CSS学习笔记3 CSS三大特性_第1张图片
border-style属性


1.1.2 盒子单独边框

查看手册:

border-top

border-right

border-bottom

border-left


1.1.3 常用案例

表单中实现下面效果:

CSS学习笔记3 CSS三大特性_第2张图片


1.1.4 边框综合设置(高级用法)

CSS学习笔记3 CSS三大特性_第3张图片


1.1.5 表格细线边框设置 border-collapse

CSS学习笔记3 CSS三大特性_第4张图片
表格HTML

效果1:

这个效果我们发现table的边框和td的边框可以分开设置,并且默认有间隔

CSS学习笔记3 CSS三大特性_第5张图片
效果1
CSS学习笔记3 CSS三大特性_第6张图片
效果1样式


效果2:

去掉table和td之间所有的空隙,只能在table标签中设置,不是CSS样式

CSS学习笔记3 CSS三大特性_第7张图片
效果2,去掉空隙,非细线边框
CSS学习笔记3 CSS三大特性_第8张图片
效果2


效果3:

效果2还不是细线边框的效果,因为每个td的边框都使用了3px,

因此td与td之间加起来就是6px。

效果3会合并td之间的边框,使td之间只有3px(是用border-collapse)

CSS学习笔记3 CSS三大特性_第9张图片
效果3 细线边框,比效果2的边框细了一倍
CSS学习笔记3 CSS三大特性_第10张图片
效果3


1.2 内边距 padding

padding属性用于设置内边距,是指border与content之间的距离

1.2.1 设置不同内容大小的导航栏样式

之前做的导航栏样式都是导航栏内容字数相同的,往往项目中的导航栏内的文字字数不尽相同

新浪首页每个导航栏宽度不同,但是文字都是居中显示
CSS学习笔记3 CSS三大特性_第11张图片
简单不同宽度导航栏样式


1.2.2 新浪导航栏例子

CSS学习笔记3 CSS三大特性_第12张图片


1.2.3 padding的2个问题

1. padding参数个数

CSS学习笔记3 CSS三大特性_第13张图片
4个值遵循顺时针原则


*2. 设置了padding的值为非0后,会撑大盒子,需要重新计算width和height

3. 清除元素默认外边距:

清除浏览器默认的margin和padding:

*{

    margin: 0;

    padding: 0;

}

但是上面的样式对浏览器来说解析效率太低了,最好使用并集解释器:

body, div, dl, dt, ......{

    margin: 0;

    padding: 0;

}


1.3 外边距 margin

1.3.1 盒子水平居中

限制条件:

1. 必须是块级元素

2. 盒子必须指定了width

如果盒子设置了width比浏览器的宽度小,又想让盒子居中,通过margin来设置:

方法一:

margin: 0 auto /* 上下为0, 左右为auto */

方法二:

margin: auto /* 上下默认为0, 左右为auto */

方法三:

margin-left: auto

margin-right: auto


1.3.2 background-image 和 img 使用的时机

插入图片:产品展示类

背景图片:小图标背景 或者 logo图片 或者 超大背景图片


1.3.3 外边距合并

使用margin定义快原酸的垂直外边距时,可能会出现外边距的合并

1.3.3.1 相邻块元素垂直外边距合并

注意2个条件:

1. 相邻块元素

2. 垂直外边距(水平不会出现问题)

CSS学习笔记3 CSS三大特性_第14张图片
合并时默认为最大的那个magin值

这是浏览器的bug,不需要解决,只需要计算好margin值就可以避免


*1.3.3.2 嵌套块元素垂直外边距合并

注意2个条件:

1. 相邻块元素

2. 垂直外边距(水平不会出现问题)

目标:

想让子盒子在父盒子中垂直移动位置。

问题:

常见做法一(可以实现):

在父盒子设置padding-top,但是padding会撑大盒子,需要减少父盒子的height值

*常见做法二(没有实现):

子盒子中设置margin-top, 但是会发现父盒子的位置也会被子盒子代跑

解决办法:

1. 在父盒子角度出发,使用padding-top

2. 从子盒子角度出发,设置margin-top, 但是需要给父盒子设置一个border

3. 为父盒子添加:overflow: hidden;


*1.3.4 content内容的width和height

在嵌套的2个盒子情况下

1. 如果子盒子不设置width,则会占满父盒子的宽度

2. 如果子盒子没有给定宽度,则即使padding也不会影响父盒子大小


1.3.5 盒子模型布局稳定性

width > padding > margin

CSS学习笔记3 CSS三大特性_第15张图片


1.3.6 盒子圆角边框(CSS3)

略,查手册


1.3.7 盒子阴影

略,查手册



2. 浮动 float

2.1 普通流 (normal flow)

CSS学习笔记3 CSS三大特性_第16张图片



2.2 浮动 float

2.2.1 什么是float

CSS学习笔记3 CSS三大特性_第17张图片
定义


前面学了嵌套盒子,实现子盒子在父盒子中任意移动

其实不通过嵌套的方式,可以用float来实现嵌套的效果

体会浮动:

CSS学习笔记3 CSS三大特性_第18张图片
最简单浮动效果
CSS学习笔记3 CSS三大特性_第19张图片
简单浮动代


float能做什么?:

CSS学习笔记3 CSS三大特性_第20张图片
float的重要功能


如果不用float来做上面的功能,我们只能用display: inline-block

缺点一:需要解决div之间间隙的问题

缺点二:当需要所有div右对齐排列的时候,每个div都需要计算magin-right

而float用简单的语法就能解决上面的2个问题


2.2.2 浮动详细内幕特性

1. 浮动脱离标准流,不占位置,会影响标准流。且浮动只有左右浮动,没有上下浮动

2. 下面做一个常见浮动样式:

CSS学习笔记3 CSS三大特性_第21张图片

需要给one、two2个盒子设置一个父盒子,才能达到这个效果:

CSS学习笔记3 CSS三大特性_第22张图片


3. 浮动首先创建包含块的概念(包裹),就是说,浮动的元素总是找离他最近的父级元素对齐。但是不会超过内边距padding的范围

在2中,one和two有一个父级块级元素

CSS学习笔记3 CSS三大特性_第23张图片
CSS学习笔记3 CSS三大特性_第24张图片
嵌套子父级浮动,子盒子不会超过父盒子padding的范围


4. 浮动元素排列位置,跟上一个元素(块级元素)有关系。如果上一个元素有浮动,则A元素顶部会和上一个元素的顶部对齐;如果上一个元素是标准流,则A元素的顶部会和上一个元素的底部对齐

因为如果不加浮动,则是标准流,标准流独占一行

也就是说浮动影响的仅仅是后面的盒子


5. 浮动 可以默认让元素转换为inline-block元素

也就是,如果行内元素设置了浮动,就可以给该盒子设置width和height了


浮动特点总结:



3. 版心和布局

3.1 版心

版心就是网页可视区,只网页中主题内容所在区域。一般在浏览器窗口中水平居中显示,常见宽度值为:960px, 980px, 1000px, 1200px等等


3.2 布局

CSS学习笔记3 CSS三大特性_第25张图片

3.2.1 一列固定宽度且居中型

CSS学习笔记3 CSS三大特性_第26张图片
CSS学习笔记3 CSS三大特性_第27张图片


3.2.2 两列左窄右宽型

CSS学习笔记3 CSS三大特性_第28张图片
CSS学习笔记3 CSS三大特性_第29张图片


3.2.3 通栏平均分布型

CSS学习笔记3 CSS三大特性_第30张图片

下面的代码还需要精调。。。

CSS学习笔记3 CSS三大特性_第31张图片
CSS学习笔记3 CSS三大特性_第32张图片


3.2.4 通栏平均分布型例子



4. 清除浮动

在2.2.2的2中,我们要实现布局,需要给one、two使用浮动,必须给one、two加一个父级盒子才能实现效果。

这种方式不仅要计算父级盒子的宽高,还要计算子集盒子浮动后的padding,比较麻烦(会影响其他盒子)。

而且如果one、two的高度是动态的话,父级盒子没办法给合理的height

这一节主要介绍一种方法(清除浮动),在不设置父级盒子height的情况下,子级盒子能够自动撑开父级盒子,达到动态撑开父级盒子的效果!

4.1 清除浮动的原理

清除浮动主要是为了解决父级元素因为子级浮动引起内部高度为0的问题

CSS学习笔记3 CSS三大特性_第33张图片
不清除浮动带来的问题
CSS学习笔记3 CSS三大特性_第34张图片
子盒子不浮动
CSS学习笔记3 CSS三大特性_第35张图片
子盒子浮动带来的问题


4.2 清除浮动的方法

4.2.1 额外标签法

增加一个自定义类选择器,使用clear属性设置为both来清除浮动。

CSS学习笔记3 CSS三大特性_第36张图片
CSS学习笔记3 CSS三大特性_第37张图片


4.2.2 父级添加overflow属性方法

CSS学习笔记3 CSS三大特性_第38张图片
CSS学习笔记3 CSS三大特性_第39张图片

这种方法叫:子不教,父之过,教不严,师之惰。责任在于父和师


4.2.3 使用after伪元素清除浮动

略,做兼容性时候再查

CSS学习笔记3 CSS三大特性_第40张图片
定义一个类名选择器,并在father中使用多类名选择


4.2.4 使用before和after双伪元素清除浮动

略,做兼容性时候再查

CSS学习笔记3 CSS三大特性_第41张图片



5. 定位(position)

5.1 概述:为什么要用定位

用于跟JS配合做特效,使用没有float多,但是是CSS三大特性中最难的知识点,也是最后一个知识点!


5.2 元素的定位属性:定位模式 和 边偏移

5.2.1 边偏移


5.2.2 定位模式


5.2.2.1 静态定位(static)


*5.2.2.2 相对定位(relative)


*5.2.2.3 绝对定位(absolute)


*5.2.2.4 综合问题

子绝父相:综合5.2.2.2和5.2.2.3

两个问题

定位盒子居中对齐


*5.2.2.5 固定定位(fixed)




fdsf

你可能感兴趣的:(CSS学习笔记3 CSS三大特性)