cssbox-shadowcss-filters

box shadows on multiple elements at same level but without overlap?


I want to create something like the following screenshot, but I can't figure out any z-index value for which the shadow doesn't appear either over the first or second box (they are always stacked either with the first one on top, or the second). Overlapping boxes

Is there a way to achieve the following?

Desired - no overlap

body { background: darkgrey; padding-top: 50px}
div { background: white; width: 200px; height: 200px; box-shadow: 0 0 20px 
black; margin: auto; position: relative; }
#box-one { left: -50px; z-index: 1; }
#box-two { right: -50px; z-index: 1; }

https://codepen.io/eoghanmurray/pen/oVEEVK


Solution

  • If you can use filter and drop-shadow then you can apply a drop-shadow to the container. This shadow differs as it conforms to the alpha channel of the image (in this case, the outline of the content) instead of a simple rectangle:

    body {
      background: darkgrey;
      padding-top: 50px
    }
    
    #box-one,
    #box-two {
      background: white;
      width: 200px;
      height: 200px;
      margin: auto;
      position: relative;
    }
    
    #box-one {
      left: -50px;
      z-index: 1;
    }
    
    #box-two {
      right: -50px;
      z-index: 1;
    }
    
    #top {
      filter: drop-shadow(0 0 20px black);
    }
    <div id="top">
      <div id="box-one"></div>
      <div id="box-two"></div>
    </div>