CSS3 gradient border around div

1.1k Views Asked by At

Is it possible to create such border around div using pure CSS, or do I have to use image for this?

Border

3

There are 3 best solutions below

1
On BEST ANSWER

Since you want to do pure css, here's one way:

.dblgradbox {
 margin: auto;
 padding: 15px;
 width: 275px;
 height: 200px;
 border: 15px solid transparent;
 border-top: 10px solid transparent;
 border-image: linear-gradient(to bottom, transparent, #FBCDEA) 3 100%;
 box-shadow: 0 15px 0 0 #FBCDEA, 0 -5px 0 0 #F7FCFF,  inset 0px 15px 0 0 #FBCDEA;
 background-image:  linear-gradient(#FBCDEA, transparent), linear-gradient(#FBCDEA, transparent);
 background-size: 15px 100%;
 background-position: 0 0, 100% 0;
 background-repeat: no-repeat;
 border-radius: 7px;
}
<div class="dblgradbox">
    x3ns
</div>

See if "Full Page" after running snippet. I didn't include any cross-browser properties as this is an example.

This method works by normally applying a gradient border, and the using a box-shadow inset technique to aid in completing the effect within the element - thus also a padding is required to fit content within. The background-image only display two gradient bars on both sides of inset.

0
On

maybe so?

*{
    box-sizing: border-box;
}

.wrap{
    width: 300px;
    height: 300px;
    padding: 20px;
    margin: 25px auto;
    border-radius: 10px;
    background: rgb(254,249,253); /* Old browsers */
background: -moz-linear-gradient(top, rgb(254,249,253) 0%, rgb(253,230,246) 50%, rgb(253,204,234) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(254,249,253)), color-stop(50%,rgb(253,230,246)), color-stop(100%,rgb(253,204,234))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, rgb(254,249,253) 0%,rgb(253,230,246) 50%,rgb(253,204,234) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, rgb(254,249,253) 0%,rgb(253,230,246) 50%,rgb(253,204,234) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top, rgb(254,249,253) 0%,rgb(253,230,246) 50%,rgb(253,204,234) 100%); /* IE10+ */
background: linear-gradient(to bottom, rgb(254,249,253) 0%,rgb(253,230,246) 50%,rgb(253,204,234) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fef9fd', endColorstr='#fdccea',GradientType=0 ); /* IE6-9 */    
}
.wrap div{
    width: 100%;
    height: 100%;    
    padding: 20px;
}
.wrap .inner{          
    background: rgb(253,204,234); /* Old browsers */
background: -moz-linear-gradient(top,  rgb(253,204,234) 0%, rgb(253,230,246) 50%, rgb(254,249,253) 100%); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgb(253,204,234)), color-stop(50%,rgb(253,230,246)), color-stop(100%,rgb(254,249,253))); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top,  rgb(253,204,234) 0%,rgb(253,230,246) 50%,rgb(254,249,253) 100%); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top,  rgb(253,204,234) 0%,rgb(253,230,246) 50%,rgb(254,249,253) 100%); /* Opera 11.10+ */
background: -ms-linear-gradient(top,  rgb(253,204,234) 0%,rgb(253,230,246) 50%,rgb(254,249,253) 100%); /* IE10+ */
background: linear-gradient(to bottom,  rgb(253,204,234) 0%,rgb(253,230,246) 50%,rgb(254,249,253) 100%); /* W3C */
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#fdccea', endColorstr='#fef9fd',GradientType=0 ); /* IE6-9 */
}
.wrap .item{
    background: #fff;     
}
<div class="wrap">
    <div class="inner">
        <div class="item"></div>
    </div>
</div>

0
On

I recommend using border-image property

.top-to-bottom {
  border-bottom: 10px solid trasparent;
  border-width: 10px;
  border-style: solid;
  -webkit-border-image: -webkit-gradient(linear, 0 0, 0 100%, from(black), to(rgba(0, 0, 0, 0))) 1 100%;
  -webkit-border-image: -webkit-linear-gradient(#FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  -moz-border-image: -moz-linear-gradient(#FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  -o-border-image: -o-linear-gradient(#FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  border-image: linear-gradient(to bottom, #FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  height: 100px;
  width: 97%;
  border-top: 10px solid #FBCDEA;
}
.bottom-to-top {
  border-top: 10px solid trasparent;
  border-width: 10px;
  border-style: solid;
  -webkit-border-image: -webkit-gradient(linear, 0 100%, 0 0, from(#FBCDEA), to(rgba(0, 0, 0, 0))) 1 1;
  -webkit-border-image: -webkit-linear-gradient(bottom, black, rgba(0, 0, 0, 0)) 1 1;
  -moz-border-image: -moz-linear-gradient(bottom, #FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  -o-border-image: -o-linear-gradient(bottom, #FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  border-image: linear-gradient(to top, #FBCDEA, rgba(0, 0, 0, 0)) 1 1;
  border-bottom: 10px solid #FBCDEA;
  height: 100%;
  width: 98%
}
 <div class="bottom-to-top">
  <div class="top-to-bottom">
  </div>
</div>