前端——正儿八经的CSS常规样式及常识梳理技巧向(五)

编程入门 行业动态 更新时间:2024-10-25 00:30:08

前端——正儿八经的CSS常规<a href=https://www.elefans.com/category/jswz/34/1771146.html style=样式及常识梳理技巧向(五)"/>

前端——正儿八经的CSS常规样式及常识梳理技巧向(五)

写在开头:关于CSS的知识深似海,张鑫旭老师研究了十年时间,如今仍钻研其中,足可以说明其里面海量的知识点及独特的魅力。本人每每遇到一些难以透彻理解的CSS问题,便会去张鑫旭老师的博客寻找想要的答案。对于这门有点“小坑”却魅力十足的语言,接下来马上将开始技巧篇。内容肯定无法包含方方面面但应该还算实用,毕竟我也才入前端不久,本篇也将是近期的最后一篇CSS相关文章了。

重置样式,摆脱一些标签自带样式
      a {/* all: unset; 不建议使用该属性,虽然代码简洁,但是兼容性及浏览器引擎渲染问题会很麻烦*/text-decoration: none;color: initial;/* 字体颜色使用默认值,算是比较好的一种重置方式,不用考虑部分浏览器在点击时,字体颜色变化问题 */}button {border: 1px solid;/* 对于border-color来说是虽然在不设置的情况下会渲染为默认颜色,但是却不可以进行border-color:initial的设置 *//* 当然border-color属性本身也不存在继承(inherit)的情况 */cursor: pointer;outline: 0;/* 取消点击时边框变色的问题,至于其他的效果实现就不多做考虑了,可根据各自需求实现 */}input {outline: 0;/* outline该属性:本人最常用的场景便是清除原有的button、文本框的默认突出边框样式了 */}
复制代码
常用伪类与伪元素技巧

HTML代码:

    <div class="demo"><div class="demo1 demo0"></div><div class="demo2 demo0"></div><div class="demo3 demo0"></div><div class="demo4 demo0"></div><div class="demo5 demo0"></div></div>
复制代码

CSS代码:

      .demo {display: inline-flex;/* 第三篇布局篇已经说过了,对于flex布局就不多做说明了,兼容性问题,10年时间了,除非你非要用IE10-,其他问题不大 *//* 当然补充一点,flex与inline-flex的区别,其实就是一个是行内元素、一个是块级元素,即line-flex宽度可以由子元素撑开 *//* 且line-flex无margin属性,但是对于接下来我要实现的伪元素是绝对合适的 */border: 1px solid;/* 对于边框的重叠问题,同样的在布局篇也有说,最好不要使用margin负边距来实现,可能会因为父元素的margin问题而出现“bug” */margin: 0 auto;}.demo0 {background-color: aquamarine;width: 100px;height: 100px;}.demo0:not(.demo5) {/* 第四篇CSS动画篇有说明,一般情况下伪类选择器不会是较优解的,但是对于伪类中的:not还算较为常用的 */border-right: 1px solid;}.demo1:hover {/* 要说伪类中最为“脸熟”的莫过于:hover了,在用户体验方面,一行简单的代码最能实现不错的效果 */background-color: blueviolet;/* 剩下的例如:checked、:visited、:focus等等也都有实际的应用场景或者奇淫技巧的作用,但是这里就不展开说了 */}.demo::after{content: "";/* 对于伪元素来说content属性是必须的,哪怕其值为空,也是必须进行设置的。 */width: 100px;height: 100px;/* 对于伪元素中最为常用的::after与::before伪元素来说,他是不会出现在dom树上面的,所以常见的百分比设置是不会有作用的 */background-color: pink;/* 对于该类别的伪元素来说,虽然没有明确说明其为块级元素,但他是有margin属性的,且该属性是有效的 */transition: 1s;/* 小小地使用一下动画中的过渡属性,详情上一篇CSS动画篇已经有足够的说明了 */}.demo:hover::after{/* 伪类与伪元素的结合使用,其实由:、::来区分伪类与伪元素无论从语法上还是实际使用上都方便了很多 */opacity: 0;/* 当然你如果想要直接在伪元素上作用一个伪类,目前是无法实现的,毕竟伪元素并没有出现在dom树上 *//* 况且具体需求,应该用较优解的写法来实现,而不是去纠结这些,选择有时候比努力更重要 */}
复制代码
容易被忽视,但相当重要的CSS选择符

