2020-09-23 border

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不支持百分比)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容