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

一篇教你如何驾驭CSS方向感的文章

时间:2023-03-12 18:43:08 科技观察

介绍完问题式学习法,进入今天的正题。接下来,我将介绍CSS的一些底层知识和奇怪的现象,让大家对css有更深的了解。一、CSSsize1.Preferredminimumwidth——实现复杂的图形效果在CSS中,图片和文字的权重远大于layout,所以当width:0时,显示的宽度就是“preferredminimumwidth”。中文的最小宽度是每个汉字的宽度,西文的字符是靠连续的英文字符单元。因此,我们可以根据这个特点,实现一些复杂的图形,如下:当鼠标经过时,变成如下:代码如下:.minW{display:inline-block;width:0}.minW::before{content:"爱你爱";颜色:透明;outline:2pxsolid#cd0000;}.minW:hover::before{内容:“你爱我”;颜色:透明;轮廓:2px实心#cd0000;我们会发现,当容器宽度设置为0时,由于首选宽度的影响,会出现一个基于文本空间的形状。2、子元素宽度设置为100%时出现奇怪现象的原理探究父元素宽度=图片宽度+文字内容宽度。浏览器渲染原理:先下载文档内容,加载header样式资源,然后按照从上到下,从外到内的顺序渲染dom内容。本例出现现象的原因是:渲染到父元素时,子元素的width:100%没有渲染,宽度为图片加上文字内容的宽度;当渲染到文本的子元素时,父元素的宽度已经固定。这时候width:100%就是父元素的固定宽度。如果宽度不够,就只能溢出。.box{显示:内联块;空白:nowrap;}.text{显示:内联块;width:100%;}理论上父元素的宽度应该是子元素宽度的总和,但是出现图现象的原因在于浏览器渲染的顺序:从外到内,这是非常重要的。3、如何让元素支持height:100%的效果知识点:绝对定位的宽高百分比是根据padding-box,非绝对定位的宽高百分比是根据content-盒子。方法如下:*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;溢出:隐藏;transition:max-height.6scubic-bezier(.17,.67,.76,1.41)}.nav:hover>.sub-nav{max-height:400px;}2.深入探索内联元素Common行内元素包括:display设置为inline、inline-block、inline-table的元素行内框模型:内容区:可以理解为文本选择(强调)的背景色区域。行内框:行内标签或纯文本。linebox:一行inlineboxes,每一行都是一个linebox。ContainingBox:由linebox盒子组成的盒子。幽灵空白节点:在HTML5文档声明中,内联元素被解析和呈现,就像每个行框前面都有一个空白节点一样。如下例所示:3.深入理解content1。web中很多替换元素的默认尺寸(不包括边框)为300*150,没有明确的尺寸设置,比如video、iframe、canvas等,少数为0,比如img,form的替换尺寸元素与浏览器本身有关。2、对于img元素,如果有csssize,最终的大小由csssize决定(csssize>htmlsize>intrinsicsize)。3、默认图片的src属性时,不会请求图片,是最高效的实现方式。使用该方法的图片占位代码如下所示(对于firefox浏览器,src默认的img是一个普通的内联元素,宽高设置无效):img{visibility:hidden;}img[src]{可见性:可见;}内容内容生成技术。1、实现换行::after{content:'\A';空白:pre;}2。实现加载animation.dot{display:inline-block;宽度:8em;高度:1em;行高:1;文本对齐:左;垂直对齐:-.25em;溢出:隐藏;}.dot::after{显示:块;左边距:5.2em;内容:'...\A..\A.';空白:预包装;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);反增量:count1;位置:绝对;颜色:透明;}.box1::after{内容:counter(count1);
西瓜
香蕉
胡萝卜
四、深入研究padding1、对于盒模型设置为box-sizing:border-box的元素,如果padding足够大,width会失效:width:200px;padding-left:120px;padding-right:120px;box-sizing:border-box;2.对于行内元素,padding会同时影响可视层和布局层,如果父元素设置了overflow:auto,那么内联子元素的垂直padding可能会导致父元素出现滚动条,否则如果父元素不设置overflow,只会在垂直方向重叠,不会影响布局:/*父元素设置*/.pd-2-1{overflow:auto;}.pd-2-1>span{padding-top:1em;padding-bottom:1em;}3.padding的实际应用(大家可以自己想想具体实现)1.加大li的点击区域大小nks或按钮。2、利用行内元素的padding,实现高度可控的分割线。3.使用内联元素实现瞄准点的定位距离。4.使用padding百分比值实现比例缩放图片效果:.pd-3{padding:10%50%;位置:相对;}.pd-3img{位置:绝对;宽度:100%;高度:100%;左:0;top:0;}**注意:行内元素的垂直padding会让空白节点出现ghost,这时候可以考虑设置font-size:0.5,padding和图形绘制。/*菜单*/.icon-menu{display:inline-block;宽度:120px;高度:10px;填充:35px0;border-bottom:10pxsolid;border-top:10pxsolid;背景剪辑:内容框;background-color:currentColor;}/*双点*/.icon-dot{display:inline-block;宽度:60px;高度:60px;填充:10px;边界半径:50%;边框:10px实心;背景剪辑:内容框;background-color:currentColor;}五、深入研究margin1、使用:nth-??type-of(3n)去除子元素末尾的margin。.mg-item:nth-of-type(3n){margin-right:0;}注意:如果容器可以滚动,padding-bottom的值在IE和firefox下会被忽略,chrome不会。这时候可以通过margin-bottom实现滚动容器的底部留白。本质区别在于chrome中子元素超过父元素内容框大小时显示滚动条,而IE和火狐浏览器超过paddingbox大小时显示滚动条。2.保证金合并条件。块级元素,不包括浮动元素和绝对定位元素。在默认单据流下,只有三种场景会在垂直方向合并边距。相邻的兄弟元素。父元素和第一个/最后一个子元素。*解决方法:父元素设置为块级格式化上下文元素,父元素设置border-top/bottom值。父元素设置padding-top/bottom值。父元素设置高度复制代码。合并空的块级元素边距。3.保证金合并的计算规则。“正负取最大值”、“正负值相加”、“负负最负值”。4、深入理解margin:auto。如果一侧是fixed,一侧是auto,那么auto就是剩余空间的大小。如果两边都是auto,剩余的空间平分。触发margin的前提:自动计算:当width或height为固定值时,元素具有自动填充的特性。/*1*/margin-right:20px;margin-left:auto;/*2*/margin-right:auto;margin-left:auto;4.绝对定位的元素使用margin:auto实现水平和垂直居中(兼容ie8+)。.father{位置:相对;}.child-2{位置:绝对;左:0;底部:0;右:0;顶部:0;宽度:40px;高度:20px;无效情况分析:显示计算值为inline的非替换元素的垂直边距无效。对于行内替换元素,垂直边距是有效的,不存在边距合并问题,所以边距合并永远不会发生。inline特性导致margin失败:容器中有一张图片,图片设置了margin-top。随着margin-top的负值越来越大,当达到特定的负值时,图片将不再向上偏移。六、css中的字母x和基线Thebaseline字母x的下边缘。x-height指的是字母x的高度。ex:ex是指小写字母x的高度,是相对单位。vertical-align:middle指的是基线上方1/2x-height的高度。设置内联元素的对齐方式时,是以最前面的内联元素的基线为基准,然后根据自身的vertical-align调整对齐方式。影响外部因素。所以不会有marginmerge,可以用来清除floating的影响。2.触发BFC的条件:根元素。float的值不是没有。overflow的值为auto、scroll、hidden。display的值为table-cell,inline-block。位置的值不是静态的或相对的。3.如果元素有BFC特性,就不用clear:both来清除float。4.Display:table-cell特点:无论设置多大的宽度,都不会超过表格容器的宽度。5.overflow裁剪限制:borderbox:一个带有overflow:hidden的元素同时设置了padding和border,那么当子元素超过容器的宽高设置时,裁剪边界为内边缘borderbox而不是paddingbox的内边缘。6、PC端,默认滚动条全部来自。PC端的滚动高度可以通过document.documentElement.scrollTop获取,移动端通过document.body.scrollTop获取。7、PC端滚动条的宽度约为17px。8、防止页面滚动条晃动的方法:html{/*ie8*/overflow-y:scroll;}:root{overflow-y:auto;overflow-x:hidden;}:rootbody{position:absolute;}身体{宽度:100vw;overflow:hidden;}9.多行文本溢出css方法显示省略号:.ell-rows-2{display:-webkit-box;-webkit-box-orient:垂直;-webkit-line-clamp:2;}八、相对难点分析1、相对定位位移是相对于自身。如果left/top/right/bottom的值是百分比单位,则计算的尺寸是基于父元素的。2.如果left/right或top/bottom等相反的属性同时出现,则只有一个方向的属性生效,优先级与文档流向的顺序有关。默认的文档流向是从上到下,从左到右,所以top优先于bottom,left优先于right。3.相对最小化原则。尽量不要使用relative,可以使用非依赖的绝对定位来解决一些问题。如果一定要使用relative,那么relative必须最小化(minimumcontainmentarea)——以避免层次覆盖等问题。4.级联上下文。定位元素默认的z-index:auto;这时候,就和普通的元素一样了。一旦z-index被设置为任何值,就会创建一个堆叠上下文,顺序是:堆叠上下文<负z-index