《CSS世界》注4:流保护与销毁
时间:2023-03-31 01:28:55
CSS
上一篇:《CSS世界》注3:内联元素与对齐下一篇:《CSS世界》注5:CSS层叠规则与元素隐藏虽说是“浮动与定位”,但内容《CSS世界》的第6章不仅包含了浮动定位,而且很大一部分文字都是在讲BFC和overflow。更吸引人的是,作者将float/absolute/relative描述为“魔界三兄弟”,将原本枯燥乏味的理论知识变成了玄幻小说。absolute和float可以看作是“同父异母”的兄弟关系。他们的父亲是同一个人,CSS界的大魔王,属于魔界;但是他们的妈妈不是一个人,absolute的妈妈是魔界的,float的妈妈是人界的。如果说float和absolute是同父异母的兄弟,那么relative就是absolute的哥哥。当年,MadonnaPosition生了好几个儿子。其中之一就是绝对,非常强大和霸道。考虑到Absolute以后会麻烦Float去普通世界,以他的个性和霸道的能力,肯定会影响普通流媒体世界的秩序,所以处女位让她心地善良的大儿子Relative直接住在了正常的流媒体世界,帮忙盯紧绝对,别让那个叫绝对的小恶魔到处惹事。一、浮动float和BFC1。1Floating浮动的本质:实现文字环绕的效果目前一般使用浮动来实现框的水平显示(左右栏布局),但往往会造成父框的折叠浮动元素;那么如何去除浮动的影响呢?网上随便百度一下清除浮动的方法:在父元素上设置overflow属性清除浮动,使用extra标签的方法清除伪元素。就是防止自己和之前的浮动元素相邻,从而达到清除浮动元素的效果。示例如下:/*ul>li*7*/li{width:20px;高度:20px;背景色:#ccc;边距:5px;float:left;}li:nth-of-type(3){clear:both;}结果如下:“在父元素上设置溢出属性”的方法是利用BFC的特性(将下面详细解释)1.2BoundaryBFCBFC的全称是blockformattingcontext,中文是“块格式化上下文”。与之对应的还有IFC,即inlineformattingcontext,中文就是“行内格式化上下行”。因此,BFC元素不可能重叠margin,因为margin重叠会影响到外面的元素;BFC元素也可以用来清除浮动的影响,因为如果不清除,子元素浮动时父元素的高度会塌陷,势必会影响后面元素的布局和定位,这显然违反了BFC。元素的子元素不会影响外部元素的设置。如何触发BFC:根元素中float的值不是noneoverflowauto、scroll或hiddendisplay的值table-cell、table-caption、inline-block中任意位置的值不是relative和static.因此:只要满足以上任意一项(触发BFC),元素就不会出现margin重叠和float带来的“高度”“塌陷”的问题张Dablabla用了很多篇幅对比了各种实现方式BFC,最后得出一个结论:overflow:hidden是最理想的BFC触发方式,副作用最小1.3float+BFC实现健壮的两列布局我是帅哥,好巧,我也是帅哥,所以看这篇博文的都是帅哥~
.father{最大宽度:200px;border:1pxsolid#444;}.fatherimg{float:left;宽度:60px;margin-right:10px;}.bfc{overflow:hidden;}如图所示:原理:利用BFC的附魔特性,避免文字换行(浮动),实现左侧固定,右侧自适应两栏布局。2.overflow属性再次申明:overflow:hidden是触发BFCBoundary的最佳结构2.1overflow和滚动条的知识移动端本身的屏幕尺寸有限,滚动条一般都是浮动的,会不占用可用宽度。但是在PC端,尤其是Windows操作系统下,几乎所有浏览器的滚动条都会占用宽度,而这个宽度是固定的如何获取浏览器滚动条的宽度:
<divid="in"class="in"> .box{宽度:400px;溢出:滚动;}console.log(400-document.getElementById("in").clientWidth);自定义滚动条属性:整体部分,::-webkit-scrollbar;两端的按钮,::-webkit-scrollbar-button;外轨,::-webkit-scrollbar-track;内部轨道,::-webkit-scrollbar-track-piece;滚动滑块,::-webkit-scrollbar-thumb;角落,::-webkit-scrollbar-corner开发中常用的三个属性::-webkit-scrollbar{/*血槽宽度*/width:8px;height:8px;}::-webkit-scrollbar-thumb{/*拖动条*/background-color:rgba(0,0,0,.3);border-radius:6px;}::-webkit-scrollbar-track{/*背景槽*/background-color:#ddd;边界半径:6px;}Tips:处理页面滚动条抖动问题(一般加载多屏数据后)html{overflow-y:scroll;/*对于IE8*/}:root{overflow-y:auto;overflow-x:hidden;}:rootbody{position:absolute;}body{width:100vw;overflow:hidden;}2.2overflow和textoverflow一行textoverflow:.ell{text-overflow:ellipsis;空白:nowrap;overflow:hidden;}多行文本溢出(此处为2行):.ell-rows-2{display:-webkit-box;-webkit-box-orient:垂直;-webkit-line-clamp:2;}2.3overflow与锚点定位相关的两种情况可以触发锚点定位行为的发生:(1)URL地址中的锚链对应锚点元素,具有交互行为;
发展历程>发展历程利用上面的结构,点击a标签滚动页面到h2(2)焦点锚点点定位,焦点锚元素处于焦点状态“焦点”锚点定位是指链接或按钮、输入框等可被聚焦的元素被聚焦时发生的页面重定位现象。举个很简单的例子,在PC端,当我们使用Tab快速定位可聚焦元素时,如果我们的元素刚好在屏幕外,浏览器会自动将屏幕外元素重新定位到锚点定位中的两个小案例参考画面:锚点定位:返回页面顶部锚点定位:简单的标签切换注意!注意!注意!overflow:hidden声明设置在元素上。当里面内容的高度溢出时,滚动依然存在,但是滚动条不存在!,所以我们可以使用anchor定位或者js来控制滚动。3、绝对定位absolute3.1绝对包含块(1)块级元素:相对于首位不静态的祖先元素,直到html(2)内联元素:单行:假设一个内联框,宽度为为内联元素的前后生成了0,那么这两个内联框的paddingbox之外的boundingbox就是内联元素的“包含块”。Jointdecision)直接看概念一般容易混淆。上图(红色虚线区域为包含块)案例:基于行内元素定位的提示实现 .icon{margin:50px0050像素;显示:内联块;宽度:20px;高度:20px;background:url(http://demo.cssworld.cn/images/6/delete.png)no-repeatcenter;}.tip{position:relative;&::before,&::after{位置:绝对;转换:translateX(-50%);左:50%;可见性:隐藏;}&::before{内容:属性(数据标题);顶部:-33px;填充:2px10px3px;行高:18px;边界半径:2px;背景色:#333;文本对齐:左;颜色:#fff;*/空白:nowrap;}&::after{内容:“”;边框:6px实心透明;边框顶部颜色:#333;顶部:-10px;}&:hover::before,&:hover::after{transition:visibility.1s.1s;能见度:可见;}}最终效果:3.2无依赖的绝对定位注意:absolute是一个非常独立的CSS属性值,它的样式和行为不依赖于任何其他CSS属性。是可以做到的,正是基于此,独立定位才强大。首先考虑一个问题:如果一个标准的流元素后面跟着一个绝对元素(没有left等orientation属性),此时如何显示?定位元素后面跟着一个标准的流程元素,此时应该怎么显示呢?