css浮动、BFC、定位问题

1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响?

  • 何谓浮动元素?有什么特征?
    所谓浮动元素,即是设置了浮动属性的元素。其特征为:

  • 1.浮动的框可以向左或者向右移动,直到它的外边缘碰到包含框(其父元素)或者另一个浮动框为止,这条属性也就意味着浮动元素可以像行内元素的样式一样水平排列,但如果高度设置存在问题,那么多个浮动元素水平排列会存在“卡住”的情况,简单的测试一下: 框3就被框1卡住了

  • 2.浮动的框不在文档的普通流中,所以文档普通流中的块框感知不到浮动框的存在;

  • 3.在css中任何元素都可以浮动,浮动元素会生成一个块级框,而不论该元素本身是什么元素。

  • 对父容器、其他浮动元素、普通元素、文字分别有什么效果?
    浮动最初的目的是为了实行文字的环绕效果.

    根据测试可以看出:
      - 对于处于文档普通流中的块级元素而言,它无法感知到浮动元素的存在,故实际的效果为浮动元素覆盖了块级元素的一部分,当然也可以说块级元素的一部分钻到了浮动元素的下面;
      - 而块级元素包含的文本则可以感知到浮动元素的存在(设定如此),因此环绕着浮动元素排列。
    - 那么除了文本之外,像图片(一般认为图片是行内元素),一些表单元素(如单行文本域、单行密码域、单选按钮、多选按钮、多行文本域、下拉菜单、上传域、隐藏域、提交按钮、普通按钮)这些行类元素,他们产生行类框是否能够识别到浮动元素了?这个待测试。。。。。
    
    • 简单测试二
    • 如果一个父元素包含浮动元素,按照设想,应该是浮动元素在父元素的框内向左浮动或者向右浮动,然而实际测试发现,父元素未被浮动元素撑开,父元素的高度坍塌。

2.清除浮动指什么? 如何清除浮动? 两种以上方法

  • 清除浮动指什么?
    由测试2可以看出,浮动元素会脱离文档的普通流,而其父容器在普通流中,则存在父元素高度坍塌问题,如果我们希望浮动元素在其父容器内部浮动,则需要清除浮动,而浮动元素的能够浮动,是因为包围它的行框缩短了,从而给浮动元素留下了空间,浮动原理简述,而清除浮动就是让包围浮动元素的行框恢复原长度,但浮动元素客观存在(虽然不在普通文档流中),占据了一定空间,为了恢复原长度,行框应该向下或向上移动,直到左右没有浮动元素为止(即给浮动元素上面或下面添加了足够的清除空间),这样也就恢复了原长度。
  • 如何清除浮动?
    清除浮动主要是两种方法,即使用clear属性 ,或者BFC清除浮动。

3.有几种定位方式,分别是如何实现定位的,参考点是什么,使用场景是什么?

static
元素框正常生成。块级元素生成一个矩形框,作为文档流的一部分,行内元素则会创建一个或多个行框,置于其父元素中。
relative
元素框偏移某个距离。元素仍保持其未定位前的形状,它原本所占的空间仍保留。
absolute
元素框从文档流完全删除,并相对于其包含块定位。包含块可能是文档中的另一个元素或者是初始包含块。元素原先在正常文档流中所占的空间会关闭,就好像元素原来不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
fixed
元素框的表现类似于将 position 设置为 absolute,不过其包含块是视窗本身。

  • 提示:相对定位实际上被看作普通流定位模型的一部分,因为元素的位置相对于它在普通流中的位置。

    • 1.普通流,即为设置元素的默认位置;
    • 2.相对定位,即相对于元素在文档流中的默认位置进行偏移;
    • 3.绝对定位,即相对于最近的已包含的祖先元素,如果元素没有最近的祖先元素,那么则相对于最初的包含块。

4.z-index 有什么作用? 如何使用?

z-index 属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面。
注释:元素可拥有负的 z-index 属性值。
注释:Z-index 仅能在定位元素上奏效(例如 position:absolute;)!
说明
该属性设置一个定位元素沿 z 轴的位置,z 轴定义为垂直延伸到显示区的轴。如果为正数,则离用户更近,为负数则表示离用户更远。

  • 取值与意义
    auto 默认。堆叠顺序与父元素相等。
    number 设置元素的堆叠顺序。
    inherit 规定应该从父元素继承 z-index 属性的值。

5.position:relative和负margin都可以使元素位置发生偏移?二者有什么区别

简单测试一下:

  • 绝对定位有偏移
  • 加了负margin也偏移了
    两者的区别在于:
    position:relative;只相对自己原本位置发生偏移,不影响其它普通流中元素的位置。
    margin:除了让元素自身发生偏移还影响其它普通流中的元素。

6.BFC 是什么?如何生成 BFC?BFC 有什么作用?举例说明

  • BFC是什么?
    BFC英文全称是block formatting context,中文翻译为块级话格式上下文(个人认为这个翻译太过直译了,应该采用意译更好),在css的W3C官方文档中是这样介绍的

