【问题标题】:Gradient text color渐变文字颜色
【发布时间】:2016-10-16 08:32:57
【问题描述】:

是否有一个生成器,或者一种简单的方法来生成像this 这样的文本,但不必定义每个字母

所以是这样的:

.rainbow {
  background-image: -webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );
  background-image: gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );
  color:transparent;
  -webkit-background-clip: text;
  background-clip: text;
}
<span class="rainbow">Rainbow text</span>

但不是用 rainbow 颜色而是用其他颜色生成(例如白色到灰色/浅蓝色渐变等)我找不到一个简单的解决方案。有什么解决办法吗?

【问题讨论】:

  • 有很多网站提供相同的服务,例如cssmatic.com
  • 那里有什么问题?根据需要更改渐变。如果您询问的是工具/生成器(我认为您是),那么您的问题将因离题/意见而被关闭。
  • 这仅适用于 背景 而不是文本颜色本身:|
  • 我试图了解如何获得与 rainbow text 示例相同的效果,但使用其他颜色 @Harry 不要求生成器 perse 关于如何简单地自己设置颜色/rainbow 示例如何工作的解决方案也会有很大帮助。
  • 我很想知道它是如何工作的。因为给定的答案使用了不同的 a 方法(有效,但我仍然很想知道)@Harry

标签: css generator gradient linear-gradients


【解决方案1】:

