首页 文章

CSS3信封形状

提问于
浏览
11

您可能已经猜到这个图像是邮件信封形状的一部分,如果可能的话我想用CSS3创建 . 我've made the other parts but this one'很棘手 . 形状需要两侧的三角形切口和圆角(可能是边界半径 - 左下角/边缘半径 - 右下角) . 它 also 必须具有施放小阴影的能力 .

这就是我到目前为止所做的 -

#envelope {
background: #fff;
}

.closed {
width: 860px;
height: 0; 
border-top: 80px solid fff;
border-left: 50px solid transparent;
border-right: 50px solid transparent;
-moz-box-shadow: 0 1px 5px #ccc;
-webkit-box-shadow: 0 1px 5px #ccc;
box-shadow: 0 1px 5px #ccc;
}

jsFiddle - http://jsfiddle.net/hsYUy/

4 回答

  • 4

    我的尝试,我只使用了chrome的阴影和旋转属性,但你可以将它添加到其他浏览器,

    http://jsfiddle.net/hsYUy/7/

    body {
      background: #f2f2f2;
    }
    #content {
      width: 460px;
      margin: 0 auto;
      background: #fff;
      height: 400px;
      /* for demo */
      -moz-box-shadow: 0 1px 5px #ccc;
      -webkit-box-shadow: 0 1px 5px #ccc;
      box-shadow: 0 1px 5px #ccc;
      border-bottom-left-radius: 15px;
      -moz-border-radius-bottomleft: 15px;
      -webkit-border-bottom-left-radius: 15px;
      border-bottom-right-radius: 15px;
      -moz-border-radius-bottomright: 15px;
      -webkit-border-bottom-right-radius: 15px;
      z-index: 0;
    }
    .closed {
      z-index: 1;
      width: 460px;
      overflow: hidden;
      margin: 0 auto;
      height: 80px;
      margin-bottom: -5px;
    }
    .closed .mid {
      /*background: #fff;*/
      width: 360px;
      margin: 0 auto;
      margin-top: -70px;
      height: 80px;
      background-color: #fff;
      -moz-box-shadow: 0 1px 5px #ccc;
      -webkit-box-shadow: 0 1px 5px #ccc;
      box-shadow: 0 1px 5px #ccc;
      -webkit-border-radius: 12px;
    }
    .left,
    .right {
      display: none;
    }
    .closed .right {
      display: block;
      width: 0;
      height: 100px;
      border-left: 60px solid #fff;
      border-right: 1px solid #ccc;
      margin-left: 384px;
      -webkit-transform: rotate(39deg);
      margin-top: -34px;
      box-shadow: 1px -1px 1px #ccc;
    }
    .closed .left {
      display: block;
      width: 0;
      height: 100px;
      border-right: 60px solid #fff;
      border-left: 1px solid #ccc;
      margin-left: 16px;
      -webkit-transform: rotate(-39deg);
      margin-top: -100px;
      box-shadow: -1px -1px 1px #ccc;
    }
    
    <div id="content">
      <div class="closed">
        <div class="right"></div>
        <div class="left"></div>
        <div class="mid"></div>
      </div>
    </div>
    
  • 3

    这是我的尝试,只有一个div

    div {
        margin:20px;
        width:500px;
        height:60px;
        border-bottom-left-radius: 90px 200px;
        border-bottom-right-radius: 90px 200px;
        box-shadow: 0 5px 3px -5px #888,
        5px 0 3px -5px #888,
        -5px 0 3px -5px #888;    
    }
    
    <div></div>
    

    http://jsfiddle.net/Simo990/Z8cPc/4

  • 3

    使用2D偏斜的1元素解决方案对伪元素进行变换 .

    DEMO

    Result

    envelope

    HTML

    .envelope {
      overflow: hidden;
      position: relative;
      margin: 0 auto;
      width: 20em;
      height: 10em;
      border-radius: .25em;
      background: lemonchiffon;
    }
    .envelope:before,
    .envelope:after {
      position: absolute;
      top: -.25em;
      width: 40%;
      height: 30%;
      content: '';
    }
    .envelope:before {
      left: 1em;
      border-radius: 0 0 0 .25em;
      box-shadow: -.2em .2em .2em dimgrey;
      transform: skewX(37.5deg);
    }
    .envelope:after {
      right: 1em;
      border-radius: 0 0 .25em 0;
      transform: skewX(-37.5deg);
      box-shadow: .2em .2em .2em dimgrey;
    }
    
    <div class='envelope'></div>
    
  • 1

    这里有3个近似值http://jsfiddle.net/JKirchartz/RNChA/仅使用border-radius,应该适用于所有具有正确前缀的浏览器 .

    HTML:

    .env {
      width: 100%;
      height: 300px;
      border: 3px solid #bbb;
      margin: 1em
    }
    .env_top {
      border: 0.2em solid #bbb;
      border-top: 0;
      height: 60px;
      max-width: 100%;
    }
    .one {
      -webkit-border-radius: 0px 0px 24px 24px / 0px 0px 200px 200px;
      -moz-border-radius: 0px 0px 24px 24px / 0px 0px 200px 200px;
      border-radius: 0px 0px 24px 24px / 0px 0px 200px 200px;
    }
    .two {
      -webkit-border-radius: 0px 0px 24px 24px / 0px 0px 300px 300px;
      -moz-border-radius: 0px 0px 24px 24px / 0px 0px 300px 300px;
      border-radius: 0px 0px 24px 24px / 0px 0px 300px 300px;
    }
    .thr {
      -webkit-border-radius: 0px 0px 100px 100px / 0px 0px 300px 300px;
      -moz-border-radius: 0px 0px 100px 100px / 0px 0px 300px 300px;
      border-radius: 0px 0px 100px 100px / 0px 0px 300px 300px;
    }
    
    <div class="env">
      <div class="env_top one"></div>
    </div>
    <div class="env">
      <div class="env_top two"></div>
    </div>
    <div class="env">
      <div class="env_top thr"></div>
    </div>
    

相关问题