HTML代码:

    <div class="demo"><div class="demo1 demo0"></div><div class="demo2 demo0" data-border="border"></div><div class="demo3 demo0 demo0-1"></div><div class="demo4 demo0" data-border="border"></div><div class="demo5 demo0 demo0-1"></div></div>
复制代码

CSS代码:

      .demo {display: inline-flex;}.demo0 {width: 100px;height: 100px;background-color: antiquewhite;}.demo2 {transition: 1s;/* 再次回忆一次,过渡属性。transition-name并不是所有CSS属性都是能有作用的,常见的例如display、margin中的auto、background-color *//* 当时说的我所理解的原因即,这三个属性无“过渡”状态,那么我再来看一下background-color属性,其过渡状态可以看作与opacity相同的过渡状态 */}.demo1:hover {/* 我们来实现一下,通过一个元素的:hover,来达到多个元素的状态变化 */background-color: blueviolet;}.demo1:hover + .demo2 {/* 相邻兄弟元素 */background-color: blueviolet;}.demo1:hover ~ .demo0-1 {/* 同级的其他元素 */background-color: blueviolet;}div[data-border="border"]{/* 这个可以算是属性选择器的其中一种较复杂版,感兴趣的可以自行再去详细了解 */border-right: 1px solid;/* 其他的例如“ , ” “  ” “ > ”也都属于常用的CSS选择符,但是由于其太基础了,就不浪费篇幅详细说明了 */}
复制代码
CSS来实现各种基础形状
      .demo0 {/* 三角形 */width: 0;height: 0;border: 20px solid transparent;/* 盒模型分为IE传统盒模型与标准盒模型,而一般情况下浏览器都是根据IE传统盒模型渲染的,此时我们可以先将content大小设为0 *//* 在这种情况下,由于content大小为零,单边的边框就将会是一个三角形形状了 */border-top: 20px solid yellowgreen;}.demo1 {/* 梯形 */width: 10px;height: 5px;/* 由前两个?我们可以很明了的清除,width、height对应的是内边距长度,当然内边距长度如果改变外边距长度也是会跟着变化的 */border: 20px solid transparent;/* 可能有人疑惑为何我要先写整体border,再用部分border属性去覆盖,但是实践过这两个?后应该就可以明白了 *//* 整体border负责外边距的长度变化,且不会影响到内边距的长度 */border-top: 20px solid yellowgreen;/* 而部分border属性影响的是图形的高度变化 */}.demo2 {/* 平行四边形 */width: 100px;height: 100px;/* transform: skew(20deg);虽然transform: skew(20deg)等同于transform: skew(20deg,0)但是更建议下面这种写法 */transform: skewX(20deg);/* transform: skewX(20deg);即水平方向倾斜,角度越大(不超过90deg)倾斜程度及越大,在90deg时会出现“bug”问题 */margin-left: 30px;background-color: blueviolet;}.demo3 {/* 半圆 */width: 100px;height: 50px;/* 因为是半圆根据border-radius属性,我们要确定宽高,若是水平方向的半圆则高是宽的一半,反之则宽是高的一半 */border: 1px solid;border-radius: 50px 50px 0 0;/* border-radius包含四个属性方向:上左、上右、下右、下左沿顺时针方向,通过设置这四个属性值,我们最终就能够得到一个半圆 *//* 当然了存在的属性值必须要大于相对应的宽高,该?中就是要>=50px */}.demo4 {/* 其余如多边形等,都是可以通过基础图形拼装的,就不一一说明了,这是最后一个? *//* 简易对话框 */width: 100px;height: 50px;background-color: antiquewhite;border: 1px solid;position: relative;}.demo4::before {position: absolute;content: "";width: 15px;height: 15px;transform: rotate(45deg);/* 通过四边形2D平面旋转,与主内容四边形互相遮罩产生视觉效果差,从而实现一个简易版对话框 */border: 1px solid transparent;/* 当然其效果还有其他的实现方式,例如利用padding(内边距)等等,就不多做赘述了 *//* 较复杂的对话框样式则可以将border与content大小相结合进行使用,这里也不多做赘述了 */background: inherit;border-bottom: 1px solid;border-right: 1px solid;/* 利用不同边框的颜色不同,及背景颜色继承的特性从而实现边框效果 */bottom: -9px;left: 50%;/* 该图形还是涉及到了不少知识点的,且实现的方式也有不少,例如将伪元素的定位方式改成margin控制其实也是可以的 *//* 但是在考虑到margin可以潜在的负边距“bug”及边距重叠问题,还是更建议使用较优解定位来进行处理 */}
