• 半透明边框与多重边框的实现


     *以下技巧均源自于Lea Verou所著《CSS Secrets》

    半透明边框

      按照常规的思维,我们在添加半透明的边框时无非是将边框颜色设置一个透明度,如下:

     1 <!DOCTYPE html>
     2 <html lang="en">
     3 <head>
     4     <meta charset="UTF-8">
     5     <title>Title</title>
     6     <style>
     7         .outerBox{
     8             position: relative;
     9             width: 400px;
    10             height: 400px;
    11             background-color: aqua;
    12         }
    13         .innerBox{
    14             position: absolute;
    15             top: 0;
    16             bottom: 0;
    17             left: 0;
    18             right: 0;
    19             width: 200px;
    20             height: 100px;
    21             margin: auto;
    22             background-color: cadetblue;
    23             border: 10px dashed rgba(200,0,100,.2);
    24         }
    25     </style>
    26 </head>
    27 <body>
    28     <div class="outerBox">
    29         <div class="innerBox"></div>
    30     </div>
    31 </body>
    32 </html>

    然而显示的效果并不理想,背景图片侵入了透明的边框中。

    当然我们可以在背景外层再加一层div,然后将div设置为透明,然后将背景居中也可以达到透明边框的效果,但是比较繁琐。

    这里我们可以在innerBox类中添加一条属性background-clip: padding-box;(这个属性的初始值是border-box) 表示侵入到padding之外的background将会被截去。实现效果如下:

    多重边框

      border属性并不支持多个边框的设定,涉及到多重边框时我们常规的思路要么是使用多个div层层嵌套,层层居中。要么是使用背景图模拟多重边框。这里我们以另外两个角度来实现多重边框。

    • box-shadow

      box-shadow的相关语法是box-shadow: h-shadow v-shadow blur spread color inset; 当我们将h-shadow v-shadow blur设置为0。再加上正值的拓张半径spread 。我们就能模拟实线的边框。

      最重要的是,box-shadow支持逗号分隔语法,这意味着我们能加任意数量的投影。我们将之前的边框去除,加上box-shadow: 0 0 0 5px deeppink, 0 0 0 10px darkred, 0 0 0 15px #4C608B;

      

      这种方法非常便捷,但是需要注意的是。阴影与边框在布局中的行为并不一致,它不占据实际的“位置”也无法响应事件。此时我们需要使用外边距模拟阴影所占据的位置。或者在box-shadow中加入inset关键字改为内置阴影再使用内边距模拟所占据的位置,这样做既是实体布局又可以响应事件。

    • outline

      当我们只需要两层边框时可以考虑在border的基础上加上outline(描边)。这样做有一个优点就是outline的样式比较灵活,而box-shadow只能模拟实线。与outline-offset配合使用可以控制描边与边缘的位置关系。

    这里我们做一个简单的缝边效果:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Title</title>
        <style>
            .outerBox{
                position: relative;
                width: 400px;
                height: 400px;
                background-color: aqua;
            }
            .innerBox{
                position: absolute;
                top: 0;
                bottom: 0;
                left: 0;
                right: 0;
                width: 200px;
                height: 100px;
                margin: auto;
                background-color: cadetblue;
                border: 5px solid cadetblue;
                border-radius:5px;
                outline: 1px dashed #fff;
                outline-offset: -5px;
            }
        </style>
    </head>
    <body>
        <div class="outerBox">
            <div class="innerBox"></div>
        </div>
    </body>
    </html>

    要注意的是,描边并没有圆角属性,当我们在圆角外描边的时候,有可能出现无法贴合的情况。此时不要采用这种方式。

      

  • 相关阅读:
    poj3613 求经过n条边的最短路 ----矩阵玩出新高度 。
    牛客练习赛43 Tachibana Kanade Loves Game (简单容斥)
    牛客练习赛43 Tachibana Kanade Loves Review C(最小生成树Kruskal)
    牛客练习赛43 Tachibana Kanade Loves Probability(快速幂)
    哈尔滨工程大学ACM预热赛 G题 A hard problem(数位dp)
    poj 3252 Round Numbers(数位dp 处理前导零)
    hdu 3652 B-number(数位dp)
    poj 3666 Making the Grade(离散化+dp)
    poj 3186 Treats for the Cows(dp)
    poj 1661 Help Jimmy (dp)
  • 原文地址:https://www.cnblogs.com/sharpall/p/6077401.html
Copyright © 2020-2023  润新知