Search code examples
cssbordershapescss-shapes

CSS apply border to a cloud shape?


I drew a cloud via CSS3 using different div tags I am trying to add a border to the whole shape but I am having trouble since every shape get its own border how can I apply a border to the whole cloud?

HTML:

<div id="cloud">
  <div id="bottom_c"></div>
  <div id="right_c"></div>
  <div id="left_c"></div>
</div>

CSS:

* {
  margin: 0;
  padding: 0;
  border: 0;
}

body{
  background-color: #4ca3ff;
}
#cloud {
  position: absolute;

}
#bottom_c {
  position: relative; top: 200px; left: 500px;
  width: 350px;
  height: 150px;
  background-color: #fff;
  border-radius: 100px;
  border: solid 5px black;
  z-index: 100;
}
#right_c{
  position: absolute; top: 140px; left: 640px;
  width: 150px;
  height: 150px;
  border-radius: 100%;
  background-color: #fff;
  border: solid 5px black;
}
#left_c{
  position: absolute; top: 170px; left: 550px;
  width: 100px;
  height: 100px;
  border-radius: 100%;
  background-color: #fff;
  border: solid 5px black;
}

Image:

CSS cloud shape


Solution

  • You can do it without any additional elements. Just use the ::before and ::after pseudo-elements with the same size and round shape as the top cloud bubbles. z-index keeps everything in the right layer.

    Demo: jsFiddle

    Output:

    output

    CSS:

    body{
        background-color: #4ca3ff;
    }
    
    #cloud {
        height: 230px;
        margin: 40px;
        position: relative;
        width: 400px;
    }
    
    #cloud div {
        border: solid 5px black;
    }
    
    #bottom_c {
        background-color: #fff;
        border-radius: 100px;
        height: 150px;
        position: absolute; 
        top: 100px;
        width: 350px;
        z-index: 0;
    }
    
    #right_c{
        background-color: #fff;
        border-radius: 100%;
        height: 150px;
        left: 140px;
        position: absolute; 
        top: 40px; 
        width: 150px;
        z-index: -1;
    }
    
    #left_c{
        background-color: #fff;  
        border-radius: 100%;
        height: 100px;
        left: 50px;
        position: absolute; 
        top: 70px; 
        width: 100px;
        z-index: -1;
    }
    
    #cloud::before {
        background-color: white;
        border-radius: 50%;
        content: '';
        height: 100px;
        left: 55px;
        position: absolute; 
        top: 75px; 
        width: 100px;
        z-index: 1;
    }
    
    #cloud::after {
        position: absolute; top: 45px; left: 145px;
        background-color: white;
        border-radius: 50%;
        content: '';
        width: 150px;
        height: 150px;
        z-index: 1;
    }
    

    HTML:

    <div id="cloud">
      <div id="bottom_c"></div>
      <div id="right_c"></div>
      <div id="left_c"></div>
    </div>