当前位置: 首页 > Web前端 > CSS

CSS教程:CSS(下)

时间:2023-03-30 19:07:32 CSS

CSS(下)历史CSS于1994年首次提出;它于1996年首次被浏览器支持;W3C于1996年正式推出CSS1;在这个版本中,字体已经包含了颜色和背景的相关属性、文本的相关属性、框的相关属性1998年,W3C正式推出CSS2;开始使用目前W3C推荐的样式表结构CSS2.1(2004年2月);在CSS2的基础上做了细微的改动,删除了很多浏览器不支持的属性,比如text-shadow。CSS3仍在开发中;现在使用的CSS基本上都是在CSS2的基础上发展起来的。2010年推出的新版本css3CSS3在包含所有CSS2支持的基础上进行了改进,不用担心兼容性问题。CSS支持手机、电视、打印机、幻灯片等多种设备,但CSS在浏览器上得到更好的推广。复习用到的知识点双栏布局【CSS布局】左边固定宽度,右边自适应进度条实现取色器https://codepen.io/AlexZ33/pen/PowGpGjCSS其他重要知识BFCBFC全称:BlockFormattingContext,BFC翻译过来就是块级格式化上下文。BFC是网页可视化CSS渲染的一部分,是块盒布局过程发生的区域,也是浮动元素与其他元素交互的区域。说白了,他就是一个规矩。具体戳这篇文章:什么是BFC?IFC(row-levelformattingcontext)GFC(gridlayoutformattingcontext)FFC(adaptiveformattingcontext)堆叠上下文和堆叠顺序z-index思考:什么是z-index底层不会生效。z-index为-1。两个div竖排,最下面的div上移。两者的堆叠顺序是什么?为什么?大小单位和使用场景长度单位:相对和绝对。CSSMargin中的尺寸单位CollapseMarginCollapseRedraw&ReflowRenderingMechanismandRedrawandReflowRenderingEngine解析HTML结构生成DOM树解析CSS生成CSS规则树遍历DOM树,逆向分析每一个样式规则,为每一个应用合适的规则DOMTree中的节点,生成RenderTree,计算每个元素在RenderTree中的位置,触发reflow,repaint,调用NativeGUIAPI绘制好用的花哨工具borderradiusgeneratoranimate.cssCSSTransformFunctionsVisualizerhttps://imgbin.com/形状正方形https://codepen.io/AlexZ33/pen/rNaWJrL矩形https://codepen.io/AlexZ33/pen/wvBoyXN圆形https://codepen.io/AlexZ33/pen/JjobpBJ三角形https://codepen.io/AlexZ33/pen/qBEqEvZ曲线箭头符号https://codepen.io/AlexZ33/pen/jOEVZQN椭圆原理:使用border-radius:50%实现https://codepen.io/AlexZ33/pen/WNbGZMe半椭圆原理:利用border-radius来使用/分隔圆角val利用水平和垂直方向的特性,以不同方式设置圆角半径https://codepen.io/AlexZ33/pen/vYEXeQQ1/4椭圆原理:border-radius只在一个角设置圆弧https://codepen.io/AlexZ33/pen/GRgjMPe平行四边形原理:transform:skew()变形。(注:内联元素无效)https://codepen.io/AlexZ33/pen/yLyazrV平行四边形伪元素方案原理:利用伪元素变形,以免影响元素内部的正常内容(里面的内容变形的元素也会变形)https://codepen.io/AlexZ33/pen/OJPRxKL菱形图像裁剪原理:嵌套元素,内外反转,内部图像宽度和对角线。(内部反向旋转是为了拉直图像)https://codepen.io/AlexZ33/pen/MWYjOwm菱形切割方案原理二:利用clip-path切割路径属性,设置其值为polygon()多边形实现https://codepen.io/AlexZ33/pen/mdyrqVZ元素切角原理:使用渐变(透明转纯色)实现角度,使用background-size控制多个渐变互不影响实现多个切角https://codepen.io/AlexZ33/pen/QWwKOKG元素圆弧切角原理:使用径向渐变实现,多个圆角同上https://codepen.io/AlexZ33/pen/ZEYpaBXborder-image实现切角原理:使用border-image结合svg图片实现切角边框,通过background-clip限制背景色https://codepen.io/AlexZ33/pen/KKwgyaW剪切路径实现切角原理:使用clip-path:polygon()实现,有限兼容ity不好,裁剪会忽略内部文本内容。优点:任意内容均可裁剪,不受背景图片限制https://codepen.io/AlexZ33/pen/RwNGjKX梯形导航标签效果原理:利用transform:perspective()实现穿透变形https://codepen.io/AlexZ33/pen/abzmVJj静态饼图https://codepen.io/AlexZ33/pen/abzmVwa动态饼图原理:伪元素覆盖旋转https://codepen.io/AlexZ33/pen/jOEMamBsvg实现饼图https://codepen.io/AlexZ33/pen/povEdrr视觉效果单边投影原理:除了box-shadow的三个尺寸值外,第四个长度参数(展开半径)可以在展开半径时实现是负的模糊半径单边投影https://codepen.io/AlexZ33/pen/YzPpwGy邻边投影原理:设置双边位移,设置扩展半径为模糊半径值的一半https://codepen.io/AlexZ33/pen/gObLPLg在反面投影原理:叠加两个单面投影ionshttps://codepen.io/AlexZ33/pen/rNaWxmP字体排版连字符换行效果不理想(兼容性差)hyphens:none//隐藏连字符hyphens:manual//显示连字符hyphens:auto//自动https://codepen.io/AlexZ33/pen/YzPwMWE插入换行符原则:使用unicode中的换行符0x000A,也就是CSS中的\000A(简写为\A)作为伪元素的内容值,同时注意保留换行符和blankswhite-space:pre传统做法:使用
标签换行新思路:可以将:before或:after伪类选择器中的内容设置为“A”换行,因为Unicode字符代表一个换行符是“0x000A”,在CSS中可以写成“000A”或者简化成“A”div::after{content:"\A";空白:pre;//源代码中的空格和换行符可以保留,否则内容中的换行符会被忽略。}https://codepen.io/AlexZ33/pen/povgBEM文本行斑马条纹原理:利用条纹背景实现条纹,然后用背景em值作为条纹大小https://codepen.io/AlexZ33/pen/KKwVYWO调整标签宽度tab-size属性原理:通过CSS3新增文本属性tab-size:2;设置每个tab占用2个字符宽度在网页上需要显示代码时,可以通过设置tab-size属性几个字符来指定tab缩进。https://codepen.io/AlexZ33/pen/BayjEZv为某些字符(华丽和符号)单独设置字体。传统做法:为需要单独设置的字符设置类,通过类为其设置唯一的字体。新思路:@font-face中的unicode-range属性可以设置字体适合哪些字符。@font-face{字体系列:demoFont;src:local('Baskerville-Italic'),local('GoudyOldStyleT-Italic');/*应用于指定字符的字体*/unicode-range:U+26;/*设置有效字符,'&'的Unicode码位,可以通过'&'.chatCodeAt(0).toString(16)得到'&'的十六进制码位'26',然后加上'U+'在前缀*/}p{font-family:demoFont,Helvetica;/*demoFont字体只应用于'&'字符,其他字符将应用于后续字体'Helvetica'*/}自定义文本下划线传统方法:通过text-decoration:underline;新思路:1.通过background和background-size在自定义格式中设置下划线;2、通过text-shadow,可以在字符周围出现一圈白边,使其看起来像下划线遇到字母的下降部分自动断开连接避免。3、文字最好放在行内元素中,这样下划线也可以和文字的换行符一起换行。span{背景:线性渐变(灰色,灰色)不重复;背景大小:100%1px;背景位置:01.2em;text-shadow:.05em0white,-.05em0white;}wavyunderlineLetterpressprintingeffect镂空字符效果/文字外发光效果/文字凸起效果可以通过text-shadow给文字添加效果来实现。文本发光效果环形文本1.通过SVG路径绘制一个圆圈。2、通过text和textPath添加文字,通过xlink:href属性将文字链接到路径。<文本>fdsfdsfdsfdsfsdfdsfsdfds

.demo{width:300px;高度:300px;保证金:4em自动0;}svg{显示:块;overflow:visible;}path{fill:none;}注:该方法不仅适用于循环文本,也适用于所有需要特殊路径排序的文本。用户体验选择合适的鼠标指针的原则:不同的场景选择不同的鼠标指针。cursor属性设置隐藏游标:cursor:none。对于老浏览器,可以使用cursor:url(transparent.gif)传入一个1*1的透明gif来模拟隐藏和扩大可点击区域原理:通过伪元素扩大按钮范围自定义复选框原理:使用checkbox的:checked属性区分选中状态,然后结合相邻label元素的控件,通过伪元素达到想要的效果,然后隐藏原来的checkbox开关按钮CSS遮罩层原理:通过box-shadow实现.缺陷:Nativemodalmask层在mask层下仍然可以操作。原理:通过::backdrop伪类实现遮罩模糊和背景弱化。codepen.io/AlexZ33/pen/WdvrZzhttps://codepen.io/AlexZ33/pen/QWwKpNrhttps://codepen.io/AlexZ33/pen/abzmJNe结构布局自适应内部元素原理:通过CSS3新属性min-content让元素宽度最大宽度是不能在其中中断的元素的宽度

假设我们这里有一些文本。Baconipsumdolorsitametturkeyveniamshankle,culpashortribskevint-boneoccaecat.

这个小猫很可爱,她的名字叫静心。按时找到工作的方法

我们这里还有一些文字。Etlaborumvenisonnostrud,utveniamsintkielbasaullamcopancetta。

如果没有设置任何样式时,效果如下:如何让文字适应图片的宽度?这就是问题的症结所在,如何让元素适配内部元素?而不是适应其父元素?答案是width:min-content:表示元素的宽度会被解析为它里面最大的不可破坏元素的宽度(例如:固定宽度的最宽的word、图片或box元素)图{/*表示图形的宽度由里面最大的不可断元素的宽度决定*/max-width:min-content;}由于min-content是css3特性,部分浏览器可能不支持,所以我们需要一个平滑的回退解决方案,即提供一个固定的max-width值图{max-width:300px;margin:auto;}figure>img{max-width:inherit}https://codepen.io/AlexZ33/pen/rNaeNbB精确控制tablelist的原理:通过设置table-layout:fixed,更多的控制table是给开发者的,而不是让浏览器决定改变多少内容才理想的渲染宽度。大家在实际的开发过程中,尤其是后台管理系统中,表格的使用会非常频繁,但是对于表格的广泛控制,有时候我们可能达不到预期的效果。原因可能是我们对table的相关属性不是很清楚,尤其是table-layout:auto/fixed;auto为默认值,表示自适应单元格中的内容,此时设置宽度无效。fixed表示等分,即宽度等分。当然我们也可以设置宽度。首先我们看一下auto的效果:Copy2科比·布莱恩特,一个伟大的时代,一个伟大的球员,一群伟大的球迷科比·布莱恩特,一个伟大的时代,一位伟大的球员,一群伟大的球迷和一大群粉丝
NumberCopy1行动
1科比·布莱恩特,伟大的时代,伟大的球员,伟大的球迷群体edit
//csstable{width:800px;边界崩溃:崩溃;width:100px;//此时设置宽度不会生效,因为此时table-layout是auto。}tabletrtd,tabletrth{border:1pxsolid#ddd;}然后我们在上面的基础上给table添加一个table-layout:fixed,效果如下:这时,我们看到一些单元格文字较多,如何隐藏?这时候我们可以使用text-overflow:ellipsis,这个属性必须结合:overflow:hidden;white-space:nowrap;和指定的宽度生效。代码如下:table{width:800px;边界崩溃:崩溃;table-layout:fixed;}tabletrtd,tabletrth{border:1pxsolid#ddd;}tabletrth:nth-child(3){宽度:100px;}tabletrtd:nth-child(3){宽度:100px;文本溢出:省略号;空白:nowrap;overflow:hidden;}最终效果如下:此时有一个细节需要注意:我们直接将td的宽度设置为100px,效果不明显,必须将th的宽度设置为100px,单元格的宽度将生效。这是因为在渲染表格的时候,一般都是按照第一行的样式进行渲染。此时第一行由th组成,所以此时th没有设置宽度,即使td设置了宽度,在渲染的时候,同一列的其他元素单元格还是按照th渲染,所以这里,我们直接设置td的宽度是无效的,当然你也可以删除th组成的线,然后再设置td的宽度,就可以生效了,因为此时,第一行是td组成https://codepen.io/AlexZ33/pen/mdyPyOx以绝对底部(StrickyFooter)为中心的完整背景和等宽内容什么是绝对底部或粘性页脚(strictfooter),指的是footerTightly附加到视口的底部。如果内容足够长,则页脚位于内容的正下方。效果图:calc():用于计算应用区域的最小高度(窗口高度-页眉高度-页脚高度)flextransitionanimation动画速度控制函数bouncingballanimationCSS提供了几个内置的缓动函数ease,linear,ease-in,ease-out,ease-in-out,还提供cubic-bezier()供开发者定义调速函数。animate.css动画库https://codepen.io/AlexZ33/pen/mdyOJOxhttps://codepen.io/SebL/pen/pqJznelastictransition-popup动态https://codepen.io/AlexZ33/pen/yLyVEJWelasticityTransition颜色变化effectframe-by-frameanimation-CSS实现Loadingdynamicgraph的原理:通过将所有的frame组合成一张PNG图片,用一个frame-sized的元素容纳它,改变background-position值实现frametransition,通过动画steps()函数实现非平滑过渡,从而显示每一帧动画https://codepen.io/AlexZ33/pen/NWPbzVQ3D上下翻转https://codepen.io/AlexZ33/pen/xJEYGX循环滚动效果https://codepen.io/AlexZ33/pen/MWYjpKz实用技巧使用CSSresetCSSreset可以在不同浏览器上保持风格一致。可以使用CSS重置库Normalize等,也可以使用更简化的重置方法:*,*::before,*::after{box-sizing:border-box;保证金:0;padding:0;}现在element的margin和padding设置为0,box-sizing可以管理你的CSS盒模型布局。https://codepen.io/AlexZ33/pen/VwwoJGJ注意:如果您通过继承box-sizing遵循接下来解释的技术,则无需在上述代码中添加box-sizing属性。Inheritbox-sizingInheritbox-sizingfromhtmlelement:html{box-sizing:border-box;}*,*::before,*::after{box-sizing:inherit;}所以在插件或者其他组件中改变box-上浆变得容易。每天一次拓展(长期学习目标)https://juejin.im/post/5cf5f358e51d45778f076ce5https://codepen.io/AlexZ33/pen/xxbVbKV实用技巧1.适配技巧真的,移动端大小适配无关withdpr2.兼容不同的浏览器3.兼容不同的设备4.业务中常见的样式bug及常用组件的解决方案pen/WNbQKez延伸阅读理解CSSz-index属性级联上下文font-faceCSS字典框详解-css-trick中CSS过渡的形状《CSS揭秘》