CSS设计指南 笔记3
3 定位元素
盒模型:浏览器为页面中的每个HTML元素生成的矩形盒子,都要按照可见版式模型(visual formatting model)在页面上排布
可见页面版式的三个属性控制:position、display、float
- position:控制页面上元素间的位置关系
- display:控制元素是堆叠、并排,还是不在页面上出现
- float:提供控制的方式,以便把元素组成成多栏布局
3.1 理解盒模型
元素盒子的属性
-
边框(border):设置边框的宽窄、样式、颜色
{border: 2px dashed red;} /* 全部3个属性,4条边 */ {border-style: dashed;} /* 1个属性,4条边 */ {border-left-style: dashed;} /* 1个属性,1条边 */
-
内边距(padding):设置盒子内容区与边框的间距
-
外边距(margin):设置盒子与相邻元素的间距
{margin-top: 5px; margin-right: 10px; margin-bottom: 12px; margin-left: 8px;} {margin: 5px 10px 12px 8px;} {margin: 12px 10px 6px;} {margin: 12px 10px;} {margin: 12px;}
3.1.1 盒子边框
边框(border)由有个相关属性
- 宽度(border-width)
- 可以使用thin、medium和thick等文本值
- 可以使用除百分比和负值外的任何绝对值
- 样式(border-style)
- none、hidden、dotted、dashed、solid、double、groove、ridge、inset和outset等文本值
- 颜色(border-color)
- 可以使用任何颜色值
3.1.2 盒子内边距
内边距是盒子内容区与盒子边框之间的距离
内边距设计计加在了声明的盒子宽度之上
3.1.3 盒子外边距
3.1.4 叠加外边框
垂直方向上的外边距会叠加(较宽的外边距决定两个元素最终离多远)
水平外边距不叠加(元素的水平间距是相邻外边距之和)
3.1.5 外边距的单位
3.2 盒子有多大
- 没有宽度的盒子
- width默认值是auto,让块级元素的宽度扩展到与父元素同宽
- 没有设置width的元素始终会扩展到填满其父元素的宽度为止
- 添加border、padding、margin会导致内容宽度减少
- 有宽度的盒子
- width设定的只是盒子内容区的宽度
- 添加border、padding、margin会导致盒子扩展得更宽
CSS3新增了box-sizing属性,可以将有宽度的盒子设定成具有默认的auto状态下的行为
3.3 浮动与清除
float,clear
浮动
- 把元素从常规文档流中拿出来
- 让原来上下堆叠的块级元素变成左右排列,从而实现布局中的分栏
- 浮动元素脱离了常规文档流之后,原来紧跟其后的元素就会在空间允许的情况下,向上提升到与浮动元素平起平坐
3.3.1 浮动
-
文本绕排图片
-
在标记中先写图片,再写环绕它的文本
<img ... /> <p>... the paragraph text ... </p>
p {margin: 0;border: 1px solid red; } img {float: left;margin: 0 4px 4px 0; }
-
浮动非图片元素时,必须给它设定宽度
-
-
创建分栏
p {float: left;margin: 0;width: 200px;border: 1px solid red; } img {float: left;margin: 0 4px 4px 0; }
3.3.2 围住浮动元素的三种方式
浮动元素脱离了文档流,其父元素也就不会包围它
-
为父元素添加overflow: hidden
- 强制父元素包围浮动元素
- 防止包含元素被超大内容撑大:包含元素仍保持其设定的宽度,而超大的子内容则会被容器剪切掉
- 不能在下拉菜单的顶级元素上应用
-
同时浮动父元素
- 不能对已经靠自动外边距居中的元素使用
-
添加非浮动的清除元素
-
给父元素的最后添加一个非浮动的子元素,然后清除该子元素
-
由于包含元素一定会包围非浮动的子元素,且清除会让这个子元素位于(清除一侧)浮动元素的下方,因此包含元素一定会包含这个子元素——以及前面的浮动元素
-
第一种:在HTML标记中添加一个子元素并应用clear属性
-
第二种:用CSS添加清除元素
.clearfix:after {/* 必须需要有内容 */content: ".";/* 确保这个伪元素没有高度且在页面上不可见 */display: block;height: 0;visibility: hidden;clear: both; }
-
-
-
没有父元素时:clear: both
3.4 定位
position属性:可以相对于在常规文档流中的位置重新定位
static(默认)、relative、absolute、fixed
3.4.1 静态定位
在静态定位的情况下,每个元素处在常规文档流中
3.4.2 相对定位
相对的是它在原来文档流中的位置,可以使用top、right、bottom、left属性来改变位置
这个元素原来占据的空间没有动,其他元素也没动
要考虑到元素原来的空间
3.4.3 绝对定位
会把元素彻底从文档流中拿出来,相对于定位上下文定位
3.4.4 固定定位
完全移除文档流,定位上下文是视口(屏幕),不会随页面滚动而移动
3.4.5 定位上下文
绝对定位元素的任何祖先元素都可以成为它的定位上下文,只要position为relative
3.5 显示属性
display属性:block,inline,none
- 块级元素:在浏览器中上下堆叠显示
- 行内元素:在浏览器中左右并排显示,只有前一行没有空间时才会显示到下一行
display: none
- 该元素及所有包含在其中的元素都不会在页面中显示
- 原先占据的空间也会“收回”
- visibility:hidden
- 元素会隐藏,但占据的页面空间还在
- visibility:hidden
3.6 背景
背景支持为元素添加背景颜色和背景图片
元素的前景层包含内容和边框
元素的背景层可以用实色填充(background-color),也可以包含任意多个背景图片(background-image),背景图片叠加在背景颜色之上
3.6.1 CSS背景属性
- background-color
- background-image
- background-repeat
- background-position
- background-size
- background-attachment
- background(简写属性)
- background-clip、background-origin、background-break
3.6.2 背景颜色
background-color
设定元素的颜色,然后元素就会以此填充背景图层
3.6.3 背景图片
background-image
比元素小的背景图片会以元素左上角为起点,在水平和垂直方向上重复出现,直至填满整个背景空间
改变起点位置:background-position
改变水平和垂直重复效果:background-repeat
3.6.4 背景重复
background-repeat
-
repeat(默认):在水平和垂直方向上重复出现,直至填满整个背景空间
-
repeat-x:只在水平方向重复
-
repeat-y:只在垂直方向重复
-
no-repeat:不重复
-
round:为确保图片不被剪切,通过调整图片大小来适应背景区域
-
space:为确保图片不被剪切,通过在图片间添加空白来适应背景区域
3.6.5 背景位置
- 关键字
- top、left、bottom、right、center
- 任意两个关键字组合起来都可以作为该属性的值(顺序不重要)
- 数值
- 百分比
- 绝对或相对单位的数值
- 第一个值表示水平位置
- 第二个值表示垂直位置,不设置时默认为center
- 可以使用负值
background-position同时设定元素和图片的原点
- 原点决定了元素和图片中某一点的水平和垂直坐标
- 默认情况下,原点位于左上角( 元素的左上角和图片的左上角对其,然后图片向各个方向重复都是以左上角为起点)
3.6.6 背景尺寸
background-size:控制背景图片的尺寸
- 50%:缩放图片,使其填充背景区的一半
- 100px 50px:100像素宽,50像素高
- cover:拉大图片,使其完全填满背景区,保持宽高比
- contain:缩放图片,使其恰好适合背景区,保持宽高比
3.6.7 背景粘附
background-attachment:控制滚动元素内的背景图片是否随元素滚动而移动
- scroll(默认):背景图片随元素移动
- fixed:背景图片不随元素移动
3.6.8 简写背景属性
body {/* image, position, color, repeat, size, attachment */background: url("images/img.png") center #fff no-repeat contain fixed;
}
少写了哪个属性就会使用相应属性的默认值
3.6.9 其他CSS3背景属性
- background-clip:控制背景绘制区域的范围
- 默认:背景绘制区域扩展到边框和外边界
- background-origin:控制背景定位区域的原点
- background-break:控制分离元素的显示效果
- 比如,跨越多行的行内盒子
3.6.10 多背景图片
background: url("images/img1.png") 30px -10px no-repeat,url("images/img2.png") 145px 0px no-repeat,url("images/img3.png") 140px -3 0px no-repeat,#ffbd75;
先列出的图片显示在上方,更接近前景
3.6.11 背景渐变
渐变:在一定长度内由两种或多种颜色之间自然的过渡
- 线性渐变
- 从元素的一端延伸到另一端
- 默认从上到下
- 放射性渐变
- 从元素内一点向四周发散
渐变点
渐变方向上的点,可以在这些点上设定颜色和不透明度
可以添加任意多个渐变点
渐变点的位置一般用整个渐变宽度的百分比来表示
为同一个渐变点设定两种颜色可以得到突变效果
开始和结束位置如果没有声明则默认为0%和100%
如果没有声明,颜色会均匀分布于整个渐变
放射性渐变
可以使用参数指定形状、位置、尺寸、颜色、不透明度
渐变形状
- 默认:渐变效果会填充元素
- 如果元素是正方形,则渐变就是圆形
- circle:圆形渐变,剩下区域填充终点颜色