zoukankan      html  css  js  c++  java
  • 半透明边框与多重边框的实现

     *以下技巧均源自于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>

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

      

  • 相关阅读:
    Infopath Notify 弹出提示信息
    window.showModalDialog 返回值
    【转】获得正文内容中的所有img标签的图片路径
    Json Datable Convert
    Sharepoint 列表 附件 小功能
    Surgey 权限更改
    SQL 触发器用于IP记录转换
    Caml语句 查询分配给当前用户及当前组
    jquery 1.3.2 auto referenced when new web application in VSTS2010(DEV10)
    TFS diff/merge configuration
  • 原文地址:https://www.cnblogs.com/sharpall/p/6077401.html
Copyright © 2011-2022 走看看