复制代码
隐藏元素的多种方式
      .demo0 {/* 关于隐藏元素的部分总结,多行代码就不做说明了,这里的都是单行CSS即可视觉上隐藏元素 *//* 不占用位置空间的,但是两个all属性的意义其实是相似的,并因为浏览器引擎渲染问题不建议使用 *//* 写在这里真的是为了可能出现的奇葩面试题,实际操作中display:none足够用了 */all: initial;all: unset;display: none;/* 占用位置空间的隐藏,常用的为opacity:0可以用于动画效果, visibility: hidden;与visibility: collapse;除表格外用法相同*//* 还有五条都是transform(动画转换)包含的属性,除了后两个移出到页面之外,也都是有需求场景的。当然虽然那两个属性看似移出到页面之外 *//* 但也是占用了空间的,这点与定位有所不同 */opacity: 0;visibility: hidden;visibility: collapse;transform: scale(0, 0);transform: rotateX(90deg);transform: rotateY(90deg);transform: translateX(-9999px);transform: translateY(-999px);} 
复制代码
禁止用户选中文本
      .demo0 {/* hack尽量少写,其实对于屏蔽选中文字有好处也有坏处,具体场景具体实现为好 *//* 况且对于一些友好的框架,如angular来说,本身就已经帮你写好hack了 */-moz-user-select: none;-ms-user-select: none;-webkit-user-select: none;user-select: none;}
复制代码
到底换不换行,怎么换行的问题
      .demo0 {/* 不换行 */white-space: nowrap;/* 只能在半角空格或连字符处换行。 */word-break: keep-all;/* 默认自动换行就不做说明了 *//* 在连续数字或符号或字母下的强制换行 */word-break: break-all;}
复制代码
对于图片的简单处理
      img{/* 可以被动画效果支持,但属性会互相覆盖,只支持一种filter效果 */filter: blur(5px);/* 图片进行高斯模糊数值越大越模糊 */filter: brightness(0.5);/* 图片进行明暗处理,当为0~1区间的时候为图片较原图较暗,当大于1则高亮 */filter: contrast(1.5);/* 图片进行对比度调整,数值越大曝光效果越大 */filter: grayscale(0.8);/* 其实可以被看做是黑白图像制作、即灰度图像 *//* 其实前端要做的事情已经越来越重要了,一些简单的UI工作,也可以用些许CSS属性实现了 *//* 还有一些其他的filter所包含的属性,具体情况可以自行查证实践 *//* 可能还会有人想到clip属性(图片截取),但是该属性在MDN当中已经明确说明已被废弃,不太建议使用 */}
复制代码
对于文本的简单处理
      .demo0{/* 每个“连续”英文字符串首字母大写 */text-transform: capitalize;/* 所有英文字母小写 */text-transform: lowercase;/* 所有英文字母大写 */text-transform: uppercase;/* 字符、文字、字母之间的间距,支持负数 */letter-spacing: 2px;/* 保留空白符,但不会“正常”换行 */white-space: pre;/* 保留空白符,且正常换行 */white-space: pre-wrap;}
复制代码
背景颜色的简单处理
      .demo0 {/* 单色颜色设置 */background-color: aqua;/* 渐变色(混合色)设置,background-color、background-image若同时出现,用户所能看到的优先是background-image属性 */background-image: linear-gradient(red,yellow,blue);/* linear-gradient(direction, color-stop1, color-stop2, ...); 默认方向为从上到下,可以指定角度或方向*//* color-stop是由一个<color>值组成,并且跟随着一个可选的终点位置(可以是一个百分比值或者是沿着渐变轴的<length>)*//* 当然了千万不要小看渐变这个小小的属性,他的特效作用可不简单的只有这一点,只是具体其他效果实现就不细说了 */}
复制代码

最后说两句:其实关于CSS的内容还有太多太多可以讲的技巧,但是有些限于篇幅原因,有些限于想不起来了,也就不再多一一说明了。但是CSS的魅力却是已经被掀开了一角神秘的面纱,具体的有关CSS的世界只有亲自去体会才能明白更多。而下一篇也要开始js相关篇章了。

转载于:

更多推荐

前端——正儿八经的CSS常规样式及常识梳理技巧向(五)

本文发布于:2024-03-13 09:45:27,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1733694.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:样式   常规   常识   技巧   正儿八经

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!