Floats, absolutely positioned elements, block containers (such as inline-blocks, table-cells, and table-captions) that are not block boxes, and block boxes with 'overflow' other than 'visible' (except when that value has been propagated to the viewport) establish new block formatting contexts for their contents.
In a block formatting context, boxes are laid out one after the other, vertically, beginning at the top of a containing block. The vertical distance between two sibling boxes is determined by the 'margin' properties. Vertical margins between adjacent block-level boxes in a block formatting context collapse.
In a block formatting context, each box's left outer edge touches the left edge of the containing block (for right-to-left formatting, right edges touch). This is true even in the presence of floats (although a box's line boxes may shrink due to the floats), unless the box establishes a new block formatting context (in which case the box itself may become narrower due to the floats).
For information about page breaks in paged media, please consult the section on allowed page breaks.
翻译则为:
浮动元素和绝对定位元素,非块级盒子的块级容器(例如 inline-blocks, table-cells, 和 table-captions),以及overflow值不为“visiable”的块级盒子,都会为他们的内容创建新的BFC(块级格式上下文)。
在BFC中,盒子从顶端开始垂直地一个接一个地排列,两个盒子之间的垂直的间隙是由他们的margin 值所决定的。在一个BFC中,两个相邻的块级盒子的垂直外边距会产生折叠。
在BFC中,每一个盒子的左外边缘(margin-left)会触碰到容器的左边缘(border-left)(对于从右到左的格式来说,则触碰到右边缘)。
翻译参考

  • BFC如何产生?
    可见官方的解释是比较晦涩的,那没可以先这样简单理解,即BFC是一种独立的布局模式,当元素满足上述特征时,即会为元素及其内容创建一个独立BFC布局模式,这种布局模式只对创建元素及其内容有作用,对外界其他元素则没有影响。
    简单点说,当对元素设置以下属性就可以生成BFC:
    float: left | right;(浮动元素)
    overflow: hidden | auto | scroll;(overflow值不为visable)
    display: table-cell | table-caption | inline-block;(非块级元素)
    position: absolute | fixed;(绝对定位元素)

-BFC有什么作用(特性)?

  • 1、BFC会阻止垂直外边距(margin-top、margin-bottom)折叠

    • 按照BFC的定义,只有同属于一个BFC时,两个元素才有可能发生垂直Margin的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如边框,非空内容,padding等)就会发生margin重叠;

    • 因此要解决margin重叠问题,只要让它们不在同一个BFC就行了,但是对于两个相邻元素来说,意义不大,没有必要给它们加个外壳,但是对于嵌套元素来说就很有必要了,只要把父元素设为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠;

  • 2、 BFC不会重叠浮动元素;

  • 3、BFC可以包含浮动;
    我们可以利用BFC的第三条特性来“清浮动”,这里其实说清浮动已经不再合适,应该说包含浮动。也就是说只要父容器形成BFC就可以。

BFC的问题还是需要研究,目前似懂非懂!!!!!!!!

7.在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例

在CSS当中,相邻的两个盒子(可能是兄弟关系也可能是祖先关系)的外边距可以结合成一个单独的外边距。这种合并外边距的方式被称为折叠,并且因而所结合成的外边距称为折叠外边距。

  • 当两个盒子的外边距均为正时,折叠外边距取外边距更大的那个;
  • 当两个盒子的外边距 均为负时,折叠外边距取外边距绝对值更大的那个;
  • 当两个盒子的外边距一正一负时,折叠外边距取两个外边距值的和。

产生折叠的必备条件:margin必须是邻接的!
而根据w3c规范,两个margin是邻接的必须满足以下条件:

  • 1.必须是处于常规文档流(非float和绝对定位)的块级盒子,并且处于同一个BFC当中。
  • 2.没有线盒,没有空隙(clearance),没有padding和border将他们分隔开
  • 3.都属于垂直方向上相邻的外边距,可以是下面任意一种情况:
    • 元素的margin-bottom与其下一个常规文档流的兄弟元素的margin-top
    • height为auto的元素的margin-bottom与其最后一个常规文档流的子元素的margin-bottom
    • 高度为0并且最小高度也为0,不包含常规文档流的子元素,并且自身没有建立新的BFC的元素的margin-top和margin-bottom

以上的条件意味着下列的规则:

  • 1.创建了新的BFC的元素(例如浮动元素或者'overflow'值为'visible'以外的元素)与它的子元素的外边距不会折叠
    浮动元素不与任何元素的外边距产生折叠(包括其父元素和子元素)
  • 2.绝对定位元素不与任何元素的外边距产生折叠
    inline-block元素不与任何元素的外边距产生折叠
  • 3.一个常规文档流元素的margin-bottom与它下一个常规文档流的兄弟元素的margin-top会产生折叠,除非它们之间存在间隙(clearance)。
  • 4.一个常规文档流元素的margin-top 与其第一个常规文档流的子元素的margin-top产生折叠,条件为父元素不包含 padding 和 border ,子元素不包含 clearance。
  • 5.一个 'height' 为 'auto' 并且 'min-height' 为 '0'的常规文档流元素的 margin-bottom 会与其最后一个常规文档流子元素的 margin-bottom 折叠,条件为父元素不包含 padding 和 border ,子元素的 margin-bottom 不与包含 clearance 的 margin-top 折叠。
  • 6.一个不包含border-top、border-bottom、padding-top、padding-bottom的常规文档流元素,并且其 'height' 为 0 或 'auto', 'min-height' 为 '0',其里面也不包含行盒(line box),其自身的 margin-top 和 margin-bottom 会折叠。

以上引用自
文章来源
简单测试一下父子外边距合并

8.代码部分

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,737评论 1 92
  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 862评论 0 4
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 933评论 0 2
  • 1.浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动元素不在文档的普通流中,它可以...
    饥人谷_Young丶K阅读 426评论 0 0
  • 我只觉得虚空
    磨砂琥阅读 139评论 0 1