Reputation: 358
I created a centered slightly rotated section border. Also, I gave each side of the section different color. Here what my basic code looks like:
body{
background-color: #594451;
color: #fff;
}
.boxed{
position: absolute;
margin:auto;
/* border: 3pc solid rgba(255, 255, 255 ,1); */
border-left: solid rgba(127, 203, 170, 1) 3pc;
border-right: solid rgba(186, 179, 173, 1) 3pc;
border-bottom: solid rgba(0, 171, 238, 1) 3pc;
border-top: solid rgba(229, 99, 57, 1) 3pc;
height: 20pc;
width: 20pc;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
<h1>Welcome to Rahul's Lab</h1>
<section class="boxed">
<!-- <p>This will contain the box properly</p> -->
</section>
Can I achieve border overlapped on each other? Is it possible by just using CSS or Do I have to create separate section/div for that? HTML & CSS Design and build websites
Reference: Cover picture of HTML & CSS Design and build websites by Jon Duckett.
Upvotes: 8
Views: 1277
Reputation: 10081
Borders overlaping isn't possible…
… but, here is a solution to create your effect with CSS only, using:
linear-gradient
s to create the background
background-blend-mode
to mix the colors in the corners⋅ ⋅ ⋅
Updated snippet:
Using background shorthand syntax, like Temani did here https://stackoverflow.com/a/50526694/5061000
.boxed {
position: absolute;
margin: 5pc auto; /* Modified to better fit in tiny snippet */
--border-pc: 10%; /* You could even use a CSS variable to store the width if you want to be able to modify it easily. Or the colors. Or both. */
background:
/* Shorthand syntax used below: image position/sizeX sizeY */
linear-gradient(rgba(229, 099, 057, 1), rgba(229, 099, 057, 1)) top /100% var(--border-pc), /* Orange with CSS var */
linear-gradient(rgba(000, 171, 238, 1), rgba(000, 171, 238, 1)) bottom/100% var(--border-pc), /* Blue */
linear-gradient(rgba(127, 203, 170, 1), rgba(127, 203, 170, 1)) left /var(--border-pc) 100%, /* Green */
linear-gradient(rgba(186, 179, 173, 1), rgba(186, 179, 173, 1)) right /var(--border-pc) 100%; /* Gray */
background-blend-mode: multiply;
background-repeat: no-repeat;
height: 20pc;
width: 20pc;
top: 0;
right: 0;
bottom: 0;
left: 0;
transform: rotate(45deg);
}
<section class="boxed">
<!-- <p>This will contain the box properly</p> -->
</section>
⋅ ⋅ ⋅
Old style snippet:
Yep, it's working, but I prefer the first one!
.boxed {
position: absolute;
margin: 5pc auto; /* Modified to better fit in tiny snippet */
--border-pc: 10%; /* You could even use a CSS variable to store the width if you want to be able to modify it easily. Or the colors. Or both. */
/* I tried to indent it to better see the code: */
background-image:
linear-gradient(to top, /* Blue */
rgba(0, 171, 238, 1) 0%,
rgba(0, 171, 238, 1) var(--border-pc), /* example use of the CSS var */
transparent var(--border-pc) ),
linear-gradient(to right, /* Green */
rgba(127, 203, 170, 1) 0%,
rgba(127, 203, 170, 1) 10%,
transparent 10% ),
linear-gradient(to bottom, /* Orange */
rgba(229, 99, 57, 1) 0%,
rgba(229, 99, 57, 1) 10%,
transparent 10% ),
linear-gradient(to left, /* Gray */
rgba(186, 179, 173, 1) 0%,
rgba(186, 179, 173, 1) 10%,
transparent 10% );
background-blend-mode: multiply; /* Added to mix the colors */
height: 20pc;
width: 20pc;
top: 0;
right: 0;
bottom: 0;
left: 0;
transform: rotate(45deg);
}
<section class="boxed">
<!-- <p>This will contain the box properly</p> -->
</section>
(Note that if you don't use the background-blend-mode
you can pick which gradients are overlapping the others by playing with their order!)
Hope it helps.
Upvotes: 5
Reputation: 2898
It is not really possible to overlap the borders, as they always meet at a certain angle in a div. It's still possible to create your effect by making separate blocks, though. The property mix-blend-mode
allows for the overlay effect as provided by your image.
Keep in mind that mix-blend-mode
doesn't have any support for IE/Edge.
Here's how it can be done:
body {
margin: 30px
}
.block1 {
background: rgba(127, 203, 170, 1);
}
.block2 {
background: rgba(0, 171, 238, 1);
transform: rotate(90deg);
transform-origin: 20px 0;
mix-blend-mode: color-burn;
}
.block3 {
background: rgba(186, 179, 173, 1);
transform: translateY(140px);
mix-blend-mode: color-burn;
}
.block4 {
background: rgba(229, 99, 57, 1);
transform: translateY(30px) translateX(90px) rotate(90deg);
mix-blend-mode: darken;
}
.block {
height: 20px;
width: 200px;
}
<div class="block1 block"></div>
<div class="block2 block"></div>
<div class="block3 block"></div>
<div class="block4 block"></div>
Upvotes: 3
Reputation: 272608
Here is another solution with gradient and without the need of mix-blend-mode
. The idea is to make each corner using a gradient so you can easily control the color and simulate the overlap:
.box {
margin:50px;
height:200px;
width:200px;
box-sizing:border-box;
background:
/*The 4 corners*/
linear-gradient(#905c3f,#905c3f) top left/20px 20px,
linear-gradient(#b04d32,#b04d32) top right/20px 20px,
linear-gradient(#02a9ae,#02a9ae) bottom left/20px 20px,
linear-gradient(#0085aa,#0085aa) bottom right/20px 20px,
/*The 4 borders*/
linear-gradient(#e6663a,#e6663a) top/100% 20px,
linear-gradient(#01adf0,#01adf0) bottom/100% 20px,
linear-gradient(#7fcaac,#7fcaac) left/20px 100%,
linear-gradient(#bab1ae,#bab1ae) right/20px 100%;
background-repeat:no-repeat;
transform:rotate(45deg);
}
<div class="box">
</div>
Upvotes: 2
Reputation: 1382
The only way I found how to do that is the following, there might be better options:
body{
background-color: #594451;
color: #fff;
}
.boxed1, .boxed2, .boxed3, .boxed4 {
position: absolute;
margin:auto;
/* border: 3pc solid rgba(255, 255, 255 ,1); */
box-sizing: border-box;
height: 20pc;
width: 20pc;
top: 0;
right: 0;
bottom: 0;
left: 0;
-webkit-transform: rotate(45deg);
-moz-transform: rotate(45deg);
-o-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
}
.boxed1 {
border-top: solid rgba(229, 99, 57, 1) 3pc;
}
.boxed2 {
border-right: solid rgba(186, 179, 173, 1) 3pc;
}
.boxed3 {
border-bottom: solid rgba(0, 171, 238, 1) 3pc;
}
.boxed4 {
border-left: solid rgba(127, 203, 170, 1) 3pc;
}
<h1>Welcome to Rahul's Lab</h1>
<section class="boxed1">
<!-- <p>This will contain the box properly</p> -->
</section>
<section class="boxed2">
<!-- <p>This will contain the box properly</p> -->
</section>
<section class="boxed3">
<!-- <p>This will contain the box properly</p> -->
</section>
<section class="boxed4">
<!-- <p>This will contain the box properly</p> -->
</section>
Hope this helps.
Upvotes: 0