border-image
с linear-gradient
может сделать это:
.box {
margin: 10px;
display: inline-block;
border-style:solid;
border-width:2px 2px 15px 15px;
border-image-slice:2 2 15 15; /* same as border-width*/
border-image-source:linear-gradient(-45deg,transparent 9px,red 0 calc(100% - 9px),transparent 0);
}
.content {
padding: 5px;
}
<div class="box">
<div class="content">
CONTENT<br> Some more Content
</div>
</div>
<div class="box">
<div class="content">
CONTENT<br> more Content
</div>
</div>
<div class="box">
<div class="content">
AA BB
</div>
</div>
С CSS переменными для лучшего контроля:
.box {
--b:2; /* border length (without unit!!)*/
--c:15; /* the cube perspective (without unit!!)*/
--g:calc((var(--c) - var(--b))*0.707px); /* 0.707 = cos(45deg) = sin(45deg) */
margin: 10px;
display: inline-block;
border-style:solid;
border-width:calc(var(--b)*1px) calc(var(--b)*1px) calc(var(--c)*1px) calc(var(--c)*1px);
border-image-slice:var(--b) var(--b) var(--c) var(--c);
border-image-source:linear-gradient(-45deg,transparent var(--g),red 0 calc(100% - var(--g)),transparent 0);
}
.content {
padding: 5px;
}
<div class="box">
<div class="content">
CONTENT<br> Some more Content
</div>
</div>
<div class="box" style="--b:3;--c:10">
<div class="content">
CONTENT<br> more Content
</div>
</div>
<div class="box" style="--b:1;--c:20">
<div class="content">
AA BB
</div>
</div>
<div class="box" style="--b:1;--c:5">
<div class="content">
AA BB
</div>
</div>
Вы также можете иметь его в любом направлении:
.box {
--b:2; /* border length (without unit!!)*/
--c:15; /* the cube perspective (without unit!!)*/
--g:calc((var(--c) - var(--b))*0.707px); /* 0.707 = cos(45deg) = sin(45deg) */
margin: 10px;
display: inline-block;
border-style:solid;
}
.bottom-left {
border-width:calc(var(--b)*1px) calc(var(--b)*1px) calc(var(--c)*1px) calc(var(--c)*1px);
border-image-slice:var(--b) var(--b) var(--c) var(--c);
border-image-source:linear-gradient(-45deg,transparent var(--g),red 0 calc(100% - var(--g)),transparent 0);
}
.top-right {
border-width:calc(var(--c)*1px) calc(var(--c)*1px) calc(var(--b)*1px) calc(var(--b)*1px) ;
border-image-slice: var(--c) var(--c) var(--b) var(--b);
border-image-source:linear-gradient(-45deg,transparent var(--g),red 0 calc(100% - var(--g)),transparent 0);
}
.top-left {
border-width:calc(var(--c)*1px) calc(var(--b)*1px) calc(var(--b)*1px) calc(var(--c)*1px) ;
border-image-slice:var(--c) var(--b) var(--b) var(--c);
border-image-source:linear-gradient(45deg,transparent var(--g),red 0 calc(100% - var(--g)),transparent 0);
}
.bottom-right {
border-width:calc(var(--b)*1px) calc(var(--c)*1px) calc(var(--c)*1px) calc(var(--b)*1px) ;
border-image-slice:var(--b) var(--c) var(--c) var(--b);
border-image-source:linear-gradient(45deg,transparent var(--g),red 0 calc(100% - var(--g)),transparent 0);
}
.content {
padding: 5px;
}
<div class="box bottom-left">
<div class="content">
CONTENT<br> Some more Content
</div>
</div>
<div class="box top-right" style="--b:3;--c:10">
<div class="content">
CONTENT<br> more Content
</div>
</div>
<div class="box bottom-right" style="--b:1;--c:20">
<div class="content">
AA BB
</div>
</div>
<div class="box top-left" style="--b:1;--c:5">
<div class="content">
AA BB
</div>
</div>
Мы также можем добавить больше 3D-эффекта, регулируя окраску и используя другую технику с clip-path
.box {
--b:2px; /* border length*/
--c:15px; /* the cube perspective */
--g:calc(var(--c)*0.707); /* 0.707 = cos(45deg) = sin(45deg) */
margin: 10px;
display: inline-block;
padding:var(--b) var(--b) var(--c) var(--c);
background:
linear-gradient(-45deg,transparent var(--g),#cc0404 0) left /var(--c) 100%,
linear-gradient(135deg,transparent var(--g),red 0) bottom /100% var(--c),
linear-gradient(red,red) top /100% var(--b),
linear-gradient(red,red) right /var(--b) 100%;
background-repeat:no-repeat;
clip-path:
polygon(0% calc(var(--c) - var(--b)), calc(var(--c) - var(--b)) 0%,
100% 0%,
100% calc(100% - var(--c) + var(--b)), calc(100% - var(--c) + var(--b)) 100%,
0% 100%);
}
.content {
padding: 5px;
}
<div class="box">
<div class="content">
CONTENT<br> Some more Content
</div>
</div>
<div class="box" style="--b:3px;--c:10px">
<div class="content">
CONTENT<br> more Content
</div>
</div>
<div class="box" style="--b:1px;--c:20px">
<div class="content">
AA BB
</div>
</div>
<div class="box" style="--b:1px;--c:5px">
<div class="content">
AA BB
</div>
</div>