Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Css 从背景中剪下的透明文本_Css_Svg_Fonts_Css Shapes - Fatal编程技术网

Css 从背景中剪下的透明文本

Css 从背景中剪下的透明文本,css,svg,fonts,css-shapes,Css,Svg,Fonts,Css Shapes,有没有办法用CSS从背景中剪出一个透明的文本效果,如下图所示? 这将是悲哀的失去所有宝贵的搜索引擎优化,因为图像取代文字 我首先想到的是阴影,但我什么都想不出来 图片是网站背景,一个绝对定位的标签,我恐怕现在用CSS是不可能的 最好的办法是简单地使用一个图像(可能是PNG),并在上面放置好的alt/title文本 或者,你可以使用一个SPAN或DIV,将图像作为背景,其中包含你想要用于搜索引擎优化的文本,但文本会在屏幕外缩进。我想你可以实现类似的效果,但我还没有测试过 请参见此示例: (仅限

有没有办法用CSS从背景中剪出一个透明的文本效果,如下图所示?

这将是悲哀的失去所有宝贵的搜索引擎优化,因为图像取代文字

我首先想到的是阴影,但我什么都想不出来


图片是网站背景,一个绝对定位的标签,我恐怕现在用CSS是不可能的

最好的办法是简单地使用一个图像(可能是PNG),并在上面放置好的alt/title文本


或者,你可以使用一个SPAN或DIV,将图像作为背景,其中包含你想要用于搜索引擎优化的文本,但文本会在屏幕外缩进。

我想你可以实现类似的效果,但我还没有测试过

请参见此示例:

(仅限于Webkit,我还不知道如何将黑色背景更改为白色)

这是可能的,但目前为止,仅限于基于Webkit的浏览器(Chrome、Safari、Rockmelt,任何基于Chrome项目的浏览器)

诀窍是在白色元素中有一个与主体具有相同背景的元素,然后使用
-webkit-backgroundclip:text在内部元素上,其基本意思是“不要将背景延伸到文本之外”,并使用透明文本

section
{
    background: url(http://norcaleasygreen.com/wp-content/uploads/2012/11/turf-grass1.jpg);
    width: 100%;
    height: 300px;
}

div
{
    background: rgba(255, 255, 255, 1);
    color: rgba(255, 255, 255, 0);

    width: 60%;
    heighT: 80%;
    margin: 0 auto;
    font-size: 60px;
    text-align: center;
}

p
{
    background: url(http://norcaleasygreen.com/wp-content/uploads/2012/11/turf-grass1.jpg);
    -webkit-background-clip: text;
}
​

使用css3是可能的,但并非所有浏览器都支持它

背景剪辑:文本;您可以使用文本背景,但必须将其与页面背景对齐

正文{
背景:url(http://www.color-hex.com/palettes/26323.png)重复;
利润率:10px;
}
h1{
背景色:#fff;
溢出:隐藏;
显示:内联块;
填充:10px;
字体大小:粗体;
字体系列:arial;
颜色:透明;
字体大小:200px;
}
span{
背景:url(http://www.color-hex.com/palettes/26323.png)-20px-20px重复;
-webkit文本填充颜色:透明;
-webkit背景剪辑:文本;
显示:块;
}

ABCDEFGHIKJ
尽管这在CSS中是可能的,但更好的方法是使用with。与CSS相比,这种方法有一些优势:

  • 更好的浏览器支持:IE10+、chrome、Firefox、safari
  • 这不会影响SEO,因为爬行器可以抓取SVG内容()
代码笔演示:

body,html{height:100%;margin:0;padding:0;}
身体{
背景:url('https://farm9.staticflickr.com/8760/17195790401_94fcf60556_c.jpg');
背景尺寸:封面;
背景附件:固定;
}
svg{宽度:100%;}

SVG
文本掩码

您可以使用myadzel的jQuery插件来跨浏览器实现此效果。目前,还没有跨浏览器的方法来实现这一点,只使用CSS

通过将
class=“background clip”
添加到希望将文本绘制为图像模式的HTML元素中,使用Patternizer,并在附加的
数据模式=“…”
属性中指定图像。请参阅源代码。Patternizer将创建一个带有填充模式文本的SVG图像,并将其置于透明呈现的HTML元素的下方

如果像问题的示例图像一样,文本填充模式应该是背景图像的一部分,延伸到“patternized”元素之外,我会看到两个选项(未测试,首先是我最喜欢的选项):

  • 在SVG中使用掩蔽而不是背景图像。与中一样,使用Patternizer仍将自动生成SVG,并在顶部添加一个不可见的HTML元素,允许文本选择和复制
  • 或使用模式图像的自动对齐。可以使用类似于中的JavaScript代码来完成

您可以使用反转/负片/反转字体,并使用
font-face=“…”
CSS规则应用它。您可能需要调整字母间距,以避免字母之间出现小的白色间隙

如果您不需要特定的字体,它很简单。下载一个讨人喜欢的,比如从这个网站

如果您需要一种特定的字体(比如“Open SAN”),这很困难。您必须将现有字体转换为反转版本。这可以通过Font Creator、FontForge等手动实现,但我们当然需要一个自动化的解决方案。我还没有找到相关说明,但有一些提示:

  • (加上这样做)。首先可以使用ImageMagick命令将字体图示符渲染为高分辨率光栅图像,并将其反转,然后按照上述说明将其转换回TrueType字体

在大多数现代浏览器(ie、edge除外)上工作的一种方法是使用

background: black;
color: white;
mix-blend-mode: multiply;
在你的文本元素中,然后在后面放上你想要的任何背景。乘法基本上将0-255颜色代码映射为0-1,然后将其与后面的任何颜色代码相乘,因此黑色保持黑色,白色与1相乘,并有效地变得透明。

我需要制作与原始文章完全相同的文本,但我不能仅仅通过排列背景来伪造文本,因为元素后面有一些动画。似乎还没有人提出过这个建议,所以我做了以下几点:(尽量让它更容易阅读。)

var el=document.body//父元素。文本在内部居中。
var mainText=“这是第一行”//标题文本。
var subText=“此文本具有淘汰效果”//删除文本。
var fontF=“Roboto,Arial”//要使用的字体。
var-mSize=42//文本大小。
//居中文本显示:
变量tBox=centeredDiv(el),txtMain=mkDiv(tBox,mainText),txtSub=mkDiv(tBox),
ts=tBox.style,stLen=textWidth(subText,fontF,mSize)+5;ts.color=“#fff”;
ts.font=mSize+“pt”+fontF;ts.fontWeight=100;txtSub.style.fontweaght=400;
//生成子对象
var el = document.body; //Parent Element. Text is centered inside.
var mainText = "THIS IS THE FIRST LINE"; //Header Text.
var subText = "THIS TEXT HAS A KNOCKOUT EFFECT"; //Knockout Text.
var fontF = "Roboto, Arial"; //Font to use.
var mSize = 42; //Text size.

//Centered text display:
var tBox = centeredDiv(el), txtMain = mkDiv(tBox, mainText), txtSub = mkDiv(tBox),
ts = tBox.style, stLen = textWidth(subText, fontF, mSize)+5; ts.color = "#fff";
ts.font = mSize+"pt "+fontF; ts.fontWeight = 100; txtSub.style.fontWeight = 400;

//Generate subtext SVG for knockout effect:
txtSub.innerHTML =
"<svg xmlns='http://www.w3.org/2000/svg' width='"+stLen+"px' height='"+(mSize+11)+"px' viewBox='0 0 "+stLen+" "+(mSize+11)+"'>"+
    "<rect x='0' y='0' width='100%' height='100%' fill='#fff' rx='4px' ry='4px' mask='url(#txtSubMask)'></rect>"+
    "<mask id='txtSubMask'>"+
        "<rect x='0' y='0' width='100%' height='100%' fill='#fff'></rect>"+
        "<text x='"+(stLen/2)+"' y='"+(mSize+6)+"' font='"+mSize+"pt "+fontF+"' text-anchor='middle' fill='#000'>"+subText+"</text>"+
    "</mask>"+
"</svg>";

//Relevant Helper Functions:
function centeredDiv(parent) {
    //Container:
    var d = document.createElement('div'), s = d.style;
    s.display = "table"; s.position = "relative"; s.zIndex = 999;
    s.top = s.left = 0; s.width = s.height = "100%";
    //Content Box:
    var k = document.createElement('div'), j = k.style;
    j.display = "table-cell"; j.verticalAlign = "middle";
    j.textAlign = "center"; d.appendChild(k);
    parent.appendChild(d); return k;
}
function mkDiv(parent, tCont) {
    var d = document.createElement('div');
    if(tCont) d.textContent = tCont;
    parent.appendChild(d); return d;
}
function textWidth(text, font, size) {
    var canvas = window.textWidthCanvas || (window.textWidthCanvas = document.createElement("canvas")),
    context = canvas.getContext("2d"); context.font = size+(typeof size=="string"?" ":"pt ")+font;
    return context.measureText(text).width;
}
    .banner-sale-1 .title-box .title-overlay {
      font-weight: 900;
      overflow: hidden;
      margin: 0;
      padding-right: 10%;
      padding-left: 10%;
      text-transform: uppercase;
      color: #080404;
      background-color: rgba(255, 255, 255, .85);

      /* that css is the main think (mix-blend-mode: lighten;)*/
      mix-blend-mode: lighten;

    }