iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > node.js >CSS/CSS3如何实现文本纹理叠加效果
  • 585
分享到

CSS/CSS3如何实现文本纹理叠加效果

2024-04-02 19:04:59 585人浏览 泡泡鱼
摘要

这篇文章主要为大家展示了“CSS/css3如何实现文本纹理叠加效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS/CSS3如何实现文本纹理叠加效果”这篇文

这篇文章主要为大家展示了“CSS/css3如何实现文本纹理叠加效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS/CSS3如何实现文本纹理叠加效果”这篇文章吧。

一、CSS/CSS3实现文本纹理叠加

html和CSS代码如下:

<h3 class="pattern-overlay">
    <span data-text="CSS纹理叠加"></span>
    CSS纹理叠加
</h3>
.pattern-overlay {
    font-size: 60px;
    font-family: 'microsoft yahei';
    background-image: url(./pattern01.jpg); 
    -WEBkit-text-fill-color: transparent;
    -webkit-background-clip: text;
}
.pattern-overlay > span {
    position: absolute;
    background-image: linear-gradient(to bottom, #f00, #f00);
    mix-blend-mode: overlay;
    -webkit-text-fill-color: transparent;
    -webkit-background-clip: text;
}
.pattern-overlay > span::before {
    content: attr(data-text);    
}

就可以实现类似下图的效果(红色渐变和灰色石质纹理叠加效果):

CSS/CSS3如何实现文本纹理叠加效果

您可以狠狠的点击这里:CSS实现文本的纹理叠加效果demo

在demo页面中,我们可以调整渐变图片的起止颜色,或者更换我们的纹理图片,都有实时的渲染效果:

CSS/CSS3如何实现文本纹理叠加效果

实现原理

而在webkit浏览器下,可以通过下面CSS组合实现文本以背景显示效果:

.fill-bg {
    -webkit-text-fill-color: transparent;
    -webkit-background-clip: text;
}

可以用来实现文字渐变,或者类似本站首页文字流光等效果。

CSS/CSS3如何实现文本纹理叠加效果

于是,我们使用两层标签,分明填充渐变背景和纹理背景,然后再使用CSS3混合模式mix-blend-mode:overly对两层标签进行叠加,效果即达成!

兼容性

webkit内核浏览器,Chrome,Safari等都支持。

关于为何不使用background-blend-mode说明

理论上,使用background-blend-mode最多背景图片进行模式混合是最简单的,因为只需要一层表现,理论支持代码如下:

<h3 class="pattern-overlay">CSS纹理叠加</h3>
.pattern-overlay {
    font-size: 60px;
    font-family: 'microsoft yahei';
    background-image: linear-gradient(to bottom, #f00, #f00), url(./pattern01.jpg);
    background-blend-mode: overlay;
    -webkit-text-fill-color: transparent;
    -webkit-background-clip: text;
}

背景渐变和纹理叠加本身是没有任何问题的,效果如下截图:

CSS/CSS3如何实现文本纹理叠加效果

但是当应用background-clip:text声明的时候,混合模式被忽略,于是最终的文本并没有叠加效果。因此才采用两层独立的标签应用mix-blend-mode来叠加的方法。

//zxx: CSS3对混合模式天然支持,可以参见这篇文章:“CSS3混合模式mix-blend-mode/background-blend-mode简介”,其中mix-blend-mode是元素间的混合,background-blend-mode是背景图片之间的混合。

二、使用SVG实现更加兼容的文本纹理叠加效果

CSS3的方法最容易理解上手最快,但是Firefox和IE浏览器都不支持,所以只能在移动端使用,如果我们想兼容PC浏览器,可以试试使用SVG来实现,代码如下:

<svg width="360" height="120">
  <defs>
    <filter id="blend">
     <feImage xlink:href="./pattern01.jpg" result="patternSource" x="0" y="0" width="360" height="120" />            
     <feBlend mode="overlay" in="SourceGraphic" in2="patternSource" />
    </filter>
    <linearGradient id="gradient" x1="0" y1="0" x2="0" y2="1">
        <stop offset="0%"   stop-color="green" />
        <stop offset="100%" stop-color="red" />
    </linearGradient>
    <pattern id="pattern" width="360" height="120" patternUnits="userSpaceOnUse">
        <rect x="0" y="0" width="100%" height="100%" fill="url(#gradient)" filter="url(#blend)"></rect>
    </pattern>
  </defs>
  <text x="0" y="60" font-family="Microsoft Yahei" font-size="60" font-weight="900" fill="url(#pattern)">
    SVG纹理叠加
  </text>
</svg>

红绿渐变叠加石头质感纹理,最终实现的效果如下截图:

CSS/CSS3如何实现文本纹理叠加效果

您可以狠狠地点击这里:SVG实现文本的纹理叠加效果demo

实现原理

SVG中有个和混合模式相关的滤镜元素名为<feBlend>,所以我们可以定义一个<filter>,让引用该<filter>的图形(in="SourceGraphic")和<feImage>这个图片(in2="patternSource")进行overlay混合(mode="overlay")。

SVG中文本除了可以填充颜色外,还可以填充纹理,元素是<pattern>,所以,我们需要一个渐变和纹理素材混合的<pattern>元素,很简单,一个和SVG尺寸一样的矩形<rect>元素,使用渐变填充,应用叠加滤镜,作为<pattern>纹理。

于是,效果达成!

兼容性

Chrome, Safari, Firefox浏览器都支持。

如果在IE浏览器下访问我们的demo页面,会看到纹理并没有叠加,那是因为,IE浏览器下的<feBlend>只支持规范中提到的几种混合模式,包括:nORMalmultiplyscreendarkenlighten。并没有叠加overlay

因此,如果你希望SVG纹理叠加效果IE9+全兼容,可以试试使用正片叠加混合模式-multiply,对于大部分用户而言,是看不出什么差异的。

三、使用canvas实现纹理叠加效果

canvas并没有现成的混合模式api,因此,如果要想实现叠加效果,需要通过算法重新计算方法。关于混合模式的各种算法,实际上都是公开的,搜一搜就能找到。

在本文中,canvas的混合模式效果使用了一个开源js方法,项目地址是:https://GitHub.com/Phrogz/context-blender

JS未压缩状态也就9K不到,各种曾经的混合模式都支持。

于是,要使用canvas实现纹理叠加效果那就容易多了。

下面是实现的效果截图:

CSS/CSS3如何实现文本纹理叠加效果

您可以狠狠地点击这里:canvas实现文本的纹理叠加效果demo

同样的,我们可以修改渐变颜色,修改纹理图片看到其他渲染效果,例如,我们选择本地一张纸张图片作为纹理:

CSS/CSS3如何实现文本纹理叠加效果

实现原理

绘制JS代码如下:

// 先引入context_blender.js,然后&hellip;&hellip; // canvas绘制脚本var canvas = document.querySelector('canvas');
var context = canvas.getContext('2d');
var width = canvas.width, height = canvas.height;
context.textBaseline = 'middle';
context.font = 'bold 60px "Microsoft Yahei"';// 绘制方法var draw = function () {    
    context.clearRect(0, 0, width, height);// 渐变和纹理var gradient, pattern;// 创建材质canvasvar canvasPattern = document.createElement('canvas');
    var contextUnder = canvasPattern.getContext('2d');
    canvasPattern.width = width;
    canvasPattern.height = height;// 创建渐变canvasvar canvasGradient = document.createElement('canvas');
    var contextOver = canvasGradient.getContext('2d');
    canvasGradient.width = width;
    canvasGradient.height = height;// 绘制渐变对象gradient = contextOver.createLinearGradient(0, 0, 0, height);
    gradient.addColorStop(0, red);
    gradient.addColorStop(1, red);// 纹理对象,img指纹理图片对象pattern = contextUnder.createPattern(img, 'no-repeat');
    contextUnder.fillStyle = pattern;
    contextUnder.fillRect(0, 0, width, height);// 应用渐变contextOver.fillStyle = gradient;
    contextOver.fillRect(0, 0, width, height);// 叠加canvascontextOver.blendOnto(contextUnder, 'overlay');// 给当前context创建patternpattern = context.createPattern(canvasPattern, 'no-repeat');    // 绘制文本context.fillStyle = pattern;
    context.fillText('画布纹理叠加', 0, 60);
};

原理描述:
临时创建一个canvas绘制一个渐变,临时创建一个canvas使用纹理图片填充,两个canvas叠加混合得到新的canvas,然后页面上那个canvas上的文字就把这个叠加混合后canvas作为纹理进行填充,效果即达成。

兼容性

IE9+,Chrome, Safari, Firefox浏览器都支持。

以上是“CSS/CSS3如何实现文本纹理叠加效果”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网node.js频道!

--结束END--

本文标题: CSS/CSS3如何实现文本纹理叠加效果

本文链接: https://www.lsjlt.com/news/89554.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • CSS/CSS3如何实现文本纹理叠加效果
    这篇文章主要为大家展示了“CSS/CSS3如何实现文本纹理叠加效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS/CSS3如何实现文本纹理叠加效果”这篇文...
    99+
    2024-04-02
  • CSS3实现各种纹理背景效果
    <!DOCTYPE html><head><title>CSS3实现各种纹理背景效果_网页代码站(www.webdm.cn)</title><style>body{font-fam...
    99+
    2023-01-31
    纹理 背景 效果
  • CSS如何实现照片堆叠效果
    这篇文章主要介绍了CSS如何实现照片堆叠效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。   步骤   1.初始index.html ...
    99+
    2024-04-02
  • css如何实现照片有如层叠效果
    这篇文章主要介绍了css如何实现照片有如层叠效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。如下所示:显示上面照片效果css<!DO...
    99+
    2024-04-02
  • css3如实现边框、背景、文本效果
    这篇文章主要介绍css3如实现边框、背景、文本效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、边框box-shadowbox-shadow: h-shadow v-shadow b...
    99+
    2023-06-08
  • HTML+CSS+JS如何实现堆叠轮播效果
    这篇“HTML+CSS+JS如何实现堆叠轮播效果”文章,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要参考一下,对于“HTML+CSS+JS如何实现堆叠轮播效果”,小编整理了以下知识点,请大家跟着小编的步伐一步一步的...
    99+
    2023-06-08
  • 如何使用CSS3为文本和元素实现添加阴影效果
    小编给大家分享一下如何使用CSS3为文本和元素实现添加阴影效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!使用CSS3,你可以...
    99+
    2024-04-02
  • Android如何实现水波纹效果
    这篇文章主要为大家展示了“Android如何实现水波纹效果”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Android如何实现水波纹效果”这篇文章吧。效果图attrs.xml自定义属性 ...
    99+
    2023-06-29
  • Android TextView实现多文本折叠、展开效果
    背景在开发过程中,当我们的需求中包含说说或者评论等内容的展示时,我们都会考虑当内容太多时该如何显示。当内容的字数太多,如果全部展示出来可能会影响体验效果,但是又不能只截取一部分内容进行展示,此时就需要考虑使用多行显示折叠的效果来实现。效果图...
    99+
    2023-05-31
    android textview roi
  • CSS3中怎么实现文本3D效果
    CSS3中怎么实现文本3D效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。代码如下:<!DOCTYPE ht...
    99+
    2024-04-02
  • HTML+CSS如何实现文本效果、渐变效果、边框图片效果
    这篇文章给大家分享的是有关HTML+CSS如何实现文本效果、渐变效果、边框图片效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。文本阴影文本裁剪文本描边文本填充线性渐变径向渐变边...
    99+
    2024-04-02
  • CSS如何实现图片鼠标悬停折叠效果
    这篇文章给大家分享的是有关CSS如何实现图片鼠标悬停折叠效果的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。CSS 实现 图片鼠标悬停折叠效果1. 实现要点 折叠是由多个块级元素来完成的;图片是以背景图片...
    99+
    2023-06-08
  • css3如何实现animation效果
    小编给大家分享一下css3如何实现animation效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!   &nbs...
    99+
    2024-04-02
  • CSS3如何实现文字波浪线效果
    这篇文章主要介绍CSS3如何实现文字波浪线效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实现方法语法:linear-gradient(direction, color-stop ...
    99+
    2024-04-02
  • jquery如何实现折叠菜单效果
    这篇文章将为大家详细讲解有关jquery如何实现折叠菜单效果,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。这是一个简单的折叠框效果实现,核心内容jQ库里的slideTog...
    99+
    2024-04-02
  • android项目中如何实现给RecyclerView加上折叠效果
    android项目中如何实现给RecyclerView加上折叠效果?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。效果总结一下这个列表的特点,就是以下三点: 重...
    99+
    2023-05-31
    recyclerview android recycle
  • 怎么使用纯CSS实现彩虹条纹文字的效果
    小编给大家分享一下怎么使用纯CSS实现彩虹条纹文字的效果,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!   代码解读   定义dom,容器中包含文本,并且包含4个<span>...
    99+
    2024-04-02
  • CSS3如何实现圆角效果
    这篇文章主要介绍了CSS3如何实现圆角效果,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。 CSS3 圆角使用 CSS3 borde...
    99+
    2024-04-02
  • CSS3如何实现倒影效果
    这篇文章主要介绍CSS3如何实现倒影效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图如下:示例图片在CSS3之前,想要实现示例图片这样的一个倒影效果一般只能通过处理图片的方式...
    99+
    2024-04-02
  • css3如何实现过滤效果
    小编给大家分享一下css3如何实现过滤效果,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!上面的图片就是css3新特性的滤镜效果,...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作