Etiketimdeki belirli öğelerin arka planı olarak dinamik metin kullanmak istiyorum. Bu nedenle görüntüleri (dinamik metin) kullanabilirim. Bunu sadece CSS veya JavaScript ile nasıl yaparım?
Yanıtlar:
Göreli konumlandırılmış öğenizin içinde kesinlikle konumlandırılmış bir öğeye sahip olabilirsiniz:
<div id="container">
<div id="background">
Text to have as background
</div>
Normal contents
</div>
Ve sonra CSS:
#container {
position: relative;
}
#background {
position: absolute;
top: 0;
left: 0;
bottom: 0;
right: 0;
z-index: -1;
overflow: hidden;
}
İşte bunun bir örneği .
SVG metin arka plan resmi
body {
background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' height='50px' width='120px'><text x='0' y='15' fill='red' font-size='20'>I love SVG!</text></svg>");
}
<p>I hate SVG!</p><p>I hate SVG!</p><p>I hate SVG!</p><p>I hate SVG!</p>
<p>I hate SVG!</p><p>I hate SVG!</p><p>I hate SVG!</p><p>I hate SVG!</p>
İşte CSS'nin girintili bir versiyonu, böylece daha iyi anlayabilirsiniz. Bunun işe yaramadığını unutmayın, bunun yerine yukarıdaki kod parçasından tek satırlı SVG kullanmanız gerekir:
body {
background-image:url("data:image/svg+xml;utf8,
<svg xmlns='http://www.w3.org/2000/svg' version='1.1'
height='50px' width='120px'>
<text x='0' y='15' fill='red' font-size='20'>I love SVG!</text>
</svg>");
}
Bunun ne kadar taşınabilir olduğundan emin değilim (Firefox 31 ve Chrome 36'da çalışıyor) ve teknik olarak bir görüntü ... ama kaynak satır içi ve düz metindir ve sonsuza kadar ölçeklenir.
@senectus, base64 kodlarsanız IE'de daha iyi çalıştığını buldu: https://stackoverflow.com/a/25593531/895245
Bu, sözde öğelerden: before veya: after öğesini kullanan yalnızca CSS ile mümkün olabilir (ancak oldukça hack):
.bgtext {
position: relative;
}
.bgtext:after {
content: "Background text";
position: absolute;
top: 0;
left: 0;
z-index: -1;
}
<div class="bgtext">
Foreground text
</div>
Bu işe yarıyor gibi görünüyor, ancak muhtemelen biraz ayarlamanız gerekecek. Ayrıca desteklemediği için IE6'da çalışmayacağını unutmayın :after.
Ciro'nun metni içeren bir SVG Veri URI arka planı hakkındaki çözümü çok akıllıca.
Ancak, düz SVG kaynağını veri URI'sına eklerseniz IE'de çalışmaz.
Bunu aşmak ve IE9 ve sonrasında çalışmasını sağlamak için SVG'yi base64 olarak kodlayın. Bu harika bir araçtır.
Yani bu:
background:url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg"><text x="5%" y="5%" font-size="30" fill="red">I love SVG!</text></svg>');
Şuna dönüşür:
background:url('data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0ZXh0IHg9IjUlIiB5PSI1JSIgZm9udC1zaXplPSIzMCIgZmlsbD0icmVkIj5JIGxvdmUgU1ZHITwvdGV4dD48L3N2Zz4=');
Test edildi ve IE9-10-11, WebKit (Chrome 37, Opera 23) ve Gecko (Firefox 31) ile çalışıyor.
@Ciro
Satır içi svg kodunu ters eğik çizgi ile kırabilirsiniz "\"
Aşağıdaki kod ile Chrome 54 ve Firefox 50'de test edilmiştir
body {
background: transparent;
background-attachment:fixed;
background-image: url(
"data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='170px' height='50px'> \
<rect x='0' y='0' width='170' height='50' style='stroke:white; fill:gray; stroke-opacity: 0.3; stroke-width: 3px; fill-opacity: 0.7; stroke-dasharray: 10 5; stroke-linecap=round; '/> \
<text x='85' y='30' style='fill:lightBlue; text-anchor: middle' font-size='16' transform='rotate(10,85,25)'>I love SVG!</text></svg>");
}
Bunu bile test ettim
background-image: url("\
data:image/svg+xml;utf8, \
<svg xmlns='http://www.w3.org/2000/svg' version='1.1' width='170px' height='50px'> \
<rect x='0' y='0' width='170' height='50'\
style='stroke:white; stroke-width: 3px; stroke-opacity: 0.3; \
stroke-dasharray: 10 5; stroke-linecap=round; \
fill:gray; fill-opacity: 0.7; '/> \
<text x='85' y='30' \
style='fill:lightBlue; text-anchor: middle' font-size='16' \
transform='rotate(10,85,25)'> \
I love SVG! \
</text> \
</svg>\
");
ve çalışıyor (en azından Chrome 54 & Firefox 50 ==> NWjs & Electron garantili kullanım)
(Ancak bunu nadir durumlarda kullanın, çünkü HTML yöntemi TERCİH EDİLEN YOLdur ).
.container{
position:relative;
}
.container::before{
content:"";
width: 100%; height: 100%; position: absolute; background: black; opacity: 0.3; z-index: 1; top: 0; left: 0;
background: black;
}
.container::after{
content: "Your Text"; position: absolute; top: 0; left: 0; bottom: 0; right: 0; z-index: 3; overflow: hidden; font-size: 2em; color: red; text-align: center; text-shadow: 0px 0px 5px black; background: #0a0a0a8c; padding: 5px;
animation-name: blinking;
animation-duration: 1s;
animation-iteration-count: infinite;
animation-direction: alternate;
}
@keyframes blinking {
0% {opacity: 0;}
100% {opacity: 1;}
}
<div class="container">here is main content, text , <br/> images and other page details</div>
Bg metnini içeren öğenin daha düşük bir yığınlama sırasına (z-endeksi, konum) sahip olmasını ve hatta muhtemelen opaklığı ayarlamasını sağlayabilirsiniz. Bu nedenle, üstte ihtiyacınız olan öğenin daha yüksek bir yığınlama sırasına (z-endeksi: 5; konum: göreli; ör. İçin) ve arkadaki öğenin daha düşük bir şeye (varsayılan veya 3 gibi daha düşük bir z-endeksi ve konum: göreli ;).
Umarım bu sana yardımcı olabilir
<!DOCTYPE html>
<html>
<head>
<style>
:root:after {
content: "Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark Watermark ";
position: fixed;
transform: rotate(300deg);
-webkit-transform: rotate(300deg);
color: rgb(187, 182, 182);
top:0;
z-index: -1;
}
</style>
</head>
<body>
<p>hey my name is JHM</p>
</body>
</html>