Double box/border? Is this possible in CSS?

前端 未结 4 1298
时光取名叫无心
时光取名叫无心 2021-01-17 17:20

I\'m trying to recreate this image in CSS.

This is what I got from experimenting, so far. I used box-shadow to act as the second box. I\'m not sure if there\'s a bet

相关标签:
4条回答
  • 2021-01-17 17:52

    Use an absolute positioned ::after or ::before pseudo element and have its z-index lower than the element itself.

    0 讨论(0)
  • 2021-01-17 17:55

    Try this example

    Hope it will help you.

    .border {
    text-align: center;
    border: solid 3px black;
    border-radius: 5px;
    text-decoration: none;
    font-weight: 600;
    color: black;
    letter-spacing: 2px;
    padding: 20px 15px;
    margin: 15px 15px;
    background: white;
    -webkit-box-shadow: 3px 3px 0px 0px #ffffff, 3px 3px 0px 3px #000000;
    -moz-box-shadow: 3px 3px 0px 0px #ffffff, 3px 3px 0px 3px #000000;
    box-shadow: 3px 3px 0px 0px #ffffff, 3px 3px 0px 3px #000000;
    }
    <div class="border">Title</div>

    EDIT

    Here now you can see that i made box-shadow to 3px and no longer right side corner.

    0 讨论(0)
  • 2021-01-17 18:00

    The concept behind using box-shadow is that two shadows, one white and one black, overlap to simulate a second black border. But the black shadow is only visible in the direction from which it is offset from the white shadow, so a gap is apparent between the original border and the black shadow (as shown in the OP's original post).

    The "spread radius" of the black shadow could utilized to eliminate this gap (cleverly demonstrated by Nirav Joshi), but then the curvature of the corners is amplified and the two borders look different.

    To duplicate the original border, I'd use ::after to generate an absolutely-positioned pseudo-element and use z-index to place it behind the original element. To further ensure that the border is duplicated exactly, I like Vadim Ovchinnikov's idea of inheriting the border color and radius from the original element.

    .border {
      position: relative;
      text-align: center;
      border: solid 3px black;
      border-radius: 5px;
      text-decoration: none;
      font-weight: 600;
      color: black;
      letter-spacing: 2px;
      padding: 20px 15px;
      margin: 15px 15px;
      background: white;
    }
    
    .border::after {
      content: "";
      position: absolute;
      width: 100%;
      height: 100%;
      top: 3px;
      left: 3px;
      border: solid 3px black;
      border-radius: 5px;
      z-index: -1;
    }
    <h4 class="border">3. SCOUTING FOR A LOCATION</h4>

    0 讨论(0)
  • 2021-01-17 18:15

    You can achieve this via absolutely position pseudo element. Also avoid property duplication via CSS inheritance.

    .border {
      text-align: center;
      border: solid 3px black;
      border-radius: 5px;
      text-decoration: none;
      font-weight: 600;
      color: black;
      letter-spacing: 2px;
      padding: 20px 15px;
      margin: 15px 15px;
      background: white;
      
      position: relative; /* new */
    }
    
    /* new */
    .border:after {
      content: "";
      position: absolute;
      display: block;
      background: inherit;
      border-radius: inherit;
      border: inherit;
      left: 2px;
      top: 2px;
      width: 100%;
      height: 100%;
      z-index: -1;
    }
    <div class="border">3. Scouting for a location</div>

    0 讨论(0)
提交回复
热议问题