float

约定不等于承诺〃 2024-05-24 03:56 115阅读 0赞

CSS 之 float

我们几乎想不出其他任何使文字环绕图片的效果,除了使用float

概念

  • float 将元素放在包含这个元素容器的左边或右边,并允许文本或行内元素包围这个元素。这个元素从页面的正常流中脱离,但仍然属于这个流的一部分

    • float 这点和 absolute定位不同,在官方文档介绍绝对定位的元素从流中脱离,而其他非绝对定位的元素在定位时好像感觉不到绝对定位元素的存在。
    • 先看一个文字环绕图片的例子
    • 在这个例子中,上面的图像左浮动,文字围绕在图像右侧和下侧;下面的图像右浮动,围绕在图像的左侧和下侧
    • 在这里插入图片描述
    • 如果我们将图像设置为absolute的绝对定位会怎样呢?(图片覆盖了文字,文字被图片挡住w(゚Д゚)w)
    • 在这里插入图片描述
    • 如果你觉得对比还不清楚,就看一个动态的。当我们动态改变更换图像从而改变图像的大小时,使用float布局的图像文字会随着图像改变位置。而使用absolute布局的图像文字依然被深深地遮挡着。。。(为了能让被遮挡的文字看见,我把给你一颗爱心复制了好几遍♥)
    • 在这里插入图片描述
    • 在这里插入图片描述

语法

  • float的值

    • left: 元素会浮动到包含它的块元素的左边
    • right: 元素会浮动到包含它的块元素的右边
    • none: 元素不浮动,默认值
    • inline-start: 元素会浮动到包含它的块元素的的开始边

      • 奇了怪了,什么是开始边?你可能需要先了解下CSS direction属性。这个属性指定文本或表格列的方向。看个例子
      • 默认的汉字和英文都是从左到右书写的,但是像希伯来语和阿拉伯语是从右到左书写的,这时候就需要指定文字的方向,注意我们使用了unicode-bidi: bidi-override;,如果不加这个属性,中文的效果和text-align: right;一样,除了文字最后的句号位置跟加上一样。
      • .left {

        1. direction: ltr;

        }
        .right {

        1. direction: rtl;
        2. unicode-bidi: bidi-override;

        }

      • 在这里插入图片描述
    • inline-end: 元素会浮动到包含它的块元素的结束边

      • 下面看看浮动和这个属性之间的关系吧。
      • 在这里插入图片描述

高度塌陷与清除浮动

高度塌陷

  • 高度塌陷:是float元素影响其父元素产生的效果。如果父元素包含float元素,那么父元素就会塌陷其高度变为 0。在这里插入图片描述

clear

  • 如何修复高度塌陷呢?我们需要了解一下clear属性。该属性决定一个元素在清除浮动后是否应该移动到该元素之前的浮动元素后面。这个元素可以作用在浮动元素或非浮动元素上。有下面的值;

    • none: 元素不会清除浮动。
    • left: 元素向下移动,用于清除该元素之前的左浮动。
    • right: 元素向下移动,用于清除该元素之前的右浮动。
    • both: 元素向下移动,用于清除该元素之前的左右浮动。
    • inline-start:
    • inline-end: 和inline-start都类似leftright,参见上面对float这两个值的介绍。
应用于非浮动元素
  • 我们先看一个小demo,了解一下这个元素分别作用在浮动元素和非浮动元素上的效果。当清除浮动应用于非浮动元素时,比较好理解。从定义理解,文字清除了左边的浮动后,移动到了该元素之前的左浮动元素(即文字前面的粉色div)的后面;清除了右边的浮动后,移动到了该元素之前的右浮动元素(即文字前面的蓝色div)的后面。
  • ⚠:移动时,会发生margin collapse
  • 注意这里的前后说的是在 HTML 中的书写顺序,不是在页面中的看到的前后。稍后我们在浮动元素上清除浮动你就会发现我说的没错。
  • 浮动到左边1

    浮动到右边1


    14道成了肉身,住在我们中间,充充满满地有恩典,有真理。我们也见过他的荣光,正是父独生子的荣光。
    15约翰为他作见证,喊着说:“这就是我曾说,‘那在我以后来的,反成了在我以前的,因他本来在我以前。’”
    16从他丰满的恩典里,我们都领受了,而且恩上加恩。
    17律法本是藉着摩西传的,恩典和真理都是由耶稣基督来的。
    18从来没有人看见神,只有在父怀里的独生子将他表明出来。
  • 在这里插入图片描述
