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

从CSS盒模型开始

时间:2023-04-03 00:13:43 HTML

前言总结:盒模型、BFC、IFC、marginmerging等概念和问题的总结Damonare个人博客是学习之道,不先于拙劣的理论;理论差的关键一定要先阅读。文本CSS盒模型是CSS基础的基础。我之前对这方面的理解是否有偏差?由于涉及到的知识点比较多,所以写一个总结备忘录。本来打算两周更新一次博文,结果时间都花在刷题上了。我在leetcode上做了很多关于算法数据结构的题,记录在了github里,但其实我也在更新~只是对之前的一些博文的复习。纠错:)?最近秋招在即,压力倍增。前几天把博客导入页面的本科三年级改成了本科四年级。不禁感慨时光飞逝。一转眼,我的这个小窝已经快一年了。当我第一次建立这个网站时,我想找个地方谈谈。有些人可能不喜欢说话,只喜欢写(比如我)。但是,自从实习以来,我实在是提不起精神来写。遇到的一些坑,不想单独写博客记录。这里还是想保持纯正,就是把难点总结一下,理解一下。其他的一般都托管在github库中记录。闲话不说,先来说说今天的主角吧???CSS盒子模型大家都很熟悉了,但是为了保证文章的完整性还是想先介绍一下。?盒模型CSS盒模型:在一个文档中,每个元素被抽象成一个盒,每个盒包括四部分(从内到外):内容、填充、边框(border)、外边距(margin)。见上图,是从二维的角度来分析的。让我们来一张三维图:?这张图非常形象地解释了CSS盒子的组成:contentbox:三维盒子的核心paddingbox:内边距区域padding区域延伸到周围的padding边框。如果内容区域设置了背景、颜色或图片,这些样式会被扩展到padding(当然我们可以通过background-clip来设置作用区域)borderbox:由border和4个borderedge组成。如果borderwidth设置为0,则border边缘与padding边缘重叠;marginbox:由margin和4个marginedges组成。如果边距宽度设置为0,则边距边缘与边框边缘重叠。?看起来很复杂……用PS层的概念来更好地理解这块。最上面的是contentbox,接下来的是paddingbox,borderbox,marginbox。那么盒子模型一般分为两种:IE盒子模型所谓IE盒子模型,就是以前的IE浏览器实现的一种奇怪的盒子模型。这有多奇怪?当我们这样设置时:div{width:100px;height:100px;}理论上我们要设置的是内容框的宽高,但是IE在解析的时候会按照这个规则来解析:width=content-width+padding-width+border-widthheight=content-height+padding-height+border-height这样就导致了这种尴尬的情况:如果下面没有内容,直接点这里?我在上面

我在下面
//CSS。向上{宽度:100px;高度:100px;边框:1px纯蓝色;边距:100px;}.down{宽度:100px;高度:100px;边框:1px纯红色;元素应该相距200px,但它们不是。父子元素如果块级父元素没有topborder、toppadding、inlinecontent、clearfloat这四个属性(对于topborder和toppadding,也可以说当topmargin和toppadding为0),那么这个块级元素的topmargin和它的第一个子元素可以说是“靠得很近”。这时,块级父元素的上外边距和它的第一个子元素就会合并。也就是说,父元素显示的外边距将直接成为父元素及其第一个子元素。子元素的margin-top中的较大者。?//HTML我是儿子
//CSS.parent{width:100px;高度:200px;背景:红色;margin-left:100px;}.child{width:50px;高度:50px;边距顶部:100px;border:1pxsolidblue;}上面的代码可能感觉父元素没有topmargin,其实不然。MDN给了三种情况,不过我觉得第三个空块元素可以包含在这两种里面,所以没提?那么如何解决合并边距的情况呢?看下一个概念……BFC?定义:块格式化上下文是网页可视化CSS渲染的一部分。这是块盒和浮动布局相互作用的地方。那么触发BFC的情况有哪些呢?请参阅MDN:块格式化上下文由以下之一创建:根元素或包含它的其他元素浮动(元素的浮动不是无)绝对定位的元素(元素具有绝对或固定的位置)内联块(elementhasdisplay:inline-block)tablecell(elementhasdisplay:table-cell,HTMLtablecell默认属性)tabletitle(elementhasdisplay:table-caption,HTMLtablecaption默认属性)block元素有overflow,以及值不可见显示:流根。请注意,根元素创建了一个BFC。BFC还有一个特点:内部块级框的垂直排列由margin决定,同一个BFC的框的外margin会合并为一个BFC。隔离容器,内部子元素不影响外部元素的边距框的左侧,每个元素接触包含块边框框的左侧(对于从左到右的格式,反之亦然)。即使存在浮动也是如此。BFC的区域不会和浮动框重叠。那么,如何使用BFC来解决上面两种合并边距的情况呢?如果下面没有内容,请戳这里?一些内联文本

后跟一个段落

后跟更多的内联文本。//会创建两个匿名块框,一个包含

前面的文本(一些内联文本),一个包含

后面的文本(后面是更多的内联文本),块级元素触发BFC,内联元素什么会触发?IFCIFC仅在块级元素仅包含内联级元素时才会生成。行内框的概念当一个元素的CSS属性display的值为inline、inline-block或inline-table时,它??被称为行内级元素。在视觉上,它将内容和其他内联级元素排列成多行。典型的如段落内容、文本(可以有强调等多种格式)或图片,都是行内级元素。行内级元素生成行内级框并参与行内格式化上下文。也参与生成行内格式化上下文的行内级框称为行内框。所有display:inline非替换元素生成的框都是内联框。不参与生成行内格式化上下文的行内级框称为原子行内级框(*atomicinline-levelboxes)。这些框是由可替换的行内元素,或者显示值为inline-block或inline-table的元素生成的,不能拆分成多个框。此外,CSS3还增加了两种格式化上下文:GFC(GridFormattingContexts)网格格式化上下文和FFC(FlexFormattingContexts)Flex格式化上下文,分别在元素显示为grid、flex、inline-flex时触发定位常规流程区分了这些盒子的概念,具体怎么排列呢?以下来自MDN:在常规流中,框一个接一个地排列。在块级格式化上下文中,它们垂直排列;在行内格式化上下文中,它们水平排列。当position为static或relative且float为none时触发常规流。浮动对于浮动定位方案,盒子被称为浮动盒子。它位于当前行的开头或结尾。这会导致常规流环绕其周边,除非设置了clear属性。使用浮动定位方案,元素CSS属性position为static或relative,则float不为none。如果float设置为left,则float从行框的开头定位。如果设置为右侧,则浮动位于行框的末尾。绝对定位(Absolutepositioning)对于绝对定位方案,将盒子从正常流中移除,而不影响正常流的布局。它相对于它的包含块定位,相关的CSS属性:top、bottom、left和right。如果元素的position属性是absolute或者fixed,那么它就是一个绝对定位的元素。固定定位元素也是绝对定位元素,其包含块是视口。当页面滚动时,它会固定在屏幕上,因为视口不会移动。多于。后记参考文章MargincollapseBoxmodelBlockformattingcontextVisualformattingmodel