Search code examples
cssrounded-corners

Unusual rounded corners markup


I'm trying to build a simple layout with a box inside another, however, while the external box has all four corners rounded, the inner one has only those of the right side.

I'll add the basic markup I started with just to fullfill the SO requirements but it's much easier to see everything in action:

<div id="wrapper">
  <div id="left">
    <div class="placeholder">Placeholder</div>
  </div>
  <div id="main"></div>
</div>

The inner corners are not exactly rounded and although I know that the reason is because I didn't define any other borders for that element, if I do, in the end, I can't have all border 6px thick in a smooth way (outer gets thickier on the left).

The closest approach I achieved was this one, making both left borders, external and internal, 3px to have the desired 6px but the area near the corners are clearly thinner, which is not what I had in mind.

As an extra, more as curiosity, when I tried to round the left inner borders as well, I ended up messing everything, with a space closer to ther cornerrs. Why is this?


Solution

  • Although I'm not the biggest fan of relative/absolute positioning, using them in this case seemed to be what I needed to solve the problem:

    body {
        background-color: #000;
        margin: 35px 35px 35px 50px;
    }
    
    #wrapper {
        -webkit-border-top-right-radius: 20px;
     -webkit-border-bottom-right-radius: 20px;
            -moz-border-radius-topright: 20px;
         -moz-border-radius-bottomright: 20px;
                border-top-right-radius: 20px;
             border-bottom-right-radius: 20px;
    
        border: 6px solid #0A1818;
        margin-left: 20px;
        min-height: 500px; /* demo only */
        position: relative;
        z-index: 1;
    }
    
    #left {
        -webkit-border-radius: 35px;
           -moz-border-radius: 35px;
                border-radius: 35px;
    
        background-color: #051113;
        border: 6px solid #0A1818;
        left: 35px;
        min-height: 500px; /* demo only */
        position: absolute;
        text-align: center;
        width: 30%;
        z-index: 2;
    }
    <div id="left">
    
        <div class="placeholder">Placeholder</div>
    
    </div>
        
    <div id="wrapper">
    
        <div id="main"></div>
    
    </div>

    I hope it helps someone in the future :)