应用于浮动元素
  • 那我们看看clear作用在浮动元素上会有什么效果吧,很显然的是,当左2元素清除左浮动时,一共5个元素都移动到了浮动元素(左1)的下边;但是当右2元素清除右浮动时,却只有2个元素移动到浮动元素(右3)的下边,这是为什么呢?为什么清除右浮动时,三个左浮动元素没有改变位置呢?。
  • 在这里插入图片描述
  • 原因就在这6个浮动元素的 html 书写顺序上。清除左2的左浮动时,根据定义左2会移动到它前面浮动元素(左1)下面,但是这个移动会影响到左2后面的浮动元素(左3, 右1, 右2, 右3),因为后面浮动元素不能比前面浮动元素(左2)更高。参见这里?。
  • 浮动到左边1

    浮动到左边2

    浮动到左边3

    浮动到右边3

    到右边2

    浮动到右边1

修复塌陷:清除浮动

  • 方法1:加空div

    • 既然清除浮动可以让元素移动到浮动元素下面,将空白的div元素加到浮动元素后父元素就会恢复高度。
    • 添加或删除empty div


    • $(‘#addDiv’).bind(‘click’, function(event) {

      1. if (event.target.checked === true) {
      2. $('.box').append('<div class="empty" style="clear: both;"></div>')
      3. } else {
      4. $('.empty').remove()
      5. }

      })

    • 在这里插入图片描述
    • 这样看起来效果很好,但容易被人诟病的是div并不展示任何内容仅仅为了清除浮动。
  • 方法2:使用overflow: hidden;

    • 给浮动元素的父元素添加overflow: auto或者overflow: hidden就可以使父元素容纳子元素从而使高度恢复。这个方法不用添加任何额外的空元素,但是overflow并不是为清除浮动设立的 CSS 属性。使用的时候要小心避免触发任何的滚动条。

    • 添加或删除Overflow


    • $(‘#addDiv’).bind(‘click’, function(event) {

      1. if (event.target.checked === true) {
      2. $('.box').css('overflow', 'hidden');
      3. } else {
      4. $('.box').css('overflow', 'inherit');
      5. }

      })

    • 在这里插入图片描述
    • 为什么添加overflow: hidden;可以清除浮动呢?因为添加完这个属性,父元素就变成了BFC(Block Formatting Context, 块格式化上下文)。详细了解☞点这里。如果一个元素是BFC,这个元素就会包含其内部的浮动元素,用官网的话说就是让浮动内容和周围的内容等高。其实,只要overflow不是visible,其他值都可以。
  • 方法3:clearfix

    • 这个方法使用伪元素选择器:after(单冒号写法,兼容IE)清除浮动。只需给父元素添加clearfix类和下面的代码
    • .clearfix:after {

      1. content: '.';
      2. display: block;
      3. overflow: hidden;
      4. height: 0;
      5. clear: both;

      }

    • 解释一下代码值得注意的部分。

      • 如果content: ''为空,可以删除overflow: hidden; height: 0;这两行代码,MDN官网就是这么写的。如果不为空自然要加上 overflow 和 height。
      • 为什么要加display: block;呢?因为:after的内容是内联元素,而clear只能作用在块元素

发表评论

表情:
评论列表 (有 0 条评论,115人围观)

还没有评论,来说两句吧...

相关阅读

    相关 float

    CSS 之 float我们几乎想不出其他任何使文字环绕图片的效果,除了使用float概念float 将元素放在包含这个元素容器的左边或右边,并允许文本或行内元素包围这个元...

    相关 css float

    float定义和用法 float 属性定义元素在哪个方向浮动。以往这个属性总应用于图像,使文本围绕在图像周围,不过在 CSS 中,任何元素都可以浮动。浮动元素会生成一...

    相关 float

    元素浮动的特性: 1、浮动的元素脱离了标准文档流,摆脱块级元素和行内元素的限制 2、浮动的元素存在相互贴靠的效果,当宽度不够的时候,会出现自动换行 3、浮动的元素虽然脱离

    相关 float

    1、浮动:使元素脱离标准普通流,移动到其父元素中相应位置 选择器{float:属性值;} left 元素向左浮动 right 元素