专业编程基础技术教程

网站首页 > 基础教程 正文

每天一个CSS小技巧-多重边框(css解决边框重合)

ccvgpt 2024-08-01 11:38:14 基础教程 27 ℃

方案一 box-shadow

box-shadow: <offset-x>, <offset-y>, <blur-radius>, <spread-radius>, <color>

第四个参数:扩张半径,通常指定正值或负值,可以让投影面积加大或减小。

每天一个CSS小技巧-多重边框(css解决边框重合)

一个正值的扩张半径加上两个为零的偏移量以及为零的模糊值,得到的投影其实就像一道实线框。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 200px;
      height: 100px;
      background: yellowgreen;
      box-shadow: 0 0 0 10px  #655;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

但是这并没有什么了不起的,我们完全可以用border实现。不过box-shadow的好处在于,支持逗号分隔语法,可以创建任意数量的投影。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 200px;
      height: 100px;
      margin: auto;
      margin-top: 50px;
      background: yellowgreen;
      box-shadow: 0 0 0 10px #655, 0 0 0 15px deeppink;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

唯一需要注意的是,box-shadow是层层叠加的,第一层位于最顶层,依次类推。

可以给box-shadow属性加上inset关键字,来使投影绘制在元素的内圈。

outline方案

outline: <outline-color> <outline-style> <outlinewidth>

某些情况下,你可能只需要两层边框,那就可以先设置一层常规边框,再加上outline(描边)属性来产生外层的边框。这种方法的一大优点在于边框样式十分灵活,不像上面的box-shadow方案只能模拟实现边框(假设我们需要产生虚线边框效果,box-shadow就没辙了)。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 200px;
      height: 100px;
      margin: auto;
      margin-top: 50px;
      background: yellowgreen;

      border: 10px solid #655;
      outline: 5px solid deeppink;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

outline的另一个好处在于,你可以通过outline-offset属性来控制它跟元素边缘之间的间距,这个属性可以接受负值。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 200px;
      height: 100px;
      margin: auto;
      margin-top: 50px;
      background: yellowgreen;

      border: 10px solid #655;
      outline: 5px solid deeppink;
      outline-offset: 5px;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 200px;
      height: 100px;
      margin: auto;
      margin-top: 50px;
      background: yellowgreen;

      border: 10px solid #655;
      outline: 5px solid deeppink;
      outline-offset: -5px;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

这里需要注意的是这种方案只适合双层“边框”的场景,outline并不能接受都好分割多个值。

另外outline并不贴合border-radius

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
  <style>
    .box{
      width: 200px;
      height: 100px;
      margin: auto;
      margin-top: 50px;
      background: yellowgreen;

      border: 10px solid #655;
      outline: 5px solid deeppink;
      border-radius: 10px;
    }
  </style>
</head>
<body>
  <div class="box"></div>
</body>
</html>

Tags:

最近发表
标签列表