【发布时间】:2020-11-27 15:09:37
【问题描述】:
我想要实现的外观是,如果您在白页上有黑色文本,但该文本会出现在图像中。图像上方的文本部分改变了它的颜色。
我在这里有一个“工作”(不灵活)示例,使用data 属性来获取相同的文本并使用content 将其设置在:before 元素上:
https://codepen.io/moy/pen/rNeaGbJ
/* General Shit */
body {
color: #000;
font-family: Arial;
font-size: 1.2rem;
line-height: 1.5;
}
h2 {
font-size: 3.6rem;
margin-bottom: 30px;
}
p {
margin-bottom: 30px;
}
.btn {
background: #000;
color: #fff;
display: inline-block;
font-size: 1.2rem;
padding: 15px 60px;
}
img {
width: 100%;
max-width: 100%;
}
/* Grid */
.grid {
clear: both;
margin: 0 auto;
padding: 30px 0;
max-width: 1000px;
}
.grid__item {
box-sizing: border-box;
float: left;
}
.grid--flip .grid__item {
float: right;
}
.grid__item--caption {
padding: 30px 60px;
}
.one-half {
width: 50%;
}
/* Title */
.title-wrap {
display: -webkit-box;
display: flex;
-webkit-box-pack: start;
justify-content: flex-start;
margin-left: -60%;
overflow: hidden;
position: relative;
}
.grid--flip .title-wrap {
-webkit-box-pack: end;
justify-content: flex-end;
margin-left: 0;
margin-right: -60%;
}
.title {
color: #000;
}
.grid--flip .title {
color: #fff;
}
.title:before {
color: #fff;
content: attr(data-title);
display: block;
overflow: hidden;
position: absolute;
width: 27.75%;
white-space: nowrap;
}
.grid--flip .title:before {
color: #000;
width: 34.75%;
}
<div class="grid">
<div class="grid__item grid__item--image one-half">
<img src="http://www.fillmurray.com/800/800" />
</div>
<div class="grid__item grid__item--caption one-half">
<div class="title-wrap">
<h2 class="title" data-title="Title goes here">Title goes here</h2>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<a href="#" class="btn">Shop Collection</a>
</div>
</div>
<div class="grid grid--flip">
<div class="grid__item grid__item--image one-half">
<img src="http://www.fillmurray.com/800/800" />
</div>
<div class="grid__item grid__item--caption one-half">
<div class="title-wrap">
<h2 class="title" data-title="Title goes here">Title goes here</h2>
</div>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.</p>
<a href="#" class="btn">Shop Collection</a>
</div>
</div>
问题是如果...
- 我调整了容器的宽度,所有的值都关闭了,看起来坏了。
- 标题较长,多行,因溢出而被截断
- 以及为什么宽度是
:before元素上的宽度(如果有人能解释一下,那就太好了哈)
所以我尝试了一个使用px 值而不是% 的版本,它解决了更改容器宽度的问题。但是,当文本换行到 2 行时,我仍然遇到问题。
示例(使用 px):https://codepen.io/moy/pen/JjXoMvb
谁能想到一个更好的解决方案?我是否过于复杂或遗漏了一些明显的东西?
编辑:PX 示例错误不正确,现在更新链接。
【问题讨论】:
-
如果您需要在该图像上具有特定的字符集,我会使用编辑图像或分离元素。否则,按照您的方法,浏览器将中断下一部分,直到您减小字体大小。
-
是的,这只是我正在尝试的一个古怪的小效果。而不是确保文本清晰易读的安全功能。所以不要太担心有多少字符在图像上。只希望文本与图像重叠,并在重叠时改变颜色。我想我正在工作......只是在文本换行时没有!可能只需要确保它们是简短的单词或具有预定义的换行符。