【问题标题】:Create Box With Diagonal Edge创建具有对角边的框
【发布时间】:2016-06-20 02:55:53
【问题描述】:

我需要创建一个带有对角线边缘的盒子。下面是图片和here is a link to it

我将如何仅使用 CSS 和 HTML 来做到这一点?

我知道它可以在 CSS 中创建三角形,所以我可能会为盒子的“黄色”部分创建一个带有圆角的 div。不知道怎么做里面的灰色部分。

我想避免使用多张图片解决方案,因为这将在移动设备上进行,以便尽快加载。

我正在寻找一个内部有 3 个 div 和一个三角形的解决方案,我找到了一个三角形制造商 here,然后可能是黄色 div 上的相对位置,然后是绝对位置的内容?

【问题讨论】:

    标签: html css css-shapes


    【解决方案1】:

    有一种方法可以实现这种形状,而无需使用额外的元素。我可以理解使用多张图片的不情愿,但这种方法只使用了多张背景,不会对页面加载时间产生任何影响。

    在这种方法中,我们创建一个较小尺寸的linear-gradient背景并将其定位在容器的right top处,以实现三角形效果。

    这种方法也可以用于媒体查询,没有太多问题。

    .shape {
      height: 400px;
      width: 50vw;
      background: linear-gradient(225deg, #F3D56A 50%, transparent 50%), #EFEFEF;
      background-size: 75px 75px;
      background-repeat: no-repeat;
      background-position: right top;
      border-radius: 4px;
      box-shadow: 4px 4px 4px rgba(0, 0, 0, .5);
      border-top: 5px #F3D56A solid;
    }
    @media (max-width: 300px) {
      .shape {
        width: 150px;
        background-size: 50px 50px;
      }
    }
    @media (min-width: 301px) and (max-width: 600px) {
      .shape {
        width: 300px;
        background-size: 50px 50px;
      }
    }
    <div class="shape"></div>

    【讨论】:

    • 这也很有趣,我也将不得不尝试这种方式,感谢您发布此内容。
    • @JosephAstrahan:总是乐于帮助队友 :)
    • 您的答案我开始工作并且不使用浮点数并且更干净,因此我接受了它作为新答案。也适用于移动 iOS 和 Android 浏览器! :)。
    【解决方案2】:

    HTML:

    <div id="content">
        <span></span>
        <p class="title">Gold</p>
        <p class="subtitle">Starting at</p>
        <p class="price">$69.99/mo</p>
        <a href="#" class="button">More Info</a>
    </div>
    

    CSS

    #content {
        font-family: Helvetica, Serif;
        width: 440px;
        height: 460px;
        background: #EFEFEF;
        text-align: center;
        border-radius: 5px;
        -webkit-box-shadow: 4px 6px 5px 1px rgba(0,0,0,0.41);
        -moz-box-shadow: 4px 6px 5px 1px rgba(0,0,0,0.41);
        box-shadow: 4px 6px 5px 1px rgba(0,0,0,0.41);
        border-top:7px #F3D56A solid;
    }
    #content span {
        border-style: solid;
        border-width: 0 110px 110px 0;
        border-color: transparent #f3d56a transparent transparent;
        line-height: 0px;
        _border-color: #000000 #f3d56a #000000 #000000;
        _filter: progid:DXImageTransform.Microsoft.Chroma(color='#000000');
        float: right;
    }
    .title {
        position: relative;
        left: 50px;
    }
    .title, .price{
        color:#2C3E50;
        font-size: 45px;
        font-weight: 700;
        text-align: center;
    }
    .subtitle {
        color: #7A828B;
        font-size: 30px;
        font-weight: 300;
    }
    a.button {
        text-decoration: none;
        color:#FFF;
        background: #F3D56A;
        padding:20px 30px;
        border-radius: 5px;
    }
    

    WORKING DEMO

    更新:

    媒体查询到 320x480:

    @media only screen and (min-width: 320px) and (max-width: 480px) {
        #content {
            width: calc(100% - 5px);
            height: 400px;
        }
        #content span {
            border-width: 0 90px 90px 0;
        }
    }
    

    结果:

    【讨论】:

    • 哇,非常有趣的解决方案,而且 html 也很少,非常聪明。试玩一下,看看它是否在移动设备上运行良好。
    • 我会尝试为此设置一些媒体查询,然后再更新我的答案。
    • 我更新了您的答案以适应所有设备,请查看 (jsfiddle.net/x11joex11/6bpjc96u/1),例如,您可以拉伸屏幕,它会适应。
    • jsfiddle.net/x11joex11/6bpjc96u/3,我修复了标题的错误,只是清楚:both 所以你不必使用 position:relative;那是拉伸屏幕导致向右滚动条,但现在它很好:)
    • 我也忘了把它排成备份我使用位置:相对于它和顶部:-40px
    【解决方案3】:

    您为什么不直接创建一个图像并将其用作背景。您可以使图像看起来与上面的灰色和黄色完全一样,然后将其添加到您的“框”中。

    【讨论】:

    • 我想避免这种情况,因为移动设备上的加载时间,我将在多个地方使用这个盒子的想法,它真的会加起来,例如,银牌服务,铜牌服务,和其他一些领域等。
    • 好吧,我还没有机会尝试这个,但我找到了一个可能有用的链接。 css-tricks.com/snippets/css/css-triangle
    • 我做了一些测试,但我无法弄清楚我得到的最好的是div { width: 100px; height: 0; background-color: gray; border-style: solid; border-width: 0 200px 200px 0; border-color: transparent #fff200 transparent transparent; } 当你把边缘弄圆并让它更高时会出现问题。
    • 这个网站css-tricks.com/examples/ShapesOfCSS有很多css形状,但没有一个圆角三角形。我不知道这是否可以仅使用 css。
    • stackoverflow.com/questions/22930838/… 上的最佳答案有一种方法可以制作一个带有弯曲点的三角形,但我不知道它是否适合你。
    【解决方案4】:

    这里是我模拟的 js fiddle 的链接 - 虽然我没有完成整个风格 https://jsfiddle.net/6pcrneat/

    .container { 
        width:200px; 
        height:250px; 
        background:#ffffff;
        border:1px solid #000;
        position:relative;
    }
    .shape {
        -webkit-transform: rotate(45deg);
        -moz-transform: rotate(45deg);
        -o-transform: rotate(45deg);
        -ms-transform: rotate(45deg);
        position: absolute;
        right: -45px;
        top: -10px;
        border-style: solid;
        width: 0px;
        height: 0px;
        line-height: 0px;
        border-width: 0px 70px 70px 70px;
        border-color: transparent transparent rgb(243, 213, 106) transparent;  
        moz-transition: .3s;
        -ms-transition: .3s;
        -o-transition: .3s;
    }
    .text {
      margin-top: 100px;
      text-align: center;
    }
    

    编辑:我会在三角形的圆角处回复您;我一开始没注意到

    【讨论】:

    • 谢谢,我也在做一个 JSFiddle 来尝试一些东西。
    • jsfiddle.net/6pcrneat/2 给你,我在这里添加了曲线。可以稍微修饰一下,但它在正确的轨道上哈哈
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-21
    • 2020-02-07
    • 1970-01-01
    • 2015-05-14
    • 2023-03-08
    • 2017-11-30
    相关资源
    最近更新 更多