CSS常用样式(三)

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

文档流:normal flow

文档流指的是元素按照其在 HTML 中的位置顺序决定排布的过程,或者说在排布过程中将窗体自上而下分成一行行, 并在每行中按从左至右的顺序排放元素。

非浮动的块级元素独占一行,行内元素不会独占一行。

(1)特征:设置浮动的元素会脱离文档流,同时它会自动变成块元素,会使元素向左或向右移动,其周围的元素也会重新排列。

(2)影响:

  • 父容器:无法再撑开父元素的宽高

  • 其他浮动元素:根据设置浮动的属性(左/右)而依次向左或向右排列。

  • 普通元素:分为两种情况
    a.根据HTML结构为例,在设置浮动元素 前面的元素不受影响,如下图的box1不受在他下面的元素的影响

    b.根据HTML结构为例,在设置浮动元素 后面的元素无法感知到浮动元素的存在,如下图的box2无法感知到浮动元素的存在,依然按照正常的文档流排列。


    代码和效果如下:

    //CSS样式
    <style>
      .box1{
      width:200px;
      height:200px;
      border:1px solid black;
      background:red;
      
    }
    .box2{
      width:200px;
      height:200px;
      border:1px solid black;
      background:blue;
      float:left;
    }
    .box3{
      width:300px;
      height:200px;
      border:1px solid black;
      background:green;
    }
      </style>
      
    //HTML 结构
    <div class="box1"></div>
    <div class="box2"></div>
    <div class="box3"></div>
    
    image
  • 文字:文字会自动识别浮动元素并且围绕浮动元素排布

如图:

image

参考链接:CSS浮动、定位相关问题

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

(1)清除浮动:即让浮动元素继续浮动,但是清除浮动带来副作用,如下图:
设置了图片浮动,但是无法将内容撑开,整个页面显得比较丑。


image

(2)清除浮动方法:给父容器添加 clearfix

  • clear 有3个属性:left / right / both ,分别为设置清除左侧 /右侧 / 两边/ 浮动的影响,常用的为 clear: both ,通常是在浮动后面添加一个空div,设置它的清除浮动属性。,如图:

    未设置清除浮动之前效果

    image

    设置清除浮动以后效果

    image
  • 设置伪元素--推荐使用!

    //方法一
    .clearfix::after {
      content: '';
      display: block;
      clear: both;
    }
    //方法二
    .clearfix:after{
      content:"";
      display: table;
      clear: both;
    }
    
  • 给父元素设置浮动

  • zoom

    .clearfix{
      *zoom: 1;
    }
    

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

  • 定位方式: position: xxx;
    • inherit: 规定应该从父元素继承 position 的值
    • static: 默认值,没有定位。
    • relative: 生成 相对定位 的元素,相对于元素本身正常的位置进行定位
    • absolute:生成 绝对定位 的元素 ,相对于 static 定位以外的第一个祖先元素进行定位,元素的设置通过 left,top,right,bottom 属性进行规定。

    绝对定位与相对定位

    • 相对定位可以看做是特殊的普通流定位,元素位置是相对于它在普通流中位置发生的变化,而绝对定位使元素的位置与文档流无关,也不占据文档流空间,普通流中的元素布局就像绝对定位中的元素不存在一样

    • 绝对定位的元素的位置是相对于位置距离较近的非static祖先元素位置决定的。如果元素没有已定位的祖先元素,那么他的位置就相对于初始包含块html来定位.,如图:
      当在 body中没有设置position:relative 时,红色部分的位置
      当在body找设置了position:relative 时,红色部分明显下移,所以判断绝对定位是相对于 html 元素来定位的。

      image

      那么,问题来了,设置绝对定位是相对于已设置position:relative父元素的边框还是对应的paddingmargin定位呢?下面我们来验证:

      • top:auto;left:auto;
        当设置绝对定位为 auto 和没有设置属性(即默认情况下)的时候
      • top:0 ;left: 0;
        image
      • 小问题:当设置子元素为绝对定位时,它就收缩为内容的宽度,因此要给它设置宽度和高度。那么,如果给它的宽度设置为 width:100% ,则它的宽度为就是父元素内容的宽度,这个时候就要考虑自己的 marginborder和父元素的padding ,否则会超出父元素的宽度。
    • 因为绝对定位与文档流无关,所以绝对定位的元素可以覆盖页面上的其他元素,可以通过z-idex属性控制叠放顺序,z-inde 越高,元素位置越靠上。

    • fixed: 生成绝对定位的元素,相对于浏览器窗口进行定位。元素的位置通过left,top,right,bottom 属性进行规定。
    • sticky:CSS3 新属性变现类似于 position:relativeposition:fixed 的合体,在目标区域在屏幕中可见。
  • 使用场景
    • 相对定位:relative 通常和绝对定位结合使用
    • 绝对定位:absolute 通常用于设置水平和垂直居中;
    • 固定定位:fixed 适用于固定顶部导航条,广告弹窗等;

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

  • 作用:属性设置元素的堆叠顺序。拥有更高堆叠顺序的元素总是会处于堆叠顺序较低的元素的前面

  • 使用方式:只有在使用了position并脱离了文档流(absolute、fixed)的情况下可以使用,其他情况使用z-index不起作用。

    z-index: auto | number |inherit : 默认 | 使用数字 | 继承父元素 z-index 的值。

    image
  • 参考链接
    浮动、定位

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

