纯css实现gif动图生成字画符

 4706

纯css实现gif动图生成字画符,纯css实现,核心的属性是 background-clip 和 text-fill-color ,由于这俩属性目前并没有被纳入标准,所以需要加上 -webkit-前缀。当初发现这个属性是真的像发现了个宝藏,通过它们的组合可以实现非常多有意思的效果。前者用于对背景裁剪,后者用于和背景颜色叠加。

于是就有了下图的效果(背景是一张动图,然后使用文字对背景进行裁剪。字体透明填充,与背景叠加)


纯css实现gif动图生成字画符


html结构:

  1. <!doctype html>
  2. <html>
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  6.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.   <title>css ascii srt</title>
  8.   <style>
  9.     /* 样式 */
  10.   </style>
  11. </head>
  12. <body>
  13. <p>
  14.   色欲一事,乃舉世人之通病不特中下之人,被色所迷。即上根之人,若不戰兢自持,乾惕在念,則亦難免不被所迷。試觀古今來多少出格豪傑,固足為聖為賢。
  15.   祗由打不破此關,反為下愚不肖。兼復永墮惡道者,蓋難勝數。楞嚴經云,若諸世界六道眾生,其心不淫,則不隨其生死相續。汝修三昧,本出塵勞。淫心不除,塵不可出。
  16.   學道之人,本為出離生死。苟不痛除此病,則生死斷難出離,即念佛門,雖則帶業往生。然若淫習固結,則便與佛隔,難於感應道交矣。欲絕此禍,莫如見一切女人,皆作親想,怨想,不淨想。親想者。
  17.   見老者作母想淘宝特卖眼线润肤乳排行榜好左旋肉碱哪个牌子好去黑头化妆水哪个牌子好有效的哪个保健补品好,長者作姊想,少者作妹想,幼者作女想,欲心縱盛,斷不敢於母姊妹女邊起不正念。
  18.   視一切女人,總是吾之毋姊妹女。則理制於欲,欲無由發矣。怨想者,凡見美女,便起愛心。由此愛心,便墮惡道。長劫受苦,不能出離。如是則所謂美麗嬌媚者,比劫賊虎狼、毒蛇惡蠍,砒霜鴆毒,烈百千倍。
  19.   於此極大怨家,尚猶戀戀著念,豈非迷中倍人。不淨者,美貌動人,只外面一層薄皮耳。若揭去此皮,則不忍見矣。骨肉膿血,屎尿毛髮,淋漓狼藉,了無一物可令人愛。但以薄皮所蒙。則妄生愛戀。
  20.   華瓶盛糞,人不把玩。今此美人之薄皮,不異華瓶。皮內所容,比糞更穢。何得愛其外皮,而忘其裏之種種穢物,漫起妄想乎哉。苟不戰兢乾惕,痛除此習。則唯見其姿質美麗,致愛箭入骨,不能自拔。
  21.   平素如此,致其沒後不入女腹,不可得也。入人女腹猶可。入畜女腹,則將奈何。試一思及,心神驚怖。
  22.   然欲于見境不染心,須于未見境時,常作上三種想,則見境自可不隨境轉。否則縱不見境,意地仍復纏綿,終被淫欲習氣所縛。固宜認真滌除惡業習氣,方可有自由分。
  23. </p>
  24. <script>
  25.   // 脚本
  26. </script>
  27. </body>
  28. </html>

样式:

  1. * {
  2.   margin: 0;
  3.   padding: 0;
  4. }
  5. html,
  6. body {
  7.   width: 100%;
  8.   height: 100%;
  9. }
  10. body {
  11.   position: relative;
  12.   overflow: hidden;
  13. }
  14. {
  15.   font-weight: 600;
  16.   position: absolute;
  17.   width: 100%;
  18.   overflow: hidden;
  19.   left: 50%;
  20.   top: 50%;
  21.   transform: scale(0.9);
  22.   background-repeat: no-repeat;
  23.   background-position: center;
  24.   background-size: contain;
  25.   -webkit-background-clip: text;
  26.   -webkit-text-fill-color: transparent;
  27.   transform-origin: 50% 50%;
  28.   /*js生成*/
  29.   /*font-size: 12px;*/
  30.   /*line-height: 12px;*/
  31.   /*width: 400px;*/
  32.   /*height: 400px;*/
  33.   /*margin-left:-200px;*/
  34.   /*margin-top:-200px;*/
  35.   /*background-image: url(./img/test.jpg);*/
  36. }

脚本:

  1. const $p = document.getElementsByTagName('p')[0]
  2. // 字体大小
  3. const fontSize = 12
  4. // 背景图片
  5. const imgUrl = './mememe.gif'
  6. $p.style.cssText = `font-size:${fontSize}px;line-height:${fontSize}px;`
  7. const text = $p.innerHTML.replace(/(\s+)/g, '')
  8. const textLength = text.length
  9. const img = new Image()
  10. img.src = imgUrl
  11. img.complete ? onImgLoaded() : (img.onload = onImgLoaded)
  12. function onImgLoaded () {
  13.   const imgRatio = img.width / img.height
  14.   let imgWidth = window.innerWidth
  15.   let imgHeight = imgWidth / imgRatio
  16.   if (imgHeight > window.innerHeight) {
  17.     imgHeight = window.innerHeight
  18.     imgWidth = imgHeight * imgRatio
  19.   }
  20.   const needTextLength = (imgWidth / fontSize) * (imgHeight / fontSize)
  21.   if (needTextLength > textLength) {
  22.     $p.innerHTML = new Array(Math.floor(needTextLength / textLength) + 1).fill(text).join('')
  23.   }
  24.    $p.style.cssText += `margin-left:${-imgWidth/2}px;margin-top:${-imgHeight/2}px;width:${imgWidth}px;height:${imgHeight}px;background-image:url(${imgUrl});`
  25. }

