1、border-width
1)、为什么border-width不支持百分比?
答:根据语义和使用场景决定的,即边框不会因为设备大就按比例变大。类似的还有outline, box-shadow, text-shadow...
2)、border-width还支持关键字
- thin:薄薄的 1px
- medium:薄厚均匀的 3px(默认值)
- thick:厚厚的 5px
3)、为何border-width默认值是medium(3px)呢?明明thin(1px)更常用!
因为border-style:double至少3px才有效果
2、border-style
1)、solid 实线
2)、dashed 虚线
-
兼容性问题(没有实际测试过):
image.png
3)、dotted 点线(没有实际测试过)
image.png
-
使用——IE7,IE8 CSS实现圆角
image.png
image.png
实际情况测试下,IE跟Chrome都是圆形
4)、 double 双线(兼容性很好)
- 计算规则
1px: 0+1+0
2px: 1+0+1
3px: 1+1+1
4px: 1+2+1
5px: 2+1+2
双线宽度永远相等,中间间隔±1
- 实例
<style>
.box {
width: 300px;
height: 20px;
border-top: 60px double;
border-bottom: 20px solid;
}
</style>
<body>
<div class="box"></div>
</body>
image.png
5)、inset 内凹 (现在基本没任何用处)
6)、outset 外凸 (同上)
7)、groove 沟槽 (同上)
8)、ridge 山脊(同上)
上述四种:风格过时 + 兼容性差
3、border-color与color
1)、border-color默认颜色就是color
<style>
.box {
border: 10px solid;
color: #ea6f5a;
}
</style>
<body>
<div class="box">我的颜色</div>
</body>
image.png
类似的还有box-shadow,text-shadow,outline等。
2)、有什么用?——精彩案例之:hover与图形变色
- 传统实现
<style>
.add {
width: 100px;
height: 100px;
border: 1px solid #ccc;
}
.co {
font-size: 30px;
color: #ccc;
text-align: center;
line-height: 100px;
}
.add:hover {
border-color: #ea6f5a;
}
.add:hover .co {
color: #ea6f5a;
}
</style>
<body>
<div class="add">
<div class="co">+</div>
</div>
</body>
- 利用border实现
<style>
.add {
width: 100px;
height: 100px;
border: 1px solid;
color: #ccc;
}
.co {
font-size: 30px;
text-align: center;
line-height: 100px;
}
.add:hover {
color: #ea6f5a;
}
</style>
<body>
<div class="add">
<div class="co">+</div>
</div>
</body>
image.png
只要一个color hover变化,就可以一起变色!且transition过渡也只要一个color属性!
4、border与background定位
css2.1时,background只能相对左上角数值定位,不能相对右下角
1)、可以通过border实现相对右下角的定位;
<style>
.box {
height: 200px;
border-right: 50px solid transparent;
background: url('./img/bs-02.png') no-repeat 100% 40px;
}
</style>
<body>
<div class="box"></div>
</body>
image.png
5、border与三角等图形构建
<style>
.box {
width: 0px;
height: 0px;
border-width: 50px;
border-style: solid;
border-color: #ea6f5a #ea6f5a transparent transparent;
}
</style>
<body>
<div class="box"></div>
</body>
image.png
为什么边是斜的,因为继承了border-style:inset效果,这也是可以用border实现三角形的根基所在
image.png
image.png
实际应用场景一
<style>
.wra {
width: 100px;
height: 50px;
position: relative;
}
.out {
width: 0;
height: 0;
border-width: 25px 50px;
border-style: solid;
border-color: transparent #ea6f5a #ea6f5a transparent;
position: absolute;
left: 0;
bottom: 0;
}
.in {
width: 0;
height: 0;
border-width: 15px 50px;
border-style: solid;
border-color: transparent #fff #fff transparent;
position: absolute;
left: 0;
bottom: 0;
}
</style>
<body>
<div class="wra">
<div class="out"></div>
<div class="in"></div>
</div>
</body>
image.png
模拟圆角
image.png
6、border与透明边框——始于IE7,足够兼容
1)、实例一——优雅增加相应区域大小-复选框
<style>
.checkbox {
width: 16px;
height: 16px;
border: 2px solid transparent;
box-shadow: inset 0 1px, inset 1px 0, inset -1px 0, inset 0 -1px;
}
</style>
<body>
<div class="checkbox"></div>
</body>
边框使用盒阴影,原先border变透明用来增加点击区域,现在复选框点击区域大小是20px*20px
2)、增加可视渲染区域——drop-shadow可以给png图标赋色(CSS3属性)
.icon { filter: drop-shadow(20px 0 #ff0080); }
但是,Chrome浏览器下:页面中不可见元素的drop-shadow也是不可见的!
- text-indent负值隐藏原始图,无投影,失败 (对图片使用text-indent负值,不起作用,不知道是浏览器版本原因还是drop-shadow属性的修改)
- clip剪裁隐藏,无投影,失败 (试过了,不行)
<style>
body {
margin: 0;
}
.wra {
width: 160px;
height: 160px;
margin: auto;
overflow: hidden;
}
.img {
width: 160px;
height: 160px;
border-right: 20px solid transparent;
filter: drop-shadow(160px 0 #ea6f5a);
position: absolute;
clip: rect(0px, 0px, 0px, 0px);
}
</style>
<body>
<div class="wra">
<img src="./img/bs-02.png" alt="" class="img">
</div>
</body>
- margin负值隐藏原始图,无投影,失败 (实际测试过可以,不知道是浏览器版本原因还是drop-shadow属性的修改)
- left负值隐藏原始图,无投影,失败 (实际测试过可以,不知道是浏览器版本原因还是drop-shadow属性的修改)
透明border突破可视区域的限制
<style>
body {
margin: 0;
}
.wra {
width: 160px;
height: 160px;
margin: auto;
overflow: hidden;
}
.img {
width: 160px;
height: 160px;
border-right: 20px solid transparent;
filter: drop-shadow(160px 0 #ea6f5a);
position: relative;
left: -160px;
}
</style>
<body>
<div class="wra">
<img src="./img/star.png" alt="" class="img">
</div>
</body>
image.png
7、border在布局中的应用
1)、应用一:实现左右两栏的登高布局
<style>
.box {
border-left: 300px solid #f3f3f3;
}
.left {
width: 300px;
float: left;
margin-left: -300px;
}
</style>
<body>
<div class="box">
<nav class="left">
<div>导航1</div>
</nav>
<section>
<div class="module">模块1</div>
<div class="module">模块1</div>
<div class="module">模块1</div>
<div class="module">模块1</div>
<div class="module">模块1</div>
</section>
</div>
</body>
image.png
局限性:不支持百分比宽度(因为border不支持百分比)