CSS把认为所有的元素都是一个方方正正的“盒子(box)”。
所以每个盒子,都可以设置:
包括边框的粗细(width)、样式(style)和颜色(color)
border-width: 5px; /*粗细为5px*/ border-style: dashed; /*样式为虚线*/ border-color: red;
一样可以合并简写:
border: 5px dashed red; /*不限顺序*/ border: 5px dashed; /*只有颜色可以省略*/
还可以指定上左下右(top/right/bottom/left)四边中的一个或若干个border(演示:引用效果)
而且四边边框还可以不同,可以分别指定:
border-top: 1px dashed; border-right:none; border-bottom:5px solid; border-left:3px dotted blue;
border-radius: 10px;
10px指的就是“圆角的半径”(PPT演示)
@想一想@:怎么做出一个圆?
演示效果:关键字上悬浮
实际上是由border生成的。先看一下四个border是如何组合的:
div { border-top: 5px solid blue; border-left:5px solid red; border-right: 5px solid yellow; border-bottom: 5px solid green; }
如何只留下一个三角形呢?把其他三个border去掉就可以了。
但是,注意:如果其他三个border的样式完全不声明,是不能形成这种效果的。怎么办呢?将其颜色设置成透明(tansparent)即可:
border-right: 5px solid transparent;
最后,有一些元素是设置不了border的。
比如要实现这样的表格效果:
因为一个tr代表一行,所以你可能想用这样的样式:
tr{ border: 1px solid; }但这是不行的(演示),正确的方法是:
table{ border-collapse: collapse; } th, td{ border-top: 1px solid; border-bottom: 1px solid; }
PS:CSS3中还添加了其他一些display的选项,比如:inline-block,table-*等,但并非所有浏览器都予以支持,此处略过。
此外,display:none,还可以让元素不显示。
这里注意它和color:transparent以及visibility:hidden的区别:
visibility:hidden; /*不可见,但还是会占着位置*/ display:none; /*不显示,也不会占着位置*/
可以用px/em等绝对单位,也可以用(父元素声明的宽/高度)百分比表示:
width: 33%; height: 200px;
其常用可选项为:
此外还可以用overflow-x和overflow-y更精确的设置横向(x)和纵向(y)处置情形。
从CSS3开始,还可以声明最大(max)宽/高度和最小(min)宽/高度,即当盒子中的内容不足/超出指定高/宽度时,绷起盒子或折叠内容。
div{ border: 1px solid; max-height: 300px; min-width: 500px; float: left; }注意:快捷元素默认宽度为全屏宽,所以min-width需要在元素浮动(后文详述)后才能生效。
流元素(样式)的上设置width和height无效。
但可设置 line-height。把line-height设置得和父元素一样高时,可以让流元素垂直居中(当然也可以偏上偏下调节):
<div style="height:100px;"> <span style="line-height:100px;" >大神小班,全程直播</span> </div>PS:inline-block,和inline的区别就是允许在元素上设置宽度和高度。
设置盒子(边框)和内部内容之间的距离。
padding-top: 10px; padding-bottom: 30%; /*当前元素高度为基数*/ padding-left: 5em; padding-right: 10%; /*当前元素宽度为基数*/
也可以合并简写:
padding: 10px 10% 30% 5em; /*顺序为上右下左顺时针*/ padding: 10px 10%; /*上下相同为10px,左右相同为10%*/ padding: 10px; /*上下左右全部为10px*/ padding: 10px 20px 10% ; /*上下各为10px和10%,左右同为20px*/
会影响(挪动)左右相邻元素,但不会影响上下元素
(*/ω\*),直接演示吧:
span{ border: 1px solid; padding: 10px; }
<span>源栈欢迎您</span><br /> <span>源栈欢迎您</span>
border和padding会撑开盒子大小。
用两个div进行对比演示:
<div id="has-border">一起帮·源栈欢迎您</div> <div id="no-border"> 助力职业自由</div>
设置相同的宽度,不同的背景色:
#has-border { /* box-sizing: border-box; */ /* border-right: 20px solid; */ /* padding-right: 20px; */ background-color: burlywood; } #no-border { background-color: antiquewhite; } div { width: 500px; }
这在实际开发中会带来很多麻烦!
所以CSS 3引入了box-sizing设置,如果其值为border-box,盒子的尺寸(宽高)由width和height决定之后,padding和border不能再将其撑开,或者可以理解成:padding和border包含在width和height之中。
设置盒子和盒子之间的距离。
<h1 style="margin-bottom:20px;">源栈欢迎您!</h1> <span style="margin-right:20px;">大神小班</span><span style="margin-left:20px;">全程直播</span>margin的用法和padding类似,一样可以上下左右四个边分别设置,或者合并简写。同样的,流元素无法设定上下margin。
<main> <p>大神小班</p> <p>全程直播</p> <p>按周计费</p> <p>拎包入住</p> </main>
p { margin: 20px; }你会发现所有p标签被均匀的分布,没有出现第一段和第二段之间间距 20+20=40px 的情形。边界折叠的设计初衷就是这个,然而,却造成了更多的麻烦……
PS:更复杂的更完整的情形可以参考MDN
main { background-color: aqua; /*便于观察*/ width: 500px; /*要设定一个宽度,否则默认100%的宽度无水平居中的意义*/ margin-left: auto; margin-right: auto; }
各个浏览器给不同HTML元素默认设置了不同的margin和padding,非常麻烦!为了避免这种浏览器兼容问题,我们通常都首先直接定义:
* { margin: 0; padding: 0; }
另外,调试的时候,我喜欢这样给所有元素都添加一个边框来看一看:
* { border: 1px solid; }
多快好省!前端后端,线上线下,名师精讲
更多了解 加: