css揭秘与css权威指南(社区精选不容错过的9个冷门css属性)
css揭秘与css权威指南(社区精选不容错过的9个冷门css属性)
2024-11-22 10:17:41  作者:你没来过  网址:https://m.xinb2b.cn/life/frv426150.html
背景、

    可能我们有时候潜意识里认为, 当前实际开发中css属性已经足够用了, 但是前段时间突然想到:"会不会我们只是思维被限制在了常用的css属性中, 从而丧失了创造力", 就像发明 车 之前大多数人会认为 骑马 已经足够快可以满足自己的需求了, 所以我专门整理了一下自己的学习笔记并且专门去学习了一些冷门的css属性, 果然收获满满, 所以今天也要在这里把这些脑洞大开的属性较少给你, 准备好一起来感受css的魅力吧。

一、开胃菜 css画背景图: paint

    我们开发中使用的背景图大部分是(png, webp等)图片、svg矢量图、canvas画图, 但是其实我们也可以选择css直接画图, 那css这种甚至都"称不上"编程语言的家伙怎么绘制复杂的图片那?


1: 为元素赋予css属性

div class="box"></div>

<style> .box { width: 180px; height: 180px; border: 1px solid; background: paint(xxxx); // 主角在此 }

    paint(xxxx); 这里填入的是绘图的"方法名", 往下看就知道啥是"方法名"了, 之所以我这里写"xxxx"非常随意, 是因为我想表达这个名字随便起。

2: 引入js文件

<script> if (window.CSS) { // 因为加载文件 需要启动server CSS.paintWorklet.addModule("./paint-grid.js"); } </script>

    用法有点诡异, 但核心其实是引入了一个js文件。

3: js文件内定义导出的方法

    paint-grid.js文件:

registerPaint( "xxxx", // 这就是: 方法名 class { paint(context, size) { context.fillStyle = 'red'; context.fillRect(10, 10, 39, 39); } });

    paint方法里面就类似canvas了, 可以正常使用部分js代码。

    当前的效果展示:


4: 可多导出

    当看到需要指定绘制的"方法名"而不是"文件名", 我就知道他一定可以导出多个喽:

registerPaint( "xxxx1", class { paint(context, size) { context.fillStyle = 'red'; context.fillRect(10, 10, 39, 39); } });registerPaint( "xxxx2", class { paint(context, size) { context.fillStyle = 'green'; context.fillRect(10, 10, 39, 39); } });

两个元素的样式设置

<style> .box { background: paint(xxxx1); } .box2 { margin-top: 20px; background: paint(xxxx2); }


5: 变量赋予背景灵动

    我们时长遇到需要绘制"非固定大小背影", 此时在paint-grid.js中window是获取不到的, 但是我们可以使用css变量:

// 在全局定义方便js修改 :root { --bg-size: 60; }

    paint-grid.js文件

registerPaint( "xxxx1", class { static get inputProperties() { return ["--bg-size"]; } paint(context, size, properties) { var bgSize = properties.get('--bg-size'); context.fillStyle = "red"; context.fillRect(10, 10, bgSize, bgSize); } });

    inputProperties定义了需要获取哪些属性, paint的第三个参数可以接收这些属性, 这样瞬间就感觉这个属性还有点用啦。


6: 注意事项不能在js文件的绘制方法里面写alert, 会导致报错阻断绘制:要注意维护 paint-grid.js文件与css文件的相关性, 因为大家写代码会下意识的不会认为js方法被css文件里的属性所使用, 这就导致可能后续无删除或者是不敢删除等问题。适合处理简单的图形, 如果复杂度高了或者还需借助其他"库"的情况, 则不建议使用。二、字体三连 (镂空、渐变、背景)1: 镂空字不算罕见

p { font-size: 150px; color: white; -webkit-text-stroke: 6px red; }


2: 渐变色文字

p { font-size: 150px; color: white; -webkit-text-stroke: 6px red; background-color: rosybrown; background-image: -webkit-linear-gradient(top, red, #fd8403, yellow); -webkit-background-clip: text; color: transparent; }

<p> 高 <br> 低 </p>


3: 文字背景

   我们把"白金之星"(jojo的奇妙冒险中的'人物')的图片作为文字的背景:


div { font-size: 150px; background: url(../imgs/jojo.webp) no-repeat; background-size: 100%; background-origin: border-box; -webkit-background-clip: text; color: transparent; }


    这里的关键点是-webkit-background-clip: text, 意思是将dom内文字以外的区域裁剪掉, 所以就剩文字区域了, 然后文字再设置成透明的。

三、他来了他来了, 他带着炫酷的过场动画走来了

    先看一下咱们用css字体属性做的动动画效果:


    倒计时骨王登场:


    这里的思路就是利用文字的背景图属性, 但是难点是如何让文字变大。

1: 难点与坑点

    文字变大有什么难的? 你可能会说这些so简单, 我们设置文字所在的span标签position: absolute;定位在父级中间不就OK了? 但是如果这样设置就会导致-webkit-background-clip: text;失效, 也就是文本脱离了文档流。

    有同学有会想到 transform:scale(1.5); 来动态控制文字的变大, 但是transform依然会使-webkit-background-clip: text;失效。

    所以我想到的是在div中设置flex让文字上下左右居中, 然后调大font-size属性。

    还有一个问题就是背景色问题, 因为设置了背景图的同时没法设置文字外层的背景色。

2: 实现思路

    首先总共需要三层结构, 第一层wrap负责黑色背景色以及overflow: hidden;来截断我们的文字变大, 第二层box负责文字的居中, 并且设置font-size属性让内部元素继承, 第三层span标签负责文字①②③的存放, 因为要控制这些文字的显隐所以需要dom标签包裹。

3: 实现代码

    代码有些粗鄙没有润色

<!DOCTYPE html><html lang="en"> <head> <style> #wrap { background-color: black; width: 500px; height: 500px; margin: 0 auto; overflow: hidden; } .box0 { background: url(../imgs/jojo.webp) no-repeat; } .box1 { background: url(../imgs/一起干饭.jpeg) no-repeat; } .box2 { background: url(../imgs/gat.webp) no-repeat; } #box { width: 500px; height: 500px; font-size: 150px; margin: 0 auto; background-size: 500px 500px; background-position: center; -webkit-background-clip: text; -webkit-text-fill-color: rgba(0, 0, 0, 0.2); display: flex; justify-content: center; align-items: center; } .text { display: none; } </style> </head> <body> <div id="wrap"> <div id="box"> <span class="text">①</span> <span class="text">②</span> <span class="text">③</span> </div> </div> <script> const oBox = document.getElementById("box"); const textArr = document.getElementsByClassName('text') let i = 0; let n = 800; setInterval(()=>{ oBox.style.fontSize = n 'px'; n =3 if(n > 800){ n = 10; textArr[1].style.display = 'none' textArr[2].style.display = 'none' textArr[0].style.display = 'none' textArr[i].style.display = 'block' oBox.classList.remove('box1') oBox.classList.remove('box2') oBox.classList.remove('box3') oBox.classList.add(`box${i}`) i if(i > 2){ i = 0 } } },5) </script> </body></html>

    把文案改成 "◤ ◢ ✿" 就会出现第一个动图的效果啦!

四、引号: quotes

    所谓引号就相当于给书名加上'书名号', 给语言加上'冒号双引号', 当然他还有一些神奇玩法。


1: 基本使用

<div class="box">jojo的奇妙冒险</div>

<style> .box { quotes: "《" "》"; } .box::before { content: open-quote; } .box:after { content: close-quote; } </style>

效果图:


    这里要注意的是如果没写content: open-quote;会导致前后'书名号'都消失, 但是唯独没写content: close-quote;则会保留展示"《"。

2: 看似鸡肋?

    当前这个基础写法也太鸡肋了, 不就是给"《"起了个别名叫open-quote吗? 并且关键是占用了我的before与after, 感觉画蛇添足, 比如我可以用如下的方法进行替换:

:root { --open: "《"; --close: "》"; } div::before { content: var(--open); } div::after { content: var(--close); }

<div class="box">jojo的奇妙冒险</div>

3: 套娃高手 quotes 雄起

   其实quotes的看家本领是它可以接受n个参数!

.box { quotes: "--- start" "---- end" "《" "》"; } .box::before { content: open-quote; } .box:after { content: close-quote; }

<div class="box"> <div class="box">jojo的奇妙冒险</div> <div class="box">Overlord</div> <div class="box">艾尔登法环</div> </div>


   神奇的事情出现了, 当出现嵌套结构的时候, 内部的元素会使用第三个与第四个参数作为"引号", 套娃事件出现啦:

.box { quotes: "--- start" "---- end" "(" ")" "《" "》"; } .box::before { content: open-quote; } .box:after { content: close-quote; }

<div class="box"> <div class="box"> <span class="box">jojo的奇妙冒险</span> </div> <div class="box"> <span class="box">Overlord</span> </div> <div class="box"> <span class="box">艾尔登法环</span> </div></div>


    说实话这个套娃能力还挺厉害的, 并且我们可以讲 close-quote属性置空, 我想到的就是列表:

.box { quotes: "--- start" "---- end" "1: " "" "-- 2:" "" "---- 3: " "" "------ 4: " ""; } .box::before { content: open-quote; } .box:after { content: close-quote; }

<div class="box"> <div class="box"> 第一: <div class="box"> 第二: <div class="box">第三:</div> </div> <div class="box"> 第二: <div class="box"> 第三: <div class="box">第四:</div> </div> </div> </div> <div class="box"> 第一: <div class="box">第二:</div> </div> </div>


   要注意不写close-quote会让css找不到在哪里结束, 所以最好写上并给空值。

五、还原大师: all

CSS all 简写属性 将除了 unicode-bidi 与 direction 之外的所有属性重设至其初始值,或继承值。

   这是一个比较强硬的属性, 可以把几乎所有css属性进行重置:

   我们先设置一下基础的环境

.wrap { font-size: 30px; font-weight: 900; } .box { width: 100px; height: 100px; border: 1px solid; background-color: red; color: white; } .box1 { all: initial; } .box2 { all: inherit; } .box3 { all: revert; }

<body> <div class="wrap"> <div class="box">你好</div> <div class="box box1">你好: initial</div> <div class="box box2">你好: inherit</div> <div class="box box3">你好: revert</div> </div> </body>


1: initial : 还原为初始值

   顾名思义这里是将 div身上的所有属性都重置了, 不管是"背景颜色"还是"字体颜色", 甚至宽高, 所以这里属于是完全初始化了。

   但是有个大坑, 他会把div原本的display: block改变成display: inline, 也就是说all: initial;将所有属性置为空了, 而不会根据标签属性进行筛选, 所以这个属性有点太绝对了要小心使用。

2: inherit: 集成值保留

   依然是顾名思义, 将所有属性设置为 "继承父级", 并且还原自身的属性, 比如宽高都没有了但是继承了字体大小与字体粗细。

   不是所有css属性的默认值都是'继承', 比如说position的默认值就不是集成, 但是position可以设置为position: inherit;, 这就埋下了隐患请看下一条属性。

3: revert: 还原

   虽然看起来效果与inherit几乎一样, 但是实质上有大区别, 比如如果此时wrap父元素设置position: absolute;, 那么设置了all: inherit的元素为position: absolute;, 设置了all:revert的元素是position: static, 也就是说目标元素单纯的还原成最开始的样式, 剔除掉了后期设置的属性, 但保留一些默认的继承属性, 这个属性虽然兼容性超差但最牛!

4: all的优先级

.box{ all: revert; background-color: red;}

    这里的背景色是可以设置成功的, 所以all应该算一锤子买卖, 只把设置all属性之前的样式重置。

// 父级 .box { background-color: red !important; } .box1 { all: revert; }

    上面是不生效的, 因为all只能重置优先级不如自己选择器的属性, 所以需要all: revert!important;。

六、目标元素样式:target

    这个属性让页面的url参数与dom元素互动起来

1: 跳转选中

    比如当前url是https://www.xxxxxxxxxxx.com/#target_id则:

:target { background-color: red; font-size: 200px; }

<div id="target_id"> 你好</div>


2: 跳转后动画

    我想到的是每次选中元素后让元素有个动画效果, 实在太简单了就不演示了, 说一下这个属性的鸡肋点吧, 比如无法同时传递多个id, 或者传递class, 并且他让css属性与dom结构之间绑定关系变弱了代码不方便维护与阅读。

七、输入框的placeholder样式设置: placeholder-shown

    可以设置当input组件中展示placeholder时的样式:

input:placeholder-shown { background-color: lightblue; } input { width: 300px; height: 60px; }

<input placeholder="展示我时为蓝色" />


输入内容则还原


八、换行展示的艺术: hyphens

    当英文单词必须折行时我们是否需要一个'连字符':

<div class="box"> The auto setting's behavior depends on the language being properly tagged so that the appropriate hyphenation rules can be selected. </div>

.box { border: 1px solid black; width: 200px; height: 100px; }


    主角暴风登场

.box { border: 1px solid black; width: 200px; height: 100px; hyphens: auto; }


    比较可惜的是无法自由定义'连字符'的样式, 否则一定有点有趣。

九、滚动的优质体验: scroll-snap-type


    定义一个滚动时的"临时停顿点", 这个问题直接看gif动画比较直接:


    简单来看就是每次惯性滑动都会停留在特定元素所在位置, 有点像滚动的'锚点':

<!DOCTYPE html><html> <head> <style> .box { width: 200px; height: 150px; border: 1px solid; border-left: 5px solid black; border-right: 5px solid black; margin: 40px; overflow: auto; scroll-snap-type: y mandatory; } .item { border-top: 1px solid red; height: 150px; scroll-snap-align: start none; } </style> </head> <body> <div class="box"> <div class="item">11111</div> <div class="item">22222</div> <div class="item">33333</div> <div class="item">44444</div> <div class="item">55555</div> <div class="item">66666</div> </div> </body></html>

     scroll-snap-type: y mandatory;设置了y轴滚动时尽量停留在'元素点位'上, scroll-snap-align: start none;目标元素自身的滚动起始方向用来对齐, 也就是告诉浏览器滚动后要停留在子元素的哪里。

     在子元素身上设置scroll-margin-top: 20px 可以设置一定的检测距离, 并附加回弹效果:


end

     这次神奇的css之旅就是这样, 希望与你一起进步。

  • 六月份去三清山合适吗(一定要来三清山)
  • 2024-11-22一定要来三清山/九月你好/9月,向往的收获季节,来了!九月,迈过夏日的炎热,进入渐凉的天气秋,就要开始向我们敞开怀抱一场丰富多彩的美,即将上演含羞草摄《佛光巨蟒》英子lcy摄九月,一定要来三清山进入九月,三清山的一。
  • 东非大裂谷形成的原因(东非大裂谷的地理位置)
  • 2024-11-22东非大裂谷的地理位置板块构造学说是解释地表宏观地形的主要学说,该学说的主要观点包括全球的岩石圈可以分为六大板块,分别是亚欧板块、非洲板块、印度洋板块、太平洋板块、美洲板块和南极洲板块,板块内部相对稳定,而板块与板块之间的。
  • 加油站离职申请书范文(加油站员工辞职报告模板)
  • 2024-11-22加油站员工辞职报告模板尊敬的领导:你们好!我很遗憾自己在这个时候向公司提出辞职来到公司差不多快一年半了,很感谢各位领导的栽培和照顾,是你们给了我一个又一个很好的学习机会,让我在踏进社会后第一次有了归属的感觉站长和经理一直对。
  • 笑傲江湖降龙十八掌绝学展示(他是王重阳传人)
  • 2024-11-22他是王重阳传人在《笑傲江湖》中,武林之中高手众多,但是能与东方不败实力相当,少林寺的方丈大师十分敬重,乃至见到就要跪下磕头的高手恐怕又少之又少了大家都知道,东方不败实力很强,基本上来说,武林之中鲜有敌手,就算是老谋。
  • 英语名词所有格用什么提问(英语中名词所有格用法全解)
  • 2024-11-22英语中名词所有格用法全解名词所有格用来表示人与物或物与物之间的所属关系名词所有格的构成方式可以概括为三种:’s形式的所有格、of短语构成的所有格和双重所有格1.’s形式的所有格(1)大多数表示有生命的单数可数名词,在其后加’。
  • 第三者责任险涨到300万了吗(第三者责任险保300万有必要吗)
  • 2024-11-22第三者责任险保300万有必要吗想当年,考虑到农民收入低,一年辛苦到头不到一万元,一跳一撞如果获赔可能就是几十万,怕有人铤而走险(自杀),加上经济社会等其他因素,几十年来我国人身损害赔偿案件一直实行双标,城镇居民和农村居民同命不同价。
  • 清明孕妇禁忌(清明节孕妇可以出门吗)
  • 2024-11-22清明节孕妇可以出门吗在日常生活中,清明节是我国很特别的一个传统节日,很多地方都会有各种各样的风俗习惯在清明节的时候,孕妇会有很多的禁忌那么孕妇清明节能出门吗?一般情况下,孕妇在清明节的时候是可以出门的,不会对身体产生不良。
  • 安吉小鱼儿个性差异(安吉小鱼儿的日常太逗)
  • 2024-11-22安吉小鱼儿的日常太逗安吉和小鱼儿大家都很熟悉,作为沙溢和胡可的孩子,可是备受喜爱的参加了《爸爸去哪儿》后的安吉,圈了不少的粉,还被广大网友直呼好帅!在节目里,他用一口东北话怼爸爸沙溢的情节让人啼笑皆非节目结束后,他因为在。
  • 处女座属于什么星象?12月份处女座的重要星象分析来咯
  • 2024-11-22处女座属于什么星象?12月份处女座的重要星象分析来咯附:2020年,十二星座会有哪些好事发生?(上)白羊座-垄断恋爱市场2020年的白羊,完美的脚步一旦迈开就刹不住车!今天永远比昨天美那么一点点,勾得大伙心痒痒,堪称十二星座的一号芳心纵火犯!金牛座-实。
  • dota2 ti10 第四天(DOTA2反复横跳V社将Ti10小本子边路商店移除)
  • 2024-11-22DOTA2反复横跳V社将Ti10小本子边路商店移除DOTA2迎来了一次小更新,V社将Ti10勇士令状边路商店系统移除,将Ti9的代币预测系统与不朽珍藏轮回系统重新回归此次如此更新的原由大概还是之前玩家们提出的今年本子等级与不朽获得都变得相较之前困难许。
  • 冰雨叹红楼史湘云(西岭雪西望红楼之五)
  • 2024-11-22西岭雪西望红楼之五1.湘云会嫁给宝玉吗近年来,越来越多的人赞成宝湘联姻说综合其观点,其推理大致是这样的:在八十回后,林黛玉含恨而死,于是贾宝玉娶了薛宝钗,后来看破红尘,悬崖撒手——这本是脂批透露的情节,然而红学家们在此。