【问题标题】:gradient text in css with text shadow带有文本阴影的css中的渐变文本
【发布时间】:2013-02-11 05:18:18
【问题描述】:

反正有没有使用这种文本渐变方法,并且在文本上也有阴影。 http://css-tricks.com/snippets/css/gradient-text/

当我像

那样设置我的阴影时
text-shadow: 1px 1px 2px #000;

然后它弄乱了我的文本渐变,因为背景设置为透明。 有谁知道针对 webkit 浏览器的解决方案。

【问题讨论】:

标签: html css


【解决方案1】:

我想出了一个不使用filterz-index 的解决方案。如果您有背景或前景,则可以使用它:

h1 {
    position: relative;
}

h1::after {
    background-image: linear-gradient(#f00, #fcc);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    content: attr(data-content);
    position: absolute;
    top: 0;
    left: 0;
}

h1::before {
    text-shadow: #000 1px 1px 2px;
    content: attr(data-content);
    position: absolute;
    top: 0;
    left: 0;
}

效果:https://jsfiddle.net/m9dtf6po/2/

当然,由于我使用的是::before::after,所以需要一个属性,但是可以共享该属性。使用z-index的问题在于:

当我确实有一个背景和一个前景夹在我的文本中时,这就是我遇到的问题,如下图所示:

文本S+ 需要位于条形顶部,但在所有事物的顶部都可以有一个框。我实际上找到了这篇文章并尝试了 Karl 的解决方案,但阴影消失在酒吧后面。

【讨论】:

    【解决方案2】:

    您可以结合filter: drop-shadow CSS 属性来达到目的。

    h1 {
      font-size: 72px;
      background: -webkit-linear-gradient(#eee, #333);
      -webkit-background-clip: text;
      -webkit-text-fill-color: transparent;
      filter: drop-shadow(2px 2px #333);
    }
    <h1>Example</h1>

    【讨论】:

      【解决方案3】:

      更新

      为您找到了解决方案, 唯一的问题是它要求 html 有一个属性。

      http://jsfiddle.net/2GgqR/2/

      h1 {
        font-size: 72px;
        background-image: -webkit-linear-gradient(#eee, #333);
        -webkit-background-clip: text;
        -webkit-text-fill-color: transparent;
        position:relative;  
      }
      
      h1:after {
        background: none;
        content: attr(data-text);
        left: 0;
        top: 0;
        z-index: -1;
        position: absolute;
        text-shadow: 1px 1px 2px #000;
      }
      

      原文在这里 :) http://viget.com/inspire/background-clip-text-shadow-gradients

      更新链接 来自 cmets http://jsfiddle.net/2GgqR/5/

      这里我把背景的背景颜色加到了:after

      h1:after {
        background: #f3f3ee;
      }
      
      .background{
          background-color: #f3f3ee;
          position: relative;
          z-index: 1;
      }
      

      【讨论】:

      • 嗨,Karl,这很好用,直到你尝试在它周围有一个包装 div,我需要在它后面有一个背景图像。看看我更新的小提琴,它周围只有一个背景颜色包装。 jsfiddle.net/2GgqR/3
      【解决方案4】:

      我可能真的对此表示反对,但我相信这样做的唯一方法是在后面放置一个重复的元素。这只是一个想法。

      【讨论】:

      • 我的意思是我可以使用 Pseudo:after 并设置 content:"bla bla bla text" 但这里的问题是文本是动态的,所以我无法设置内容。有没有办法将内容设置为内联标签
      • 内容是如何更新的?我的意思是将元素放在其副本上,绝对位置,并模仿结果。如果您的文本是用 Javascript 更新的,您可以运行这两个元素的代码。虽然,我只会在极端情况下这样做,我无意以后维护代码:)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-15
      • 1970-01-01
      • 2018-07-25
      相关资源
      最近更新 更多