【问题标题】:Three colors angled background color三种颜色有角度的背景颜色
【发布时间】:2015-07-30 19:08:06
【问题描述】:

我怎样才能获得与这张图片相似的背景:

只有 3 种颜色,从顶角向外倾斜,就像阳光一样。

也许坚持使用简单的 PNG 或 SVG 背景图像会更好。

【问题讨论】:

    标签: css background-color css-shapes


    【解决方案1】:

    使用 4 色 GIF 图片。这将为您提供跨浏览器/平台兼容性以及向后兼容性,并且这种类型的图像尺寸会很小。如果颜色如图所示微妙,则“锯齿”将被伪装(或提供更大的尺寸)。

    一个不错的选择是使用 SVG,它在现代浏览器中得到了很好的支持。

    【讨论】:

      【解决方案2】:

      是的,它可以通过渐变以响应方式完成。

      这是假设当纵横比发生变化时,你不想保持角度,而是保持相对位置

      诀窍是在渐变方向使用符号名称,然后使用背景图像的大小和位置

      .test {
          display: inline-block;
          border: solid 1px black;
          background-image: linear-gradient(to top left, tomato 50%, transparent 50%),
          linear-gradient(to bottom right, lightgreen 50%, transparent 50%);
          background-size: 60% 100%, 100% 50%;
          background-repeat: no-repeat;
          background-position: bottom right, top left;
      }
      
      #test1 {
          width: 200px;
          height: 100px;
      }
      
      #test2 {
          width: 100px;
          height: 100px;
      }
      
      #test3 {
          width: 70px;
          height: 100px;
      }
      <div class="test" id="test1"></div>
      <div class="test" id="test2"></div>
      <div class="test" id="test3"></div>

      【讨论】:

      • 很好。浏览器对to [side] [side] 选项的支持是否良好?需要检查。
      • @Harry 是的,支持很好 - 与角度语法一样好。
      【解决方案3】:

      SVG

      这可以通过 SVG 完成。 我使用了三个多边形形状。这可以设置为background-image。 或者也可以内联使用,以便您可以在其上使用 css 属性。

      html, body {
        margin: 0;
        padding: 0;
      }
      .triple {
        width: 250px;
        height: 250px;
      }
      .triple:hover {
        width: 500px;
        height: 100px;
      }
      <svg class="triple" viewBox="0 0 100 100" preserveAspectRatio="none">
        <polygon fill="#dd2" points="0,0 100,0 0,60" />
        <polygon fill="#bb2" points="0,60 100,0 30,100 0,100 " />
        <polygon fill="#992" points="30,100 100,0 100,100" />
      </svg>

      【讨论】:

        【解决方案4】:

        这个效果可以通过 CSS 使用伪元素和变换来实现,下面是一个示例 sn-p。但我不认为使用 CSS 是正确的选择。最好使用PNG图片。

        sn-p 使用几个不同背景颜色的伪元素,以所需的角度倾斜来产生三色效果。

        .bg {
          position: relative;
          height: 200px;
          width: 400px;
          padding: 4px;
          background: orange;
          overflow: hidden;
        }
        .bg:after,
        .bg:before {
          position: absolute;
          content: '';
          left: 0px;
          height: 100%;
          width: 100%;
          transform-origin: right top;
        }
        .bg:before {
          top: 0px;
          background: red;
          transform: skewY(-45deg);
        }
        .bg:after {
          top: -100%;
          background: yellow;
          transform: skewY(-15deg);
        }
        span {
          position: relative;
          z-index: 2;
        }
        
        /* Just for demo */
        .bg:hover {
          height: 200px;
          width: 500px;
        }
        <script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
        <div class="bg">
          <span>Some content inside</span>
        </div>

        也可以使用有角度的线性渐变,但我认为它们不适用于动态大小的容器元素,因为随着尺寸的变化需要修改角度以保持外观相同。

        下面是使用linear-gradient 的sn-p。将鼠标悬停在形状上以查看宽度和/或高度的变化对其有何影响。

        .bg {
          position: relative;
          height: 200px;
          width: 400px;
          background: linear-gradient(310deg, red 30%, transparent 30%), linear-gradient(340deg, transparent 58%, yellow 58%), orange;
          overflow: hidden;
        }
        .bg:hover {
          height: 200px;
          width: 500px;
        }
        <script src="https://cdnjs.cloudflare.com/ajax/libs/prefixfree/1.0.7/prefixfree.min.js"></script>
        <div class="bg">
          <span>Some content inside</span>
        </div>

        【讨论】:

        • @TimKrul:是的,这就是我想要说明的,因此就这样离开了。当容器的尺寸发生变化时,渐变需要颜色停止/角度变化。
        • 渐变角度可以自适应。 (不确定我的英语是否足够好:-))查看我的答案
        猜你喜欢
        • 1970-01-01
        • 2017-11-09
        • 2021-09-15
        • 1970-01-01
        • 1970-01-01
        • 2021-05-24
        • 1970-01-01
        • 1970-01-01
        • 2022-11-02
        相关资源
        最近更新 更多