CSS盒模型、布局模型
在CSS中, html中的标签元素大体被分为三种不同的类型:块状元素、内联元素(又叫行内元素)和内联块状元素。
常用的块状元素有以下这些:
<div> 、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote>、<form>
常用的内联元素有:
<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>
常用的内联块状元素:
<img>、<input>
元素分类-块级元素
什么是块级元素?
在html中,<div> 、<p>、<h1>...<h6>、<ol>、<ul>、<dl>、<table>、<address>、<blockquote>、<form>就是块级元素。
在开发中,我们可以将其它元素类型转换为块状元素,设置 display:block 就是将元素显示为块级元素。 如下代码就是将内联元素a 转换为块状元素, 从而使a 元素具有块状元素的特点。
a{
display:block;
}
那么块级元素有什么特点呢?
块状元素的特点有以下三个部分:
1. 每个块级元素都从新的一行开始,并且其后的元素也另起一行。
2.元素的高度、宽度、行高以及顶和底边距都可以设置。
3.元素宽度在不设置的情况下,是它本身父容器的100%(和父元素的宽度一致), 除非设定一个宽度。
元素分类-内联元素
在html中,<a>、<span>、<br>、<i>、<em>、<strong>、<label>、<q>、<var>、<cite>、<code>都是典型的内联元素(行内元素)。
块状元素也可以通过转换,将元素设置为内联元素,设置display:inline就是将元素显示为内联元素。 如下代码就是将块级元素div转换为内联元素, 从而使div具有内联元素的特性。
div{
display:inline;
}
内联元素的特点:
1.和其它元素都在一行上。
2.元素的宽度、高度及顶部和底部边距都不可设置。
3.元素的宽度就是它所包含的文字或图片的宽度, 不可改变。
盒模型
盒子模型具有上、下、左、右边距以及内边距等。块标签都具有盒子模型的特性。
盒模型-边框(一)
盒子模型的边框就是围绕着内容及补白的线, 这条线你可以设置它的粗细、样式和颜色(边框的三个属性)。
如下代码为div设置边框粗细为2px/样式为实心、颜色为红色的边框:
div{
border:2px solid red;
}
上面的代码是设置border的缩写, 也可分开写成:
div{
border-width:2px;
border-style:solid;
border-color:red;
}
但是需要注意的是:
1.border-style(边框的样式)常见的模式有以下几种:
dashed(虚线) dotted(点线) solid(实线)
2.border-color(边框颜色)中的颜色可设置为十六进制颜色,如:
border-color:#888;
3.border-width(边框宽度)中的宽度也可以设置为以下几种:
thin . medium . thick //以上三种不是很常用, 最常用的还是像素(px)
CSS中允许只为一个方向的边框设置样式。 如下代码, 为div标签单独设置下边框:
div{
border-bottom: 1px solid red;
}
border-top:1px solid red;
border-left:1px solid red;
border-right: 1px solid red;
盒模型-宽度和高度
盒模型的宽度和高度和我们平常所说的物体的实际宽度和高度的理解是不一样的, CSS內定义的宽和高, 指的是填充以里的内容范围。
因此,一个元素的实际宽度(盒子的宽度) = 左边界 + 左边框 + 左填充 + 内容宽度 + 右填充 + 右边框 + 右边界。 如下图所示:
元素的高度也是同理。
比如:
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
div{
width: 200px;
padding: 20px;
border: 1px solid red;
margin: 10px;
}
</style>
</head>
<body>
<div>文本内容</div>
</body>
</html>
元素的实际长度为:10px + 1px + 20px + 200px+ 20px+1px + 10px = 262px。 在chrome浏览器下可查看元素盒模型。 如下图:
盒模型-填充
元素内容与边框之间是可以设置距离的, 称之为填充。 填充可分为上、右、下、左(顺时针)。 如下代码:
div{
padding: 20px 10px 15px 30px;
}
顺序不要搞混。 上面的代码可以分开写为:
div{
padding-top:20px;
padding-right:10px;
padding-bottom:15px;
padding-left:30px;
}
如果上、右、下、左的填充都为10px; 则可以写成以下形势:
div{
padding:10px;
}
如果上下填充一样为10px, 左右填充一样为20px, 可以写为以下形势:
div{
padding:10px 20px;
}
盒模型-边界
元素与其他元素之间的距离可以使用边界(margin)来设置。边界也分为上、右、下、左。代码如下:
div{
margin:20px 10px 15px 30px;
}
上面代码等同于:
div{
margin-top:20px;
margin-right:10px;
margin-bottom:15px;
margin-left:30px;
}
如果上、右、下、左的边界都为10px, 可以写成如下形式:
div{
margin:10px;
}
如果上下边界一样为10px,左右边界一样为20px, 可以写成如下形式:
div{
margin:10px 20px;
}
如果上边界为10,下边界为30,左、右边界的值一样为20px,可以简写为:
div{
margin:10px 20px 30px;
}
总结:padding 和 margin的区别, padding在边框里, margin在边框外。并且padding、margin、border的缩写方式是一致的。
CSS布局模型
清楚了CSS盒模型的基本概念、盒模型类型,现在可以继续深入的探讨网页布局的基本模型了。 布局模型与盒模型一样都是CSS最基本、最核心的概念。但布局模型是建立在盒模型基础之上, 又不同于我们常说的CSS布局样式或CSS布局模版。如果说布局模型是本, 那么CSS布局模版就是末了,是外在的表现形式。
在网页中,元素有三种布局模型:
流动模型(Flow)
浮动类型(Float)
层模型(Layer)
流动模型(Flow)
流动(Flow)是默认的网页布局模式。 也就是说网页在默认的状态下HTML网页元素都是根据流动模型来分布网页内容的。
流动布局模型具有两个比较典型的特征:
1.块状元素都会在所处的包含元素內自动自上而下按照顺序垂直延伸分布, 因为默认状态下,块状元素的宽度都为100%。实际上,块状元素都会以行的形式占据位置。
2.在流动模型下,内联元素都会在所处的包含元素內从左到右水平分布显示。
浮动模型(Float)
浮动元素可以使块状元素(独立占一行)并排显示。
任何元素在默认情况下是不能浮动的, 但可以用CSS定义为浮动, 比如div、p、table、img等元素都可以被定义为浮动。 如下代码实现了两个div元素一行显示:
div{
width:200px;
height:200px;
border:2px red solid;
float:left;
}
<div id="div1"></div>
<div id="div2"></div>
效果图如下:
当然也可以同时设置两个元素右浮动也可以实现一行显示。
div{
width:200px;
height:200px;
border:2px red solid;
float:right;
}
效果图如下:
当然也可以设置一左一右显示的效果:
div{
width:200px;
height:200px;
solid:2px red solid;
}
#div1{
float:left;
}
#div2{
float:right;
}
层模型(Layer)
层布局模型就像是图像软件ps中非常流行的图层编辑功能一样, 每个图层能够精确定位操作,但在网页设计领域,由于网页大小的活动性,层布局没能受到热捧。 但是在网页上局部使用层布局还是有其方便之处的。
层模型有三种形式:
1.绝对定位(position:absolute)
2.相对定位(position:relative)
3.固定定位(position:fixed)
层模型-绝对定位
如果想为元素设置层模中的绝对定位,需要设置postion:absolute(表示绝对定位),这条语句的作用是将元素从文档中拖出来,然后使用left、right、top、bottom属性相对于其最接近的一个具有定位属性的父包含块进行结对定位。 如果不存在这样的父包含块,则相对于body元素, 即相对于浏览器窗口进行绝对定位。
如下代码可以实现div元素相对于浏览器窗口向右移动100px, 向下移动50px。
div{
width:200px;
height:200px;
border:2px red solid;
position:absolute;
left:100px;
top:50px;
}
<div id="div1"></div>
效果如下:
层模型-相对定位
如果想为元素设置层模型中的相对定位,需要设置position:relative(表示相对定位), 然后设置left、right、top、bottom属性确定元素在正常文档流中的偏移位置。相对定位完成的过程是首先static(float)方式生成一个元素(并且元素像层一样浮动了起来), 然后相对于以前的位置偏移,移动的方向和幅度由left、right、top、bottom属性确定, 偏移前的位置保持不动。
如下代码实现相对于以前的位置向下偏移50px、向右偏移100px;
#div1{
width:200px;
height:200px;
border:2px red solid;
position:relative;
left:100px;
top:50px;
}
<div id="div1"></div>
效果如下:
层模型-固定定位
fixed:表示固定定位, 与absolute定位类型类似, 但它的相对移动的坐标是视图(屏幕内的网页窗口)本身。由于视图本身是固定的, 它不会随着浏览器窗口的滚动而变化,除非你在屏幕中移动浏览器窗口的屏幕位置, 或改变浏览器窗口的大小, 因此固定定位的元素会始终位于浏览器窗口内视图的某个位置, 不会受文档流动的影响,这与background-attachment:fixed属性功能相同。
以下代码可以实现相对于浏览器视图向右移动100px, 向下移动50px, 滚动时,位置保持不变。
#div1{
width:200px;
height:200px;
border:2px red solid;
position:fixed;
left:100px;
top:50px;
}
<p>文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本文本。</p>
relative 与 absolute的组合使用
使用position:absolute可以实现被设置元素相对于浏览器(body)设置定位以后, 还可以使用position:relative来进行相对于其它元素的定位, 但是必须遵守下面的规范:
1.参照定位的元素必须是相对定位元素的前辈元素:
<div id="box1"><!--参照定位的元素-->
<div id="box2">相对参照元素进行定位</div><!--相对定位元素-->
</div>
从上面的代码可以看出box1是box2的父元素(前辈元素)。
2.参照定位的元素必须加入position:relative
#box1{
width:200px;
height:200px;
position:relative;
}
3.定位元素加入position:absolute, 便可以使用top、bottom、left、right来进行偏移定位了。
#box2{
position:abslote;
top:20px;
left:30px;
}
这样box2就可以相对于父元素box1定位了。(此处参照物就可以不是浏览器, 可以自由设置了)
CSS的颜色设置
颜色值
在网页中的颜色设置非常重要, 有字体颜色(color)、背景颜色(background-color)、边框颜色(border)等, 设置的方法也是多种多样
1.英文命令颜色
p{
color:red;
}
2.RGB颜色
RGB颜色在网页中的设置, 与photoshop中的RGB色值是一致的, 由R(red)、G(green)、B(blue)三种颜色的比例来进行配色。
p{
color:rgb(133,123,211);
}
每一项的值可以是0-255之间的整数,也可以是0%-100%的百分数:
p{
color:rgb(20%,33%,10%);
}
3.十六进制的颜色
这种颜色设置方法在开发中是比较普遍的使用方法, 其原理其实也是RGB设置, 但是每一项的值由0-255变成了十六进制的00-ff。
p{
color:#00ffff;
}
配色图:
颜色的缩写
颜色的CSS样式也是可以缩写的, 当你设置的颜色是16进制的色彩值时, 如果每两位的值相同可以缩写一半。
例如:
p{
color:#000000;
}
可以缩写为:
p{
color:#000;
}
例如:
p{
color:#336699;
}
可以缩写为:
p{
color:#369;
}
字体的缩写
网页中的字体CSS样式代码也有自己的缩写方式
例如:
body{
font-style:italic;
font-variant:small-caps;
font-weight:bold;
font-size:12px;
line-height:1.5em;
font-family:"宋体",sans-serif;
}
可以缩写成以下样式:
body{
font:italic small-caps bold 12px/1.5em "宋体",sans-serif;
}
注意:
1.使用字体的如上简写方式,需至少指定font-size和font-family属性, 其他的属性未指定时,将自动使用默认值。
2.在缩写font-size和line-height中间要加斜杆(/)。
一般情况下,对于中文网站, 英文还是比较少的, 所以比较常用只有字号、行间距、中文字体、英文字体等的设置,如以下缩写代码:
body{
font:12px/1.5em "宋体",sans-serif;
}
长度值
目前比较常用到的长度值有: px(像素)、em、百分比(%), 这三种单位都是相对单位。
1.像素(px)
像素指的是显示器上的小点(CSS规范中假设 90像素=1英寸)。实际情况是浏览器会使用显示器的实际像素值, 在目前大多数设计者都倾向于使用像素(px)作为单位。
2.em
em是指本元素给定的font-size值, 如果元素的 font-size 为14px,那么 1em=14px; 如果font-size为18px,那么1em=18px。
如下代码:
p{
font-size:12px;
text-indent:2em;
}
上面的代码就是可以实现段首缩紧24px(也就是两个字字体大小的间距)。
特殊情况:
当给font-size设置的单位是em时,
如下代码:
html:
<p>此时的计算的标准以p的<span父元素</span>的font-size为基础。</p>
css:
p{
font-size:14px;
}
span{
font-size:0.8em;
}
此时span中的字体的大小为:11.2px (14 * 0.8 = 11.2px)
3.百分比
p{
font-size:12px;
line-height:130%;
}
设置行高(行间距)为字体的130% (12 * 1.3 = 15.6px)。