当前位置: 首页 > 科技观察

前端进阶-Css必知的几个底层知识和技巧

时间:2023-03-16 22:17:50 科技观察

前端进阶:Css必备的几个低级知识和技能。心理学家把注意力分为两种:无意的注意和有意的注意。有意识的注意需要事前有意识的目的,必要时需要发自内心的努力,主动注意某些事物。它表现了人们心理活动的主观性和主观性。问题导向学习法强调有意识地关注解决问题的信息,使学习有明确的方向,从而提高学习效率。介绍完问题学习法,就进入我们今天的正题。接下来,我将介绍一些CSS的底层知识和奇怪的现象,让大家对CSS有更深入的了解。一、CSSsize1.Preferredminimumwidth——实现复杂的图形效果在CSS中,图片和文字的权重远大于layout,所以当width:0时,显示的宽度就是“preferredminimumwidth”。中文的最小宽度是每个汉字的宽度,西文的字符是靠连续的英文字符单元。因此,我们可以根据这个特点实现一些复杂的图形,如下:当鼠标经过时,变成如下:代码如下:.minW{display:inline-block;width:0}.minW::before{content:"loveyoulove";color:transparent;outline:2pxsolid#cd0000;}.minW:hover::before{content:"youloveme";color:transparent;outline:2pxsolid#cd0000;}我们会发现当容器宽度设置为0时,由于首选宽度的影响,会出现一个基于文本空间的形状。2.2.子元素宽度设置为100%时出现奇怪现象的原理探索父元素宽度=图片宽度+文字内容宽度浏览器渲染原理:先下载文档内容,加载header样式资源,然后按从上到下,自动DOM内容以从外到内的顺序呈现。本例出现现象的原因是:渲染到父元素时,子元素的width:100%没有渲染,宽度为图片加上文字内容的宽度;当渲染到文本的子元素时,父元素的宽度已经固定。这时候width:100%就是父元素的固定宽度。如果宽度不够,就只能溢出。.box{display:inline-block;white-space:nowrap;}.text{display:inline-block;width:100%;}理论上父元素的宽度应该是子元素宽度的总和元素,但出现上图现象,原因在于浏览器渲染的顺序:从外到内,这个很重要。3、如何让元素支持height:100%效果知识点:绝对定位的宽高百分比是根据padding-box,非绝对定位的宽高百分比是根据content-box。方法如下:*1.设置显示值的高度*2.使用绝对定位4.任意高度(max-height/min-height)元素的展开和折叠动画1.min-的初始尺寸height/min-width为auto,max-height/max-width的初始大小为none2.min-height/min-width优先级高于max-width/max-height实现展开和收拢动画如上图,可以使用max-height/min-height:.nav>.sub-nav{max-height:0;overflow:hidden;transition:max-height.6scubic-bezier(.17,.67,.76,1.41)}.nav:hover>.sub-nav{max-height:400px;}2、深入探索内联元素常见的内联元素包括:display设置为inline的元素,inline-block,andinline-table内联盒模型:内容区:可以理解为文本选择的背景色区域(重要)内联盒:内联标签或纯文本内联盒box:由内联盒组成的一行,每行line是一个lineboxIncludebox:由lineboxboxes组成的boxGhostBlanknode:在HTML5文档中声明,内联元素被解析和渲染时,就好像每个linebox前面都有一个空白节点一样。如下例所示:3.深入理解content1。web中很多替换元素的默认尺寸(不包括边框)为300*150,没有明确的尺寸设置,比如video、iframe、canvas等,少数为0,比如img,form的替换尺寸元素与浏览器本身有关。2.对于img元素,如果有css大小,最终大小由css大小决定(css大小>html大小>固有大小)3.当图片的src属性默认时,图片不会有任何请求,这是最高效的实现方式,如下图是使用该方式的图片占位代码(对于firefox浏览器,src默认的img是一个普通的内联元素,宽高设置无效):img{visibility:hidden;}img[src]{visibility:visible;}content内容生成技术1.实现换行::after{content:'\A';white-space:pre;}2.实现加载动画.dot{display:inline-block;width:8em;height:1em;line-height:1;text-align:left;vertical-align:-.25em;overflow:hidden;}.dot::after{display:block;margin-left:5.2em;content:'...\A..\A.';white-space:pre-wrap;animation:dot3sinfinitestep-startboth;}@keyframesdot{33%{transform:translateY(-3em);}66%{transform:translateY(-2em);}99%{transform:translateY(-1em);}}3.属性值内容生成

/*可以使用原生属性和自定义属性*/.icon::after{content:attr(data-tip);}4.Counter属性---纯css实现技术效果.box1{counter-reset:count1;}.xigua:checked::before{content:counter(count1);counter-increment:count1;position:absolute;color:transparent;}.box1::after{content:counter(count1);}
西瓜
香蕉
Carrot
4.padding深入研究1.Forbox模型设置对于box-sizing:border-box元素,如果padding足够大,那么width会无效:width:200px;padding-left:120px;padding-right:120px;box-sizing:border-box;2.对于行内元素,padding会对视觉层和布局层都有影响。如果父元素设置了overflow:auto,内联子元素的垂直padding可能会导致父元素出现滚动条。否则,如果父元素没有设置overflow,只会出现在垂直方向的Overlap,不会影响布局:/*父元素设置*/.pd-2-1{overflow:auto;}.pd-2-1>span{padding-top:1em;padding-bottom:1em;}3.padding的实际应用(具体实现可以自己想一想)1.增加链接或按钮点击区域的大小2.使用内联元素的padding实现分界线高度可控3.使用内联元素实现瞄准点定位距离4.使用padding百分比值实现按比例缩放图片的效果:.pd-3{padding:10%50%;position:relative;}.pd-3img{position:absolute;width:100%;height:100%;left:0;top:0;}**注意:行内元素的垂直padding会出现ghost出现空白节点,可以考虑设置font-size:05.padding和graphicsdrawing/*menu*/.icon-menu{display:inline-block;width:120px;height:10px;padding:35px0;border-bottom:10pxsolid;border-top:10pxsolid;background-clip:content-box;background-color:currentColor;}/*双点*/.icon-dot{display:inline-block;width:60px;height:60px;padding:10px;border-radius:50%;border:10pxsolid;background-clip:content-box;background-color:currentColor;}五、深入学习margin1.使用:nth-??type-of(3n)去除subMargin.mg-item:nth-of-type(3n){margin-right:0;}在元素的末尾注意:如果容器可以滚动,padding-bottom的值在IE下会被忽略,firefox,但不是chrome。滚动容器的底部留白可以通过margin-bottom实现。本质上的区别是chrome中子元素超过父元素的contentbox大小时显示滚动条,而IE和Firefox浏览器中子元素超过paddingbox大小时显示滚动条。.margin合并条件块级元素,但不包含浮动和绝对定位元素。在默认文档流下,它只出现在垂直方向。边距合并三种场景相邻兄弟元素父元素和first/last子元素*解决方法:父元素设置为块级格式化上下文元素父元素设置border-top/bottomvalue父元素设置padding-top/bottomvalue父元素设置height空块-levelelementmarginmerge","Addpositiveandnegativevalues","Negativemostnegativevalue"4.深入理解margin:auto如果一侧固定,一侧auto,那么auto就是剩下的大小空间。如果双方如果两者都是auto,则剩余空间平分触发margin:auto计算:当width或height为固定值时,元素具有自动填充的特性/*1*/margin-right:20px;margin-left:auto;/*2*/margin-right:auto;margin-left:auto;4.绝对定位元素使用margin:auto实现水平和垂直居中(兼容ie8+).father{position:relative;}.child-2{position:absolute;left:0;bottom:0;right:0;top:0;width:40px;height:20px;margin:auto;}***invalidmargin分析:计算显示值为inline的非替换元素的垂直marginisInvalid对于行内替换元素,垂直边距是有效的,不存在边距合并的问题,所以永远不会发生边距合并。inline特性会导致margin失败:容器中有一张图片,图片设置了margin-top,随着margin-top的负值越来越大,当达到特定的负值时,图片将不再向上偏移。小写字母x的高度是相对单位vertical-align:middle指的是基线上方1/2x-height的高度。vertical-align调整七项的对齐方式。BFC-block-levelformattingcontext1.性能:元素内部的布局变化不会影响外部元素。所以不会有marginmerge,可以用来清除floating的影响。2、触发BFC条件:根元素float的值不为none,overflow的值为auto,scroll、hiddendisplay的值为table-cell,inline-blockposition的值不为static或relative3。如果元素有BFC特性,则不需要清除:两者都清除浮动4.display:table-cell特性:无论设置多大的宽度,都不会超过表格容器的宽度5.overflow裁剪限制:borderbox:一个带有overflow:hidden的元素同时设置了padding和border,那么当子元素超过容器的宽高设置时,裁剪边界为内边缘borderbox而不是paddingbox的内边缘6.在PC端,默认的滚动条来自于PC端的滚动高度。可以使用document.documentElement.scrollTop获取,移动端使用document.body.scrollTop获取。7、PC端滚动条的宽度约为17px8。让页面滚动条不抖动的方法:html{/*ie8*/overflow-y:scroll;}:root{overflow-y:auto;overflow-x:hidden;}:rootbody{position:absolute;}body{宽度:100vw;overflow:hidden;}9.多行文本溢出css方法显示省略号:.ell-rows-2{display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;}八。相对难点分析1.相对定位位移是相对于自身的。如果left/top/right/bottom的值是百分比单位,则计算尺寸以父元素为准2.如果left/right或top/bottom是相反的属性同时出现时,只有一个方向的属性将生效。优先级与文档流的顺序有关。默认的文档流向是从上到下,从左到右,所以top优先于bottom,left优先。基于right3.relative的最小化原则尽量不要使用relative,可以使用非依赖绝对定位来解决一些问题如果一定要使用relative,那么relative必须最小化(最小包容??区域)——为了避免这样的问题ashierarchicalcoverage4.Cascadingcontext定位元素默认z-index:auto;这时候,就和普通的元素一样了。一旦z-index设置为任意值,就会创建一个堆叠上下文,顺序为:堆叠上下文<负z-index