【问题标题】:Grayscaled text over cover image封面图像上的灰度文本
【发布时间】:2017-02-12 16:00:08
【问题描述】:

我正在尝试创建类似于此的布局:

我知道我可以使用 svg 或剪辑路径创建“A”,但问题是我想保持“A”内的背景与主体背景对齐,即如果窗口调整大小,背景图像将作为封面会做出反应,“A”内的图像也应该如此。

我对如何实现这一点没有任何想法......我能想到的最后一件事是使用background-attachment: fixed 并使用复杂的 CSS 创建“A”,比如许多具有不同宽度/高度、边框的 div半径,翻译等来创建字母“A”。

编辑: 我想我没有把这个案子说清楚,所以请检查我想要实现的这个 Demo。 请注意,当您调整浏览器大小时,灰度点如何与文本 div 保持对齐,而背景图像设置为覆盖宽度和高度,无论视口大小如何,并且点内的图像会更改以呈现相同的点...我只是想要更复杂的形状,比如 A 或 Z,而不是那种奇怪的形状。

【问题讨论】:

  • 您想要一张“A”的图像,其余的背景为灰度格式,并且当它调整大小时该图像的内容会发生变化?
  • @Stewartside 是的,虽然如果我们可以在“A”内部有一个单独的图像以进行更多控制会更好,但即使只是灰度也很棒。
  • @ImranBughio 为什么不直接使用集成了 A 的背景图像和所需的过滤器?
  • @web-tiki 我希望它是那么简单,但假设“A”与该文本对齐,背景图像将包裹整个窗口宽度...

标签: html css svg css-shapes


【解决方案1】:

这是一种您可以使用的方法,您可以使用 SVG 响应式地放置您的字母。

重点是使用图像两次,一次是灰度,一次是正常。然后你可以用文本屏蔽普通图像(与codepen中的方法相同),让灰度图像出现。这是一个例子:

svg {
  display: block;
  width: 100%; height: auto;
}
<svg viewbox="0 0 300 200">
  <defs>
    <mask id="textMask" x="0" y="0" width="300" height="200">
      <rect x="0" y="0" width="300" height="200" fill="#fff" />
      <text text-anchor="middle" x="100" y="150" dy="1" font-size="150">A</text>
    </mask>
    <filter id="deSaturate">
      <feColorMatrix in="SourceGraphic" type="saturate" values="0" />
    </filter>
    <image id="image" xlink:href="http://i.imgur.com/RECDV24.jpg" x="0" y="0" width="300" height="200" />
  </defs>
  <use xlink:href="#image" filter="url(#deSaturate)" />
  <use xlink:href="#image" mask="url(#textMask)" />
</svg>

【讨论】:

  • 这是一个巧妙的技巧,但恐怕我的问题无法使用这种技术解决......检查这个example,如你所见,背景图像假设覆盖整个身体,而灰度元素应该与中间部分保持一致,同时在其中保持主图像的相同位置..
  • 我想我不擅长解释这个问题,希望你这次能理解我的意思......
  • 我打算一直使用我与您分享的示例,即制作许多组合在一起看起来像“A”的小形状......凌乱但我觉得唯一的解决方案会交付我想要的。
【解决方案2】:

您可以使用clip-path 并指向一个SVG &lt;clipPath&gt;。在everything except IE工作。

.wrap {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  
  background: url("http://lorempixel.com/1000/700") no-repeat center center;
  background-attachment: fixed;
  
  -webkit-background-size: cover;
  background-size: cover;
}

.txt {
  background: rgba(0, 0, 0, 0.5);
  padding: 20px;
  color: #fff;
  max-width: 500px;
  padding-top: 20px;
  margin: 50px auto;
  position: relative;
}

.a{
  position: absolute;
  left: -100px;
  top: 0;
  width: 100px;
  height: 100px;
  clip-path: url(#tri);
  -webkit-clip-path: url(#tri);

  background: url("http://lorempixel.com/1000/700") no-repeat center center;
  background-attachment: fixed;
  -webkit-background-size: cover;
  background-size: cover;
  
  -webkit-filter: grayscale(100%);
  filter: grayscale(100%);
}
<div class="wrap">
  <div class="txt">
    <div class="a"></div>
    Lorem ipsum dolor sit amet, consectetur adipisicing elit. Enim ipsum, distinctio molestiae iste ab eum tempore excepturi fugit placeat veniam. Hic minus dolorum, reprehenderit atque, nobis rerum. Quis incidunt, beatae!
  </div>
</div>

<svg width="0" height="0">
  <clipPath id="tri" clipPathUnits="objectBoundingBox">
    <path d="M 0.5,0 L 1,1, 0,1 Z
             M 0.5,0.3 L 0.3,0.7 L 0.7,0.7 Z"/>
  </clipPath>
</svg>

Demo fiddle

【讨论】:

  • 谢谢伙计,我真希望 IE 也支持这个功能,但我想我只会为 IE 用户添加一个不透明的白色 png。
  • 您的 path 标签工作正常,但是当我从 Illustrator 导出路径时,它就无法正常工作...您能帮忙吗?这是demo,路径为半“M”形,但它显示为矩形,因为没有应用剪辑路径。
  • 使用 clipPathUnits="objectBoundingBox" 时,路径中的坐标值必须在 0 到 1 的范围内。您的示例的修复方法是向路径添加一个变换,将其缩小到该范围.工作示例:jsfiddle.net/k7cmxh7q/4
【解决方案3】:

filter 属性怎么样?下面是一个快速演示:

.background {
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
  background: url(http://lorempixel.com/600/400);
}
.background:before {
  content: "A";
  color:white;
  position: absolute;
  font-size: 300px;
  top: 50%;
  left: 50%;
  opacity: 0.4;
  transform: translate(-50%, -50%);
  -webkit-filter: grayscale(100%);
  filter: grayscale(100%);
}
<div class="background">

</div>

【讨论】:

  • 设计师提供了一张图片,里面有很多复杂的滤镜和其他的调整,我确信这是 CSS 无法实现的。
  • 我的问题中的图像是我模拟最终输出的图像,它具有更多过滤器。
  • 我不得不说我现在有点困惑——你到底在问什么?
  • 您确实在 ":before" 中添加了灰度,但它不起作用
  • 我认为它实际上只能在背景过滤器的帮助下使用 CSS 来完成,但考虑到它只被 Safari 完全支持,这并没有太大帮助:(
猜你喜欢
  • 2020-08-06
  • 1970-01-01
  • 2013-05-08
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
  • 2013-12-11
  • 1970-01-01
  • 2018-11-28
相关资源
最近更新 更多