我正在设计一个带有背景图片的网页。中间有一个白色的盒子(使用div),白色的盒子里面有一些文字。我想要做的是使文本颜色与身体背景的颜色相同。如果我将文本的颜色属性设置为透明,它会消失,因为有一个白色div。我该怎么做?
这是JSFiddle的链接:http://jsfiddle.net/FpJpV/
html是
<div>
<h1>Title</h1>
</div>
CSS
body {
background-color: red;
font-family: sans-serif;
}
div {
width: 200px;
background-color: white;
margin: auto;
text-align: center;
padding: 1em;
}
注意:在JSFiddle中,我使用红色背景来简化,但在真实的网页中,正文的背景是图像。
答案 0 :(得分:4)
您在HTML / CSS / JavaScript中寻找的方法有三种,有些方法比其他方式更为简洁。
<canvas>
绘制您的形状和类型,并设置ctx.globalCompositeOperation="xor";
,其中ctx
是您的画布上下文。
var c=document.getElementById('myCanvas');
var ctx=c.getContext('2d');
ctx.font = "bold 36px Proxima Nova";
ctx.fillStyle='blue';
ctx.fillText("MORE",100,87);
ctx.globalCompositeOperation='xor';
ctx.beginPath();
ctx.fillStyle='white';
ctx.arc(150,75,75,0,2*Math.PI);
ctx.fill();
body{
background: -webkit-radial-gradient(top left,rgb(23, 39, 34) 4%,rgb(56, 99, 99) 37%,rgb(22, 27, 15) 73%,rgb(22, 27, 14) 93%,#232323 100%);
width:100%;
height:100%;
}
html{
height:100%
}
<canvas id='myCanvas'></canvas>
mix-blend-mode: screen
并将文字颜色设置为黑色。
.blend-mode {
background:white;
border-radius:100%;
width:150px;
height:150px;
line-height:155px;
float:left;
margin:20px;
font-family: "Proxima Nova", Hevetica, sans-serif;
font-weight:bold;
color:black;
text-align:center;
vertical-align:middle;
font-size:36px;
mix-blend-mode: screen;
}
body{
background: -webkit-radial-gradient(top left,rgb(23, 39, 34) 4%,rgb(56, 99, 99) 37%,rgb(22, 27, 15) 73%,rgb(22, 27, 14) 93%,#232323 100%);
width:100%;
height:100%;
}
html{
height:100%;
}
<div class="blend-mode">MORE</div>
-webkit-text-fill-color:transparent
和-webkit-background-clip:text
显示其背后的背景副本。这个需要背景副本的一些对齐以匹配“原始”背景。
.wrap{
margin:20px;
float:left;
position:relative;
}
.background {
width: 150px;
height: 150px;
border-radius: 100%;
background: white;
position:absolute;
top:0;
left:0;
z-index:4;
}
.text {
position:absolute;
top: 25px;
left: 25px;
z-index:5;
background: -webkit-radial-gradient(top left, rgb(23, 39, 34) 4%, rgb(56, 99, 99) 37%, rgb(22, 27, 15) 73%, rgb(22, 27, 14) 93%, #232323 100%);
font-family: Proxima Nova, Helvetica, sans-serif;
font-weight:bold;
line-height:100px;
font-size: 36px;
color: #666;
-webkit-background-clip: text;
-webkit-text-fill-color: transparent;
}
body{
background: -webkit-radial-gradient(top left,rgb(23, 39, 34) 4%,rgb(56, 99, 99) 37%,rgb(22, 27, 15) 73%,rgb(22, 27, 14) 93%,#232323 100%);
width:100%;
height:100%;
}
html{
height:100%;
}
<div class="wrap">
<div class="background"></div>
<div class="text">MORE</div>
</div>
这些都不可能在浏览器上运行良好,我还没有测试过它们!
答案 1 :(得分:3)
不能用CSS做到这一点;我的建议是什么:
请尝试使用图片。
使用Photoshop / GIMP等软件从白色图像中剪切文本,使其在文本所在的位置透明。将其另存为PNG
并将图片设置为div的背景。
请确保从div中删除白色背景。
<强> EXAMPLE 强>
像这样: