首页 前端知识 不要图片?CSS实现大屏常见不规则边框(系列二)

不要图片?CSS实现大屏常见不规则边框(系列二)

2024-05-22 09:05:28 前端知识 前端哥 388 460 我要收藏

前言

👏不要图片?CSS实现大屏常见不规则边框(系列二),速速来Get吧~
🥇文末分享源代码。记得点赞+关注+收藏!

1.实现效果

在这里插入图片描述

2.实现原理

系列一已经陈述了相关原理,感兴趣的小伙伴直接参考不要图片?CSS实现大屏常见不规则边框(系列一)

3.实现步骤

  • 定义css变量,–w宽度,–h高度,–line-bg渐变边框色,–content-bg内容背景色 , --pathclip-path裁剪形状
:root {
/* 渐变边框色 */
 --line-bg: linear-gradient(
   180deg,
   rgba(138, 203, 255, 1),
   rgba(41, 106, 143, 1),
   rgba(190, 40, 40, 1)
 );
 /* 定义宽高 */
 --w: 300px;
 --h: 350px;
 /* 内容背景色 */
 --content-bg: linear-gradient(181deg, #021734 0%, #3d1328 100%);
 /* clip-path裁剪 */
 --path: polygon(
   0 0,
   calc(100% - 10px) 0,
   100% 10px,
   100% 100%,
   10px 100%,
   0 calc(100% - 10px)
 );
}
  • 绘制父元素,设置相对定位
 <div class="dialog"></div>
.dialog {
	position: relative;
	font-size: 20px;
	text-shadow: 0 10px 12px #001025;
}
  • 添加子元素,设置宽高为w和h,父元素随着子元素大小拉伸,设置resize进行拉伸,并设置最小宽度最大宽度

在这里插入图片描述

<div class="dialog">
	+<div class="box flex-row j_c">CSS 实现不规则边框(2</div>
</div>

.box {
	width: var(--w);
	height: var(--h);
	background: var(--line-bg);
	border-radius: 6px;
	position: relative;
	z-index: 1;
	/* 添加resize */
	overflow: hidden;
	resize: both;
	min-width: 250px;
	min-height: 100px;
}
  • 给box设置伪元素,设置内容背景色,设置z-index为-1,不遮挡内容文字

在这里插入图片描述

.box::after {
 content: "";
 width: calc(100% - 4px);
 height: calc(100% - 4px);
 position: absolute;
 /* 定义背景色 */
 background: var(--content-bg);
 /* 水平垂直 居中 */
 left: 50%;
 top: 50%;
 transform: translate(-50%, -50%);
 z-index: -1;
 /* 添加圆角 */
 border-radius: 4px;
}
  • 给父元素设置伪元素,设置相应的border,绝对定位在子元素的左上角

在这里插入图片描述

.dialog::after {
	content: "";
	border: 3px solid #32c5ff;
	width: 40%;
	height: 70%;
	position: absolute;
	left: -1px;
	top: -1px;
	z-index: 1;
	border-right: none;
	border-bottom: none;
	border-radius: 6px 0 0 0;
}
  • 在父元素内添加新标签,宽为父元素的80%,高度为90%,clip-path裁剪实现右下角的不规则形状,设置绝对定位,right为-8px,bottom为-8px

在这里插入图片描述

<div class="dialog">
	+<span class="dialog-rect"></span>
	<div class="box flex-row j_c">CSS 实现不规则边框(2</div>
</div>
.dialog-rect {
	width: 80%;
	height: 90%;
	position: absolute;
	right: -8px;
	bottom: -8px;
	border-radius: 6px;
	background: #66b5f3;
	clip-path: var(--path);
}
  • 为dialog-rect添加伪元素,设置内容背景色,并clip-path进行与其父元素一致的裁剪

在这里插入图片描述

.dialog-rect::after {
	content: "";
	position: absolute;
	width: calc(100% - 3px);
	height: calc(100% - 3px);
	/* 水平垂直 居中 */
	left: 50%;
	top: 50%;
	transform: translate(-50%, -50%);
	z-index: -1;
	background: #093258;
	border-radius: 4px;
	clip-path: var(--path);
}
  • 将box进行resize缩放,就实现好啦

在这里插入图片描述

4.实现代码

<style>
  :root {
    /* 渐变边框色 */
    --line-bg: linear-gradient(
      180deg,
      rgba(138, 203, 255, 1),
      rgba(41, 106, 143, 1),
      rgba(190, 40, 40, 1)
    );
    /* 定义宽高 */
    --w: 300px;
    --h: 350px;
    /* 内容背景色 */
    --content-bg: linear-gradient(181deg, #021734 0%, #3d1328 100%);
    /* clip-path裁剪 */
    --path: polygon(
      0 0,
      calc(100% - 10px) 0,
      100% 10px,
      100% 100%,
      10px 100%,
      0 calc(100% - 10px)
    );
  }
  body {
    background: linear-gradient(
      270deg,
      rgba(1, 33, 62, 0.95) 0%,
      rgba(1, 33, 62, 0.9) 87%
    );
  }
  .dialog {
    position: relative;
    font-size: 20px;
    text-shadow: 0 10px 12px #001025;
  }
  .box {
    width: var(--w);
    height: var(--h);
    background: var(--line-bg);
    border-radius: 6px;
    position: relative;
    z-index: 1;
    /* 添加resize */
    overflow: hidden;
    resize: both;
    min-width: 250px;
    min-height: 100px;
  }
  .box::after {
    content: "";
    width: calc(100% - 4px);
    height: calc(100% - 4px);
    position: absolute;
    /* 定义背景色 */
    background: var(--content-bg);
    /* 水平垂直 居中 */
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    z-index: -1;
    /* 添加圆角 */
    border-radius: 4px;
  }
  .dialog-rect {
    width: 80%;
    height: 90%;
    position: absolute;
    right: -8px;
    bottom: -8px;
    border-radius: 6px;
    background: #66b5f3;
    clip-path: var(--path);
  }
  .dialog-rect::after {
    content: "";
    position: absolute;
    width: calc(100% - 3px);
    height: calc(100% - 3px);
    /* 水平垂直 居中 */
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    z-index: -1;
    background: #093258;
    border-radius: 4px;
    clip-path: var(--path);
  }
  .dialog::after {
    content: "";
    border: 3px solid #32c5ff;
    width: 40%;
    height: 70%;
    position: absolute;
    left: -1px;
    top: -1px;
    z-index: 1;
    border-right: none;
    border-bottom: none;
    border-radius: 6px 0 0 0;
  }
</style>
<body>
  <div class="dialog">
    <span class="dialog-rect"></span>
    <div class="box flex-row j_c">CSS 实现不规则边框(2</div>
  </div>
</body>

5.写在最后🍒

看完本文如果觉得对你有一丢丢帮助,记得点赞+关注+收藏鸭 🍕
更多相关内容,关注🍥苏苏的bug,🍡苏苏的github,🍪苏苏的码云~
转载请注明出处或者链接地址:https://www.qianduange.cn//article/9025.html
标签
评论
发布的文章

JQuery中的load()、$

2024-05-10 08:05:15

大家推荐的文章
会员中心 联系我 留言建议 回顶部
复制成功!