@import url(https://fonts.googleapis.com/css?family=Roboto+Slab:400);

body {
  background: #222;
}

h1 {
  display: table;
  margin: 0 auto;
  font-family: "Roboto Slab";
  font-weight: 600;
  font-size: 7em;
  background: linear-gradient(330deg, #e05252 0%, #99e052 25%, #52e0e0 50%, #9952e0 75%, #e05252 100%);
  -webkit-background-clip: text;
  -webkit-text-fill-color: transparent;
  line-height: 200px;
}
<h1>beautiful</h1>

【讨论】:

  • 您好,欢迎来到 stackoverflow,感谢您的回答。虽然这段代码可能会回答这个问题,但您是否可以考虑添加一些解释来说明您解决了什么问题,以及您是如何解决的?这将有助于未来的读者更好地理解您的答案并从中学习。
  • 它在 IE11 中可以使用吗,不可以。您可以更新 IE11 支持吗?。
【解决方案2】:

  .gradient_text_class{
      font-size: 72px;
      background: linear-gradient(to right, #ffff00 0%, #0000FF 30%);
      background-image: linear-gradient(to right, #ffff00 0%, #0000FF 30%);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
    }
<div class="gradient_text_class">Hello</div>

【讨论】:

    【解决方案3】:

    body{ background:#3F5261; text-align:center; font-family:Arial; } 
    
    h1 {
      font-size:3em;
      background: -webkit-linear-gradient(top, gold, white);
      background: linear-gradient(top, gold, white);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
    
      position:relative;
      margin:0;
      z-index:1;
    
    }
    
    div{ display:inline-block; position:relative; }
    div::before{ 
       content:attr(data-title); 
       font-size:3em;
       font-weight:bold;
       position:absolute;
       top:0; left:0;
       z-index:-1;
       color:black;
       z-index:1;
       filter:blur(5px);
    } 
    <div data-title='SOME TITLE'>
      <h1>SOME TITLE</h1>
    </div>

    【讨论】:

      【解决方案4】:

      CSS 文本渐变示例

      background-image: -moz-linear-gradient(top,#E605C1 0%,#3B113B 100%);
      background-image: -webkit-linear-gradient(top,#E605C1 0%,#3B113B 100%);
      background-image: -o-linear-gradient(top,#E605C1 0%,#3B113B 100%);
      background-image: -ms-linear-gradient(top,#E605C1 0%,#3B113B 100%);
      background-image: linear-gradient(top,#E605C1 0%,#3B113B 100%);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      position:relative;
      display:inline-block; /*required*/
      

      在线生成器 textgradient.com

      【讨论】:

        【解决方案5】:

        这种效果的工作方式非常简单。该元素被赋予一个背景,即渐变。根据为其指定的颜色和色标百分比,它会从一种颜色变为另一种颜色。

        例如,在彩虹文本示例中(请注意,我已将渐变转换为标准语法):

        • 渐变从颜色#f220%(即元素的左边缘)开始。始终假定第一种颜色从 0% 开始,即使未明确提及百分比。
        • 0%14.25% 之间,颜色逐渐从#f22 变为#f2f。百分比设置为14.25,因为有七种颜色变化,我们正在寻找相等的分割。
        • 14.25%(容器大小)处,颜色将完全按照指定的渐​​变为#f2f
        • 同样,颜色会根据色标百分比指定的波段从一种变为另一种。每个波段应该是14.25%的一个步骤。

        所以,我们最终得到了如下 sn-p 所示的渐变。现在仅此一项就意味着背景适用于整个元素而不仅仅是文本。

        .rainbow {
          background-image: linear-gradient(to right, #f22, #f2f 14.25%, #22f 28.5%, #2ff 42.75%, #2f2 57%, #2f2 71.25%, #ff2 85.5%, #f22);
          color: transparent;
        }
        &lt;span class="rainbow"&gt;Rainbow text&lt;/span&gt;

        由于渐变只需要应用于文本而不是整个元素,我们需要指示浏览器从文本之外的区域裁剪背景。这是通过设置background-clip: text 来完成的。

        请注意,background-clip: text 是一个实验性属性,并未得到广泛支持。


        现在,如果您希望文本具有简单的 3 色渐变(也就是说,从红色 - 橙色 - 棕色),我们只需要更改线性渐变规范如下:

        • 第一个参数是渐变的方向。如果颜色应该是左侧为红色,右侧为棕色,则使用方向为to right。如果它应该是右侧的红色和左侧的棕色,则将方向指定为to left
        • 下一步是定义渐变的颜色。由于我们的渐变应该从左侧开始为红色,因此只需将red 指定为第一种颜色(假设百分比为 0%)。
        • 现在,由于我们有两种颜色变化(红色 - 橙色和橙色 - 棕色),因此必须将百分比设置为 100 / 2 以实现等分。如果不需要等分,我们可以根据需要分配百分比。
        • 所以在50%,颜色应该是orange,然后最终颜色是brown。最终颜色的位置始终假定为 100%。

        因此,渐变的规范应如下所示:

        background-image: linear-gradient(to right, red, orange 50%, brown).
        

        如果我们使用上面提到的方法形成渐变并将它们应用到元素上,我们可以获得所需的效果。

        .red-orange-brown {
          background-image: linear-gradient(to right, red, orange 50%, brown);
          color: transparent;
          -webkit-background-clip: text;
          background-clip: text;
        }
        .green-yellowgreen-yellow-gold {
          background-image: linear-gradient(to right, green, yellowgreen 33%, yellow 66%, gold);
          color: transparent;
          -webkit-background-clip: text;
          background-clip: text;
        }
        <span class="red-orange-brown">Red to Orange to Brown</span>
        
        <br>
        
        <span class="green-yellowgreen-yellow-gold">Green to Yellow-green to Yellow to Gold</span>

        【讨论】:

          【解决方案6】:

          您可以使用 CSS linear-gradientmix-blend-mode 的组合来实现该效果。

          HTML

          <p>
              Enter your message here... 
              To be or not to be, 
              that is the question...
              maybe, I think, 
              I'm not sure
              wait, you're still reading this?
              Type a good message already!
          </p>
          

          CSS

          p {
              width: 300px;
              position: relative;
          }
          
          p::after {
              content: "";
              position: absolute;
              top: 0;
              left: 0;
              right: 0;
              bottom: 0;
              background: linear-gradient(45deg, red, orange, yellow, green, blue, purple);
              mix-blend-mode: screen;
          }
          

          这样做是在段落的::after 伪元素上添加一个线性渐变,并使其覆盖整个段落元素。但是使用mix-blend-mode: screen,渐变只会显示在有文本的部分。

          这里有一个jsfiddle 来展示这一点。只需修改 linear-gradient 值即可实现您想要的。

          【讨论】:

          • 这看起来很有希望。除了背景 behind 之外,文本也随之消失。除了那个简单而好的解决方案! +1
          • @AngelofDemons 哦,我假设背景只是白色。 mix-blend-mode 将元素与其后面的所有其他元素混合在一起,而不仅仅是文本,因此如果段落也有背景,彩虹色也会与它们混合。我知道,这很糟糕:(
          • 它并不糟糕,我喜欢这种简单实用的方法。我尝试使用它this 方式。
          • Edge 不支持(IE 10/11 也不支持)并且对我来说在 Chrome 中不起作用(尽管它在 Firefox 中起作用)编辑:如果父 p 有它在 chrome 中起作用background-color: white;
          【解决方案7】:

          我不完全了解 stop 的工作原理。 但我有一个 渐变文本 示例。也许这会对你有所帮助!

          _如果需要,您还可以为渐变添加更多颜色,或者只是从color generator 中选择其他颜色

          .rainbow2 {
              background-image: -webkit-linear-gradient(left, #E0F8F7, #585858, #fff); /* For Chrome and Safari */
              background-image:    -moz-linear-gradient(left, #E0F8F7, #585858, #fff); /* For old Fx (3.6 to 15) */
              background-image:     -ms-linear-gradient(left, #E0F8F7, #585858, #fff); /* For pre-releases of IE 10*/
              background-image:      -o-linear-gradient(left, #E0F8F7, #585858, #fff); /* For old Opera (11.1 to 12.0) */
              background-image:         linear-gradient(to right, #E0F8F7, #585858, #fff); /* Standard syntax; must be last */
              color:transparent;
              -webkit-background-clip: text;
              background-clip: text;
          }
          .rainbow {
          
            background-image: -webkit-gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );
            background-image: gradient( linear, left top, right top, color-stop(0, #f22), color-stop(0.15, #f2f), color-stop(0.3, #22f), color-stop(0.45, #2ff), color-stop(0.6, #2f2),color-stop(0.75, #2f2), color-stop(0.9, #ff2), color-stop(1, #f22) );
            color:transparent;
            -webkit-background-clip: text;
            background-clip: text;
          }
          <span class="rainbow">Rainbow text</span>
          <br />
          <span class="rainbow2">No rainbow text</span>

          【讨论】:

          • 但是 -webkit-background-clip: text; IE11 不支持该属性,还有其他选择吗?
          • 我似乎无法使用text-shadow 正常工作,因为background-imagez-index 总是低于text-shadow。有什么想法吗?
          • 在 IE11 中可以使用吗,不可以。您可以更新 IE11 支持吗?
          猜你喜欢
          • 2022-12-21
          • 1970-01-01
          • 1970-01-01
          • 2021-05-29
          • 1970-01-01
          • 2011-04-26
          • 2011-03-06
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多