CSS学习六:盒子模型
在大型项目中,太多的css,也会造成复杂,此时一般会用SASS。
sass 是成熟、稳定、强大的 CSS 扩展语言。
一、盒模型
CSS盒模型:是css布局的基石,它规定了网页元素如何显示以及元素间相互关系。
CSS定义的所有元素,都可以拥有像盒子一样的外形和平面空间,即都包含了边框border,外边距margin,内边距padding,内容区content。
盒模型一共有两种模工,标准模式和怪异模式。
盒的内容:
(1) overflow属性:指定如果内容content溢出一个元素的框,会发生什么。针对盒模型
overflow属性值:
- visible:默认值,内容不会被裁剪,会呈现到元素框之外。
- hidden:内容被裁剪,其余内容不可见。
- scroll:内容被裁剪,滚动条显示其余内容。
- auto:如果内容被裁剪,则浏览器以滚动条显示其余内容。
overflow-x属性:指定如果内容溢出了元素的内容区是否剪辑左/右边缘内容。
overflow-y属性:指定如果内容溢出了元素的内容区是否剪辑顶部/底部边缘内容。
(2) text-overflow属性:指定当文本溢出包含它的元素,应该发生什么。针对文本。
text-overflow属性值:
- clip:修剪文本
- ellipsis:显示省略符号来代表被修剪 的文本
- string:使用给定的字符串来代表被修剪的文本
注意:text-overflow必须和overflow:hidden;white-space:nowrap一起使用
盒模型示例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> #box1 { width: 100px; height: 100px; background-color: red; padding-left: 10px; } #box3 { width: 100px; height: 100px; background-color: blue; margin-top: 10px; } #box5 { width: 100px; height: 100px; background-color: green; border: solid red 5px; } #box6 { width: 100px; height: 100px; background-color: orange; padding: 10px; margin: 20px; border: solid yellow 5px; } </style> </head> <body> <div id="box1"> how are you? </div> <div id="box3"> how are you? </div> <div id="box5"> how are you? </div> <div id="box6"> how are you? </div> </body> </html>
可见,width,height属性,是内容content的宽度。
overflow示例:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> #box7 { width: 100px; height: 100px; background-color: aqua; /* overflow: visible; */ /* overflow: hidden; */ /* overflow: scroll; */ overflow: auto; } </style> </head> <body> <div id="box7"> 网页中DIV+CSS盒模型组成,首先需要理解div,可以将其想像成一个大的盒子,它有border,padding,margin这些属性,会table布局的话,其实对于这个更好理解,看下盒子模型如 </div> </body> </html>
text-overflow示例:
<style type="text/css"> #box7 { width: 150px; height: 150px; background-color: aqua; white-space: nowrap; /*文本不换行,默认值normal自动换行*/ overflow: hidden; /*内容被裁剪,其余内容不可见*/ text-overflow: clip; } </style> <div id="box7"> 网页中DIV+CSS盒模型组成,首先需要理解div,可以将其想像成一个大的盒子,它有border,padding,margin这些属性,会table布局的话,其实对于这个更好理解,看下盒子模型如 </div>
总结:
盒模型的宽度:width(margin,padding,border都为0时的宽度,即内容的宽度;否则是它们所有宽度之各:margin+padding+border+content)
盒模型的调度:height(margin,padding,border都为0时的高度,即内容的高度)
盒模型的背景:backgroumd-color:颜色值,background-image:url(图片地址)
盒模型的边框:border
盒模型的外边距:margin
盒模型的内边距:padding
二、盒模型的各个组件
边框border属性:
- border:简写属性,用于把针对四个边的属性设置在一个声明中。boder-style,border-width,border-width合在一起写。
- border-style:用于设置元素所有边框的样式,或者单独地为各边设置边框样式。属性值:solid实线,dashed虚线(多数浏览器中呈实线),dotted点状线(多数浏览器中呈现实线),double双实线,
- border-width:简写属性,用于为元素的所有边框设置宽度,或者单独地为各个边框设置宽度
- border-color:简写属性,设置元素的所有边框中可见部分的颜色,或为各个边框单独设置颜色
- border-bottom:简写属性,用于把下边框的所有属性设置到一个声明中。boder-style,border-width,border-width合在一起写。
- border-left:简写属性,用于把右边框的所有属性设置到一个声明中。同上
- border-right:简写属性,用于把右边框的所有属性设置到一个声明中。同上
- border-top:简写属性,用于把上边框的所有属性设置到一个声明中。同上
注意:如果要设置盒子的边框,必须制定边框线形。如果只制定了线形,那么颜色和宽度将会采用默认值。
边框border的线型border-style,分为:solid实线,dashed虚线,dotted点状线,double双线
线型的值:数值 + 单位
线形的颜色:颜色值
通常的写法,示例:线型、边框宽度(线的宽度)、线的颜色
border: solid 5px red;
border-left:double 5px blue;
内边距padding属性:填充元素内容与边框之间的区域,称之为内边距
用法:
- 用于调整内容在容器中的位置关系
- 用来调整子元素在父元素中的位置关系。注:padding属性需要添加在父元素上。
- padding值,是额外加在元素原有大小之上的。如果想保证盒子大小不变,需从元素宽度或调度上减掉将要添加的padding属性值。
padding属性值(宽度、高度)的四种方式:
- 四个值:上 右 下 左(顺时针),如{padding:10px 20px 30px 40px}
- 三个值:上 左右 下,如{paddding: 10px 20px 30px},20px是左右的值。
- 二个值: 上下 左右,如{padding:10px 20px},10是上下的padding值,20是左右的padding值
- 一个值:四个方向 ,如{padding: 10px},上下左右都是10px的padding值
另外,也可单独设置某个方向上的padding。
如,上方{padding-top: 10px;},右方{padding-right: 10px;},下方{padding-bottom:10px;},左方{padding-left: 10px}。
子元素在父元素中的位置,示例:
<div style="width: 380px;height: 380px;background-color: red;padding: 10px 30px;"> <div style="width: 100px;height: 100px;background-color: blue;"></div> </div>
外边距margin:盒子与盒子之间的距离。
外边距margin的属性:
- margin:
- margin-top:上外边距
- margin-right:右外边距
- margin-bottom:下外边距
- margin-left:左外边距
margin属性值(宽度、高度)的四种方式:
- 四个值:上 右 下 左(顺时针),如{magin:10px 20px 30px 40px}
- 三个值:上 左右 下,如{margin: 10px 20px 30px},20px是左右的值。
- 二个值: 上下 左右,如{margin:10px 20px},10是上下的margin值,20是左右的margin值
- 一个值:四个方向 ,如{margin: 10px},上下左右都是10px的margin值
说明:
- {margin: 0 auto}在浏览器中,横向居中,margin为0。
- 也可单独设置某一方向上的边距。
示例:
<div id="box8"></div> <div id="box9"></div>
<style type="text/css"> * { margin: 0; padding: 0; } #box8 { width: 150px; height: 150px; background-color: red; margin-bottom: 20px; } #box9 { width: 150px; height: 150px; background-color: darkblue; } </style>
以示例的结果是box8和box9相距20px
示例,将box9的上外边距设置为25px:
#box9 {
width: 150px;
height: 150px;
background-color: darkblue;
margin-top: 25px;
}
示例的结果是box8和box9相距25px,而不是20+25=45px;当然box8下外边距仍然是20px,box9上外边距仍然是25px,但两个box这间的距离,取较大的margin值。
示例:增加两个横向的box---因为div是块级元素,自动换行,要使两个box横向排列,需要这两个box都设置为行内块级元素;使得两个box既可设置宽度,又可以不换行。
<div id="box10"></div> <div id="box11"></div>
<style type="text/css"> * { margin: 0; padding: 0; } #box10 { width: 150px; height: 150px; background-color: darkmagenta; display: inline-block; } #box11 { width: 150px; height: 150px; background-color: aqua; display: inline-block; } </style>
但是,发现两个box之间会有个小间距,即使全局的margin和padding都设置为了0。
这是浏览器自动加的边距。可见让两个box变为行内块级元素,可以使得它们横排,但是即使两个box的margin和padding都为0,也会有间距。
怎么才可以既能横排,又让浏览器不自动加边距。使用float浮动,对两个box都使用左浮动。
#box10 {
width: 150px;
height: 150px;
background-color: darkmagenta;
float: left;
}
#box11 {
width: 150px;
height: 150px;
background-color: aqua;
float: left;
}
示例,对以上两个box的第一个box设置margin-left
#box10 {
width: 150px;
height: 150px;
background-color: darkmagenta;
float: left;
margin-right: 50px;
}
#box11 {
width: 150px;
height: 150px;
background-color: aqua;
float: left;
}
结果是,两个横向的盒子相距50px
示例,第一个盒子设置margin-left 50px,第二个盒子设置margin-right 50px
#box10 { width: 150px; height: 150px; background-color: darkmagenta; float: left; margin-right: 50px; } #box11 { width: 150px; height: 150px; background-color: aqua; float: left; margin-left: 50px; }
示例的结果是,两个盒子相距100px,相距为两个盒子的边距之和。
可见,纵向时,盒子之间的距离取较大的盒子外边距;
横向排列时,盒子之间的距离为两个盒子外边距之和。
盒子尺寸的计算:
盒子宽 = 左右margin + 左右border + 左右padding + 内容width
盒子高 = 上下margin + 上下border + 上下padding + 内容height
posted on 2018-11-15 20:17 myworldworld 阅读(308) 评论(0) 收藏 举报