完整代码:

  1. <!doctype html>
  2. <html>
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  6.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
  7.   <title>ascii art</title>
  8.   <style>
  9.     * {
  10.       margin: 0;
  11.       padding: 0;
  12.     }
  13.     html,
  14.     body {
  15.       width: 100%;
  16.       height: 100%;
  17.     }
  18.     body {
  19.       position: relative;
  20.       overflow: hidden;
  21.     }
  22.     p {
  23.       font-weight: 600;
  24.       position: absolute;
  25.       width: 100%;
  26.       overflow: hidden;
  27.       left: 50%;
  28.       top: 50%;
  29.       transform: scale(0.9);
  30.       background-repeat: no-repeat;
  31.       background-position: center;
  32.       background-size: contain;
  33.       -webkit-background-clip: text;
  34.       -webkit-text-fill-color: transparent;
  35.       transform-origin: 50% 50%;
  36.       /*js生成*/
  37.       /*font-size: 12px;*/
  38.       /*line-height: 12px;*/
  39.       /*width: 400px;*/
  40.       /*height: 400px;*/
  41.       /*background-image: url(./img/test.jpg);*/
  42.     }
  43.   </style>
  44. </head>
  45. <body>
  46. <p>
  47.   色欲一事,乃舉世人之通病不特中下之人,被色所迷。即上根之人,若不戰兢自持,乾惕在念,則亦難免不被所迷。試觀古今來多少出格豪傑,固足為聖為賢。
  48.   祗由打不破此關,反為下愚不肖。兼復永墮惡道者,蓋難勝數。楞嚴經云,若諸世界六道眾生,其心不淫,則不隨其生死相續。汝修三昧,本出塵勞。淫心不除,塵不可出。
  49.   學道之人,本為出離生死。苟不痛除此病,則生死斷難出離,即念佛門,雖則帶業往生。然若淫習固結,則便與佛隔,難於感應道交矣。欲絕此禍,莫如見一切女人,皆作親想,怨想,不淨想。親想者。
  50.   見老者作母想淘宝特卖眼线润肤乳排行榜好左旋肉碱哪个牌子好去黑头化妆水哪个牌子好有效的哪个保健补品好,長者作姊想,少者作妹想,幼者作女想,欲心縱盛,斷不敢於母姊妹女邊起不正念。
  51.   視一切女人,總是吾之毋姊妹女。則理制於欲,欲無由發矣。怨想者,凡見美女,便起愛心。由此愛心,便墮惡道。長劫受苦,不能出離。如是則所謂美麗嬌媚者,比劫賊虎狼、毒蛇惡蠍,砒霜鴆毒,烈百千倍。
  52.   於此極大怨家,尚猶戀戀著念,豈非迷中倍人。不淨者,美貌動人,只外面一層薄皮耳。若揭去此皮,則不忍見矣。骨肉膿血,屎尿毛髮,淋漓狼藉,了無一物可令人愛。但以薄皮所蒙。則妄生愛戀。
  53.   華瓶盛糞,人不把玩。今此美人之薄皮,不異華瓶。皮內所容,比糞更穢。何得愛其外皮,而忘其裏之種種穢物,漫起妄想乎哉。苟不戰兢乾惕,痛除此習。則唯見其姿質美麗,致愛箭入骨,不能自拔。
  54.   平素如此,致其沒後不入女腹,不可得也。入人女腹猶可。入畜女腹,則將奈何。試一思及,心神驚怖。
  55.   然欲于見境不染心,須于未見境時,常作上三種想,則見境自可不隨境轉。否則縱不見境,意地仍復纏綿,終被淫欲習氣所縛。固宜認真滌除惡業習氣,方可有自由分。
  56. </p>
  57. <script>
  58.   const $p = document.getElementsByTagName('p')[0]
  59.   // 字体大小
  60.   const fontSize = 12
  61.   // 背景图片
  62.   const imgUrl = './mememe.gif'
  63.   $p.style.cssText = `font-size:${fontSize}px;line-height:${fontSize}px;`
  64.   const text = $p.innerHTML.replace(/(\s+)/g, '')
  65.   const textLength = text.length
  66.   const img = new Image()
  67.   img.src = imgUrl
  68.   img.complete ? onImgLoaded() : (img.onload = onImgLoaded)
  69.   function onImgLoaded () {
  70.     const imgRatio = img.width / img.height
  71.     let imgWidth = window.innerWidth
  72.     let imgHeight = imgWidth / imgRatio
  73.     if (imgHeight > window.innerHeight) {
  74.       imgHeight = window.innerHeight
  75.       imgWidth = imgHeight * imgRatio
  76.     }
  77.     const needTextLength = (imgWidth / fontSize) * (imgHeight / fontSize)
  78.     if (needTextLength > textLength) {
  79.       $p.innerHTML = new Array(Math.floor(needTextLength / textLength) + 1).fill(text).join('')
  80.     }
  81.     $p.style.cssText += `margin-left:${-imgWidth / 2}px;margin-top:${-imgHeight / 2}px;width:${imgWidth}px;height:${imgHeight}px;background-image:url(${imgUrl});`
  82.   }
  83. </script>
  84. </body>
  85. </html>

在线演示:

演示一   演示二


转自:灵机一动



本文网址:https://www.zztuku.com/index.php/detail-7950.html
站长图库 - 纯css实现gif动图生成字画符
申明:如有侵犯,请 联系我们 删除。

评论(0)条

您还没有登录,请 登录 后发表评论!

提示:请勿发布广告垃圾评论,否则封号处理!!

    编辑推荐