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

CSS盒模型及相关知识点

时间:2023-04-02 22:37:23 HTML

CSS盒模型及相关知识点盒模型有哪些类型-标准盒模型-IE盒模型两者的区别在于宽高的计算方式:标准框模型宽度=内容宽度;IE核心模型width=contentwidth+padding+borderCSS如何设置这两个模型box-sizing:border-boxbox-sizing:content-box用例子来验证:

。框{宽度:100px;高度:100px;填充:10px;边距:10px;边框:5px实心#ccc;背景色:#ccc;紫色部分——区域用padding表示灰色部分——区域用border表示米色部分——区域用margin表示部分细心的读者可以看出,从上图中,如果box-sizing没有设置,默认值为content-box,表示是标准的盒子模型。那我们看看最终渲染后的盒子模型是什么样子的?+padding+border,验证我们说的是否正确width=70+10+10+5+5表示可以通过box-sizing:border-box表示为IE模型;从上面可以看出,不同的模型计算方法是不同的。先列举下如何在JS中获取盒子模型对应的高度和宽度下面是几种常用的方法,然后再说明document.styledocument.currentStylewindow.getConputed的优缺点Style(Element)Element.getBoundingClientRect在讲解document.style之前,先说说CSS样式的几种设置方式:-内联样式-内联样式-外部样式表这三种具体代码表示如下:
/*内联样式*/
/*内联样式*//*外部样式表a.css*/同等权重下,优先级为内联样式>内联样式>外部样式。document.styleHTMLElement.style属性返回一个CSSStyleDeclaration对象,表示元素的内联样式属性(attribute),但忽略任何样式表应用的属性说白了就是通过内联样式和外部样式表来设置一个元素的样式,不能通过document.style获取。注意:document.style返回的对象是只读的,不能直接通过document.style="color:#ccc"直接为其设置样式,否则设置不会生效。一般推荐的方法如下:varele=document.querySelector(".box");//单属性设置ele.style.color="#ccc";//使用一条语句设置多个样式ele.setAttibute("style","color:#ccc;border:1pxsolidred;");//orele.style.cssText="color:#ccc;border:1pxsolidred;"回到第一个实例,尝试通过document.style获取元素的宽度。varele=document.querySelector(".box");ele.style.width//""根据前面的内联CSS,给元素指定了width\height,但是没有获取到;也就是说,它只包含在style属性(attibute)上声明的CSS样式。通过style属性给元素添加属性:
varele=document.querySelector(".box");ele.style.width//"100px"从两种模式中,得到的宽度是一样的,document.s样式表示样式的宽度;它不代表渲染框的大小。优点——兼容性好缺点——只能获取通过style属性设置的样式。document.currentStyle.width弥补了document.style的不足,可以获取内联、内联和外部样式表设置样式。
varele=document.querySelector(".box");el.currentStyle.width//"100px"缺点:非标准属性,仅在IE;window中使用。getComputedStyle获取计算后应用于当前元素的CSS样式,可以是动画应用的当前值,也可以是样式表设置的值。从API描述来看,既然是获取和计算出来的,肯定包括内联样式、内联样式和外部样式。先来看具体例子:varele=document.querySelector(".box");vargetComputedStyle=window.getComputedStyle(ele);getComputedStyle.width//"100px"优点:-获取所有应用于元素的样式。-现在浏览器支持IE9+、Frifox、Chrome、Safire、Opera、Edge等兼容性可以查看[CanIUse](https://caniuse.com/#search=getComputedStyle)缺点:-不支持低版本的IE浏览器。element.getBoundingClientRect()概述方法获取元素边界框的大小和位置,relativetotheviewport方法获取元素相对于视口的大小和位置信息。语法rectObject=object.getBoundingClientRect();返回值是一个DOMRect对象,它是元素的getClientRects()方法返回的一组矩形。即:是与元素相关CSS边框的集合对于前面的例子,使用getBoundingClientRect如下:varele=document.querySelector(".box");ele.getBoundingClientRect();//DOMRect{x:18,y:10,width:100,height:100,top:10,right:118,bottom:110,left:18}x:表示左边到左边的距离viewporty:表示距视口顶部的距离width:表示元素的宽度(如果box-sizing:border-box;contentwidth;否则:contentwidth+padding+border)height:表示元素的高度(ifbox-sizing:border-box;contentheightotherwise:contentheight+padding+border)top:盒子顶部(border)到视口顶部的距离left:盒子左边的距离totheleftsideoftheviewportbottom:盒子底部到视口顶部的距离right:盒子右侧到视口左侧的距离更精确缺点X,Y属性没有IE9支持,IE8及以下版本不兼容。注意:在计算外接矩形时,会考虑视口区域内(或其他可滚动元素)的滚动操作,也就是说,当发生滚动时,其对应的值会相应改变。顶部、左侧等都会发生变化。因此,它们的值是相对于可见区域而言的,而不是绝对的。通过图理解上面这句话:左边是滚动前,右边是滚动后;很明显,同一个元素在不同情况下得到的Top和Left是不一样的;如果想获取元素相对于网页左上角的属性值,那么就在top和left的基础上加上滚动值(window.scrollY,window.scrillX)即可。因为Firefox和IE不支持window.scrollY和window.scrollX。考虑兼容处理,可以使用window.pageYOffset,window.pageXOffset被替换。兼容列表如下:window.scrollY和window.scrollXChromeFirfoxIEOperaSafariYesNoNoNoNowindow.pageYOffset和window.pageXOffsetChromeFirfoxIEOperaSafariYesYesYesIE9+YesYesIE8及以下版本,不支持scollY和pageYOffset,必须使用其他非标准属性获取:://varsupportPageOffset=window.pageXOffset!==undefined;//标准模式varisCSS1Compat=((document.compatMode||"")==="CSS1Compat");varx=supportPageOffset?窗口.pageXOffset:isCSS1Compat?document.documentElement.scrollLeft:document.body.scrollLeft;vary=supportPageOffset?window.pageYOffset:isCSS1Compat?文档.documentElement.scrollTop:文档.body.scrollTop;什么是模式?``CSS1Compat``代表标准模式;``BockCompat``代表混合模式。由于这两种模式,在IE中的区别是不同的;IE6及以下版本不支持document.documentElement.scrollTop;您可以参考其他有关渲染模式的信息。