如何在CSS形状中添加偏移轮廓? [英] How to add an offsetted outline to a CSS shape?

查看:43
本文介绍了如何在CSS形状中添加偏移轮廓?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在创建带有斜角边缘的块时,我会遇到一些问题,此外,我还需要对边框进行斜角处理并稍微偏离主块.问题在于,根据屏幕的不同,该块可能是响应式的.

我不知道确切的方法,希望每个人都能帮忙.

这就是我现在要做的

  .box {显示:flex;内边距:20px;高度:200px;宽度:300像素;颜色:#ffffff;背景:红色;职位:相对}.box .edge {宽度:18px;高度:10px;背景:#ffffff;位置:绝对;}.box .edge.top-left {顶部:-4px;左:-8px;变换:rotate(-45deg);}.box .edge.top-right {顶部:-4px;右:-8px;变换:rotate(45deg);}.box .edge.bottom-left {底部:-4px;左:-8px;变换:rotate(45deg);}.box .edge.bottom-right {底部:-4px;右:-8px;变换:rotate(-45deg);}  

 < div class ="box">< div class ="edge top-left"></div>< div class ="edge top-right-right"></div>< div class ="edge bottom-left"></div>< div class ="edge bottom-right-right"></div>< div class ="content">内容</div></div>  

解决方案

这是基于

也可以处理图片:

  .box {--c:10px;/* 角落 */--b:3px;/*边框厚度*/--o:-10px,-15px;/* 抵消*/--border-color:绿色;--bg-color:红色;宽度:200像素;高度:100px;显示:行内块;边距:30px;位置:相对;z-index:0;}.box:之前,.box:之后{内容:"";位置:绝对;z索引:-1;顶:0;左:0;对:0;底部:0;剪切路径:多边形(var(-c)0%,calc(100%-var(-c))0%,100%var(-c),100%calc(100%-var(-c)),calc(100%-var(-c))100%,var(-c)100%,0%calc(100%-var(-c)),0%var(-c));背景:url(https://picsum.photos/id/1069/800/800)中心/封面;}.box:之后{--grad:透明49.5%,var(-border-color)50%;背景:linear-gradient(在右上方,var(-grad))在右上方,linear-gradient(在左上方,var(-grad))在左上方,线性渐变(到右下,var(-grad))右下,线性梯度(左下,var(-grad))左下;背景大小:calc(var(-c)-var(-b))calc(var(-c)-var(-b));背景重复:不重复;边框:var(-b)实心var(-border-color);transform:translate(var(-o));}  

 < div class ='box'></div>< div class ='box'style =-c:40px;-b:2px;-o:10px,-20px;-border-color:blue;"></div>  

I have a bit of a problem with creating a block with beveled edges, in addition I need a border to be beveled and slightly off the main block. The problem is that this block can be Reponsive according to the screen.

I do not know the exact way to do it, hope everyone helps.

This is what I do now

.box {
  display: flex;
  padding: 20px;
  height: 200px;
  width: 300px;
  color: #ffffff;
  background: red;
  position: relative;
}

.box .edge {
  width: 18px;
  height: 10px;
  background: #ffffff;
  position: absolute;
}

.box .edge.top-left {
  top: -4px;
  left: -8px;
  transform: rotate(-45deg);
}

.box .edge.top-right {
  top: -4px;
  right: -8px;
  transform: rotate(45deg);
}

.box .edge.bottom-left {
  bottom: -4px;
  left: -8px;
  transform: rotate(45deg);
}

.box .edge.bottom-right {
  bottom: -4px;
  right: -8px;
  transform: rotate(-45deg);
}

<div class="box">
  <div class="edge top-left"></div>
  <div class="edge top-right"></div>
  <div class="edge bottom-left"></div>
  <div class="edge bottom-right"></div>
  <div class="content">
    content
  </div>
</div>

解决方案

Here is an idea based on this previous answer. Simply adjust the different variables to get the result you want:

.box {
  --c:10px; /* the corner */
  --b:3px;  /* border thickness*/
  --o:-10px,-15px; /* offset*/
  --border-color:green;
  --bg-color:red;

  width: 200px;
  height: 100px;
  display:inline-block;
  margin:30px;
  position:relative;
  z-index:0;
}

.box:before,
.box:after{
  content:"";
  position:absolute;
  z-index:-1;
  top:0;
  left:0;
  right:0;
  bottom:0;
  clip-path: polygon(var(--c) 0%, calc(100% - var(--c)) 0%, 100% var(--c), 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, var(--c) 100%, 0% calc(100% - var(--c)), 0% var(--c));
  background:var(--bg-color);
}

.box:after {
  --grad:transparent 49.5%,var(--border-color) 50%;
  background: 
    linear-gradient(to top right   ,var(--grad)) top    right,
    linear-gradient(to top left    ,var(--grad)) top    left,
    linear-gradient(to bottom right,var(--grad)) bottom right,
    linear-gradient(to bottom left ,var(--grad)) bottom left;
  background-size:calc(var(--c) - var(--b)) calc(var(--c) - var(--b));
  background-repeat:no-repeat;
  border: var(--b) solid var(--border-color);
  transform:translate(var(--o));
}

<div class='box'></div>

<div class='box' style="--c:40px;--b:2px;--o:10px,-20px;--border-color:blue;--bg-color:orange"></div>

Works with image too:

.box {
  --c:10px; /* the corner */
  --b:3px;  /* border thickness*/
  --o:-10px,-15px; /* offset*/
  --border-color:green;
  --bg-color:red;

  width: 200px;
  height: 100px;
  display:inline-block;
  margin:30px;
  position:relative;
  z-index:0;
}

.box:before,
.box:after{
  content:"";
  position:absolute;
  z-index:-1;
  top:0;
  left:0;
  right:0;
  bottom:0;
  clip-path: polygon(var(--c) 0%, calc(100% - var(--c)) 0%, 100% var(--c), 100% calc(100% - var(--c)), calc(100% - var(--c)) 100%, var(--c) 100%, 0% calc(100% - var(--c)), 0% var(--c));
  background:url(https://picsum.photos/id/1069/800/800) center/cover;
}

.box:after {
  --grad:transparent 49.5%,var(--border-color) 50%;
  background: 
    linear-gradient(to top right   ,var(--grad)) top    right,
    linear-gradient(to top left    ,var(--grad)) top    left,
    linear-gradient(to bottom right,var(--grad)) bottom right,
    linear-gradient(to bottom left ,var(--grad)) bottom left;
  background-size:calc(var(--c) - var(--b)) calc(var(--c) - var(--b));
  background-repeat:no-repeat;
  border: var(--b) solid var(--border-color);
  transform:translate(var(--o));
}

<div class='box'></div>

<div class='box' style="--c:40px;--b:2px;--o:10px,-20px;--border-color:blue;"></div>

这篇关于如何在CSS形状中添加偏移轮廓?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