【问题标题】:How to make one side of a div pointy with CSS?如何使用 CSS 使 div 的一侧变尖?
【发布时间】:2012-12-09 01:04:24
【问题描述】:

我正在尝试创建一个像这样的尖按钮:

到目前为止,我只能做到这一点:

我认为增加水平边界半径会使它变得锐利,但它所做的只是使圆度更长。

HTML

<a class="button">Back</a>

CSS

.button {
    display: inline-block;
    height: 3em;
    padding: 0 0.7em 0 1.4em;
    border: 0.1em solid black;
    border-radius: 3em 0.4em 0.4em 3em / 1.5em 0.4em 0.4em 1.5em;
    background: -moz-linear-gradient(
        top,
        #fff,
        #ccc
    );
}

【问题讨论】:

    标签: ios css


    【解决方案1】:

    您不想使用border-radius,因为它会为每个指定的角分配一个四分之一圆形。相反,您可以使用特定的 border-width 属性来破解它,如本网站所示:http://www.howtocreate.co.uk/tutorials/css/slopes

    但是我觉得你解决问题的方式不对;你所做的最好使用背景图像,这就是 iOS 风格的后退按钮在 iPhone-for-web 样式表中的实现方式。如果您需要与分辨率无关的东西,那么您现在可以使用 SVG 而不会受到惩罚。

    【讨论】:

      【解决方案2】:

      经过深思熟虑,这是一个更优雅的解决方案,它允许更有效的样式和仅使用一个 HTML 元素。使用这种方法,我们可以完全实现您的概念中的结果。

      HTML

      <a href="#" class="button">Back</a>
      

      CSS

      a.button {
          text-decoration:none;
          color:#111;
          text-shadow:0 1px 0 #fff;
          font-weight:bold;
          padding:10px 10px;
          font-size:14px;
          border-radius:0 8px 8px 0;
          -webkit-border-radius:0 8px 8px 0;
          float:left;
          margin-left:30px;
          margin-top:20px;
          position:relative;
          font-family:verdana;
          color:#3b3d3c;
          border:1px solid #666;
          border-left:0;
          background: -moz-linear-gradient( top , #eee 0%,#bbb 100%);
          background: -webkit-linear-gradient( top , #eee 0%,#bbb 100%);  
      }
      a.button:after {
          content:"";
           width:25px;
           height:25px;
           background: -moz-linear-gradient( left top , #eee 0%,#bbb 100%);
           background: -webkit-linear-gradient( left top , #eee 0%,#bbb 100%);
           -moz-transform: rotate(45deg);
           -webkit-transform: rotate(45deg);
           display:block;
           position:absolute;
           top:5px;
           left:-14px;
           z-index:-1;
           border:1px solid  #666;
      }
      @media screen and (-webkit-min-device-pixel-ratio:0) {
      a.button:after{
          border-left:0;
          left:-13px;
      }
      

      最后一条规则适用于 Chrome,否则其呈现的结果会略有不同。

      希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        您可以使用并排包裹在锚标记中的 2 个元素来创建这样的效果。

        <style type="text/css">
        .arrow-left {
                width:0; 
                height:0; 
                border-top:30px solid transparent;
                border-bottom:30px solid transparent;
                border-right:30px solid orange; 
                float:left;
        }
        .button {
                float:left;
                height:60px;
                background:orange;
                width:50px;
                line-height:60px;
                font-weight:bold; 
                border-top-right-radius:8px;
                border-bottom-right-radius:8px;
        }
        </style>
        
        <a href='#'><div class="arrow-left"></div><div class="button">Back</div></a>
        

        我不确定它是否是最精致的解决方案,但它确实看起来与您的概念艺术和预期功能相同。

        【讨论】:

        • 我需要一个线性渐变,使元素看起来像一个按钮。如何将渐变应用到 CSS 三角形?
        • 您可能想在这里使用span 而不是div,因为您不应该将“块”元素放在“内联”元素中。
        猜你喜欢
        • 1970-01-01
        • 2021-05-17
        • 2013-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 1970-01-01
        相关资源
        最近更新 更多