区别:

  • position: relative: 只对元素本身有作用,不影响其它的元素的位置
  • 负margin: 会增加元素的外边距,相当于改变了元素的大小,会影响周围元素的位置

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

  • BFC: Block Formatting Context, 块级格式化上下文

    是Web页面的可视化CSS渲染出的一部分。它是块级盒布局出现的区域,也是浮动层元素进行交互的区域。

  • 特性:

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

    (1)只有属于同一个BFC时,两个元素才有可能发生垂直 Margin 的重叠,这个包括相邻元素,嵌套元素,只要他们之间没有阻挡(例如边框、非空内容、padding 等)就会发生 Margin 重叠。
    (2)因此,要解决margin重叠的问题,只要然让他们不在同一个BFC就行了,但是对于两个相邻元素来说,意义不大,没有必要给他们加个外壳,但是对于嵌套元素就很有必要了,只要把父元素设置为BFC就可以了。这样子元素的margin就不会和父元素的margin发生重叠

    • BFC不会重叠浮动元素

    • BFC可以包含浮动

    • 也有不足

      使用BFC进行浮动的时候会使父容器长度缩短,而且还有个重要缺陷——父容器解决了塌陷问题,那么父容器的父容器怎么办?overflow属性会影响滚动条和绝对定位的元素;position会改变元素的定位方式,这是我们所不希望的,display这几种定位方式依然没有解决低版本IE问题。

  • 哪些元素会生成BFC:

    • 根元素
    • float 不为 none
    • position 为 absolute 或 fixed
    • display 为 inline-block,table-cell ,table-caption ,flex ,inline-flex
    • overflow 不为 visible
  • 作用:

    • 自适应两栏布局
      代码和效果如下

      <!DOCTYPE html>
      <html>
      <head>
        <meta charset="utf-8">
        <title>JS Bin</title>
        <style>
        .child1{
          width:200px;
          height:200px;
          background: red;
          float:left;
      }
        .child2{
          width:210px;
          height:200px;
          background: blue;
          overflow:hidden;
        }
      
        </style>
      </head>
      <body>
      <div class="father">
        <div class="child1"></div>
        <div class="child2"></div>
      </div>
      </body>
      </html>
      

      在没有生成BFC时效果如下,两个块元素会重叠


      image

      在添加 overflow:hidden 时,形成了BFC,消除了影响,效果如下

      image

    • 清除内部浮动,效果上图可见

    • 防止垂直方向上的 margin 重叠。


      image
      image

      通过上面2张图可以看出,下面div设置 margin 无效,被重叠

      image

      在中间添加个div.wrap 设置其overflow:hidden 即使两个div.child 不在同一个BFC中,可阻止垂直边距合并。

参考

前端精选文摘:BFC 神奇背后的原理(转)

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

  • 合并外边距的场景:
    • 相邻的兄弟姐妹元素
    • 块元素与其第一个 / 最后一个元素
    • 空块元素
  • 合并方式:垂直方向上两个块元素的中间边距合并。如图:


    image
  • 如何阻止相邻元素外边距合并
    • 在其中添加一个空的div,阻止他们在同一个BFC
image
  • 处于静态流的元素会发生合并,所以设置 floatposition:xxx都不会发合并。
  • 设置为 inline-block 也不会发生合并。

参考链接:

外边距合并-MDN

前端面试必备——外边距合并

8.代码作业

(1)实现alert 效果
(2)实现表单效果
(3)实现模态框效果
(4)实现导航栏效果

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

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,728评论 1 92
  • 一,浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 浮动模型是一种可视化格式模型,浮动...
    DeeJay_Y阅读 856评论 0 4
  • 一、在什么场景下会出现外边距合并?如何合并?如何不让相邻元素外边距合并?给个父子外边距合并的范例 在CSS当中,相...
    dengpan阅读 564评论 0 0
  • relative:生成相对定位的元素,通过top,bottom,left,right的位置相对于其正常位置进行定位...
    zx9426阅读 929评论 0 2
  • 浮动元素有什么特征?对父容器、其他浮动元素、普通元素、文字分别有什么影响? 特征: 浮动元素会脱离正常的文档流,元...
    饥人谷_哈噜噜阅读 868评论 0 0