需要帮助以比剪裁优惠更复杂的方式通过某些文本显示背景

Posted

技术标签:

【中文标题】需要帮助以比剪裁优惠更复杂的方式通过某些文本显示背景【英文标题】:Need help getting a background to show through some text in a more complex way than clipping offers 【发布时间】:2018-06-13 07:41:37 【问题描述】:

查看附件图片了解我想要实现的目标。

基本上我需要背景图像穿过文本,除了文本与褪色面板重叠的地方。这需要文本变为与面板本身相同的颜色/不透明度。

这让我很头疼,但想看看在多大程度上/哪些解决方案可以实现我的目标。

谢谢,哈利。


编辑 1:如果您想测试任何东西,这里有一个 codepen https://codepen.io/itsharryfrancis/pen/XVagep

我尝试过使用它,但确实如此

-webkit-background-clip: text;
-webkit-text-fill-color: transparent;

编辑 2:我将在此处留下一个 codepen,它是我目前拥有的最新版本,供将来可能希望看到它的任何人使用。

https://codepen.io/itsharryfrancis/pen/goxVQP?editors=0100

【问题讨论】:

你试过什么?你的代码在哪里? 你能发个小提琴吗? 您好!是的,对不起,我应该在这方面更清楚一点。到目前为止,我只是对示例进行了非常快速的模拟,因此我可以尝试不同的东西,所以代码方面没有太多可看的(我会把一个 codepen 放在一起,这样人们就可以尝试让它工作了) )。到目前为止,我唯一接近的是使用 webkit 剪辑,但这并没有帮助,因为它只是为文本添加了背景,而不是让容器的背景仅通过文本可见。跨度> @JonathanChaplin 现在将为此制作一个代码笔。 2 分钟。 来吧伙计们:codepen.io/itsharryfrancis/pen/XVagep 【参考方案1】:

这是实现所需外观的工作示例,但它在 IE 和 Edge 中使用相对较新的 clip-path 属性,即 not supported。这个问题可以通过使用 SVG 剪辑来解决(或作为后备),但我希望这对于开始就足够了。

.example 
    width: 600px;


.example 
    background: url('http://dummy-images.com/nature/dummy-1024x576-Waterfalls.jpg');
    background-position: center center;
    background-size: cover;
    position: relative;


.text 
    width: 100%;
    font-family: Helvetica, Arial, sans-serif;
    font-weight: 300;
    font-size: 100px;
    line-height: 1.0;
    text-transform: uppercase;


.part1, .part2 
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    z-index: 0;
    display: flex;
    align-items: center;
    justify-content: center;


.part1:before 
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    width: 400px;
    background-color: rgba(255, 255, 255, 0.5);
    z-index: 1;


.part1 .text 
    position: relative;
    z-index: 2;
    background: url('http://dummy-images.com/nature/dummy-1024x576-Waterfalls.jpg');
    background-position: center center;
    background-size: 100%;
    -webkit-background-clip: text;
    -webkit-text-fill-color: transparent;


.part2 
    color: rgba(255, 255, 255, 0.5);
    z-index: 3;
    clip-path: polygon(400px 0px, 100% 0px, 100% 100%, 400px 100%);
<div class="example">
  <div class="part1"><span class="text">Stack<br>Overflow</span></div>
  <div class="part2"><span class="text">Stack<br>Overflow</span></div>
 </div>
 

更新:我发现最初的版本在文本下的背景没有对齐。更新版本修复了这个问题,但价格低廉:.text 元素是必需拥有width: 100%,因为它允许对齐背景。如果文本需要额外对齐,则需要添加一些padding

【讨论】:

这看起来很好吃!明天我会仔细看看它并尝试实施它。感谢您的回答! 文本溢出部分的好主意 - 第二部分可能是不可能的让文本背景与实际背景对齐。我会看看我能做什么。再次感谢! 我刚刚意识到文本的背景没有对齐。我找到了解决此问题的方法,但它会导致一些限制,我将立即更新答案 太棒了 - 我已经添加了它,它运行良好。唯一的问题是 background-size: cover; on .example 根据高度移动到拉伸。这意味着文本后面的图像是基于宽度的,主背景是基于高度的,偏移图像。看看我能做些什么来解决这个问题。感谢您的意见! 不幸的是,对于background-size: cover,您只能做一件事-您可以准备好背景,使其垂直而不是水平挤压。背景是水平同步的,但不是垂直同步的,因此调整背景图像的大小会有所帮助。另外请将答案标记为已接受,以让其他人知道此解决方案实际上解决了您的问题。

以上是关于需要帮助以比剪裁优惠更复杂的方式通过某些文本显示背景的主要内容,如果未能解决你的问题,请参考以下文章

如何以比使用 strip_tags 函数更安全的方式剥离标签?

企业邮箱哪家好?怎么买更便宜?

企业邮箱哪家好?怎么卖更便宜?

为啥启用透明度会导致剪裁问题?

ContextMenu 在某些情况下被剪裁

SwiftUI 中的动画文本循环