Skip to content

使用纯 CSS 实现科技化的边框的盒子

效果图:

实现原理

给一个盒子设置默认的边框颜色

然后给他设置两个伪元素

只要让横向的元素保留左右边框,纵向的元素保留上下边框即可实现对应的效果

代码

先给一个盒子

css
.div {
  height: 200px;
  width: 150px;
  border: 1px solid rgba(2, 166, 181, 1); // 设置默认的边框颜色
  position: relative; // 给上相对定位  这个等下会用到
}

然后给盒子设置一个伪元素,一定要注意加上pointer-events: none;

css
.div::after {
  content: '';
  display: block;
  border-width: 0px;
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
  top: -1px; // 让他位置-1刚好贴在盒子的边框上
  width: calc(100% - 30px); // 控制30px的宽度
  height: calc(100% + 2px); // 因为他有上下共2px的边框,所以需要减掉
  background: inherit;
  background-color: rgba(255, 255, 255, 0);
  box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: red;
  border-right: 0px; // 右边的边框不显示
  border-left: 0px; // 左边的边框不显示
  border-radius: 0px;
  border-top-right-radius: 0px;
  border-bottom-left-radius: 0px;
  -moz-box-shadow: none;
  -webkit-box-shadow: none;
  box-shadow: none;
  line-height: 36px;
  pointer-events: none; // 重点 - 加上这行才不会覆盖元素内的点击
}

然后盒子就成了这样

接着再加上横向的伪元素

css
.div::before {
  content: '';
  display: block;
  pointer-events: none; // 重点 - 加上这行才不会覆盖元素内的点击
  border-width: 0px;
  position: absolute;
  top: 50%;
  left: -1px; // 让他位置-1刚好贴在盒子的边框上
  transform: translateY(-50%);
  width: calc(100% + 2px);
  height: calc(100% - 30px); // 控制30px的高度
  background-color: rgba(255, 255, 255, 0);
  box-sizing: border-box;
  border-width: 1px;
  border-style: solid;
  border-color: red;
  border-top: 0px; // 上边的边框不显示
  border-bottom: 0px; // 下边的边框不显示
  border-radius: 0px;
  border-top-right-radius: 0px;
  border-bottom-left-radius: 0px;
  -moz-box-shadow: none;
  -webkit-box-shadow: none;
  box-shadow: none;
  line-height: 36px;
}

然后效果就完成了,各位自己替换一下边框颜色即可!

赣ICP备2023003243号