关于css:CSS-弹性浮动布局应用

93次阅读

共计 3607 个字符,预计需要花费 10 分钟才能阅读完成。

其实文章原名叫做“碰到不反对 flex 的我的项目怎么办?”

当初差不多曾经是 flex 的天下了,简略灵便,但有时还是不可避免的会接触到 IE 浏览器,比方我最近接触的 阅文作家专区 (qq.com),这个就是须要兼容 IE9,也天然不能应用 flex 布局了。不能应用 flex 怎么办(这个我的项目怎么这么 XX,都 2021 年了还要兼容 IE)?那只能回归传统布局形式了,也就是浮动布局。

浮动 float 能够说是 CSS 布局里最为灵便的布局之一了,千万不要小瞧了浮动,有些布局只有浮动能力实现呢。上面将介绍几种常见的布局,一起看看吧

一、文本盘绕布局

这类布局应该就是浮动最后的用意了,比方这样的

设置一个左浮动就能够了,实现如下

<div>
  <strong class="float"> 浮 </strong>
  <p> 动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。</p>
</div>
.float{
  float: left;
  /* 其余款式 */
}

残缺代码可拜访 float-layout (codepen.io)

须要留神的是,浮动元素必须放在文本的后面(HTML 构造),如果放在文本前面

<div>
  <p> 动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。</p>
  <strong class="float"> 浮 </strong>
</div>

那么就会变成这样

也就是说,浮动的影响范畴是由浮动元素在 HTML 中的构造决定的,这一点十分重要

不过,当初很少会见到这种盘绕布局了,但有些时候这种思路还是挺有用的,比方在这篇文章 CSS 实现多行文本“开展收起”(juejin.cn),外面就用到了浮动的个性,实现了右下角文本盘绕的成果,有趣味的能够看看

二、两栏布局

两栏布局的特点是右边是固定尺寸,左边主动撑满残余空间,例如

构造如下

<div class="crad">
  <img class="head" src="xxx.jpg">
  <p class="info"> 浮动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。</p>
</div>

浮动实现如下,次要是文本须要设置 overflow: hidden。这里就不谈实现原理(BFC)了,有趣味深究的能够查看这篇文章 CSS 深刻了解流体个性和 BFC 个性下多栏自适应布局

.head{float: left;}
.info{overflow: hidden;}

如果左边是固定尺寸,比方这样的

这种状况如何解决呢?很多人可能会想到右浮动,没错,然而要留神,HTML 构造不须要改变,也就是浮动元素依然在文本的后面

.head{float: right;}

值得注意的是,如果须要设置两栏的间距 margin,须要设置在 浮动元素

.head{
  float: left;
  margin-right: 8px;
}

残缺代码可拜访 float-2-cols

三、三栏布局

三栏布局的特点是左右是固定尺寸,两头主动撑满残余空间,例如

构造如下

<div>
  <img class="head" src="xxx.jpg">
  <div class="right"> 编辑 </div><!-- 留神是在文本的后面 -->
  <p class="info"> 浮动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。</p>
</div>

留神,这里位于右侧的按钮在 HTML 构造中依然是在文本的后方,只须要设置右浮动就行了

.head{float: left;}
.info{overflow: hidden;}
.right{
  float: right;
  margin-left: 8px;
  /* 其余款式 */
}

残缺代码可拜访 float-3-cols (codepen.io)

四、文本省略追随布局

还有一类比拟常见然而有些辣手的布局,是这样的

  1. 当文本比拟多时,超出暗藏,标签文本在最左边
  2. 当文本比拟少时,标签文本追随文本

示意如下

这里如何应用浮动实现呢?仔细观察,其实就是一个两栏布局

<div class="card">
    <div class="right"> 编辑 </div>
  <p class="info"> 浮动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。始终平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。</p>
</div>
.info{
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}

很显著当初标签文本始终位于左边,那如何实现标签文本追随的成果呢?其实能够嵌套一个最大宽度为 100% 的容器

<div class="card">
  <div class="wrap"> <!-- 增加一个最大宽度为 100% 的容器 -->
        <div class="right"> 标签 </div>
        <p class="info"> 浮动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。始终平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。</p>
  </div>
</div>
.wrap{
  display: inline-block;
  max-width: 100%;
}

残缺代码可拜访 float-auto-text (codepen.io)

如果不思考兼容的话,width: fit-content 会是更好的抉择,能够使容器放弃 block 的个性,并且宽度由文本内容决定,具体能够参考这篇文章:了解 CSS3 max/min-content 及 fit-content 等 width 值

.wrap{
  /*display: inline-block;*/
  max-width: 100%;
  width: fit-content;
}

另外,如果多行文本就不实用了,能够用另一种形式实现,具体原理能够查看这篇文章 CSS 实现多行文本“开展收起”(juejin.cn)

残缺代码可拜访 float-mul-tags (codepen.io)

五、其余扩大布局

这一部分相当于以上的扩大了,上面来看一个案例。

有时候标签的前面会有日期,会始终位于最左边,成果如下

有人可能会想到相对定位,然而这里的日期可能不是固定的,须要自适应宽度,那如何实现呢?其实就是就是两种布局的联合

因而须要再增加一层容器,实现如下

<div class="card">
    <span class="date">6-14</span>
    <div class="outer-wrap"> <!-- 新加一层容器 -->
        <div class="wrap">
            <div class="right">
                <button class="btn"> 标签 </button>
            </div>
            <p class="info"> 浮动属性指定一个元素应沿其容器的左侧或右侧搁置,容许文本和内联元素盘绕它。该元素从网页的失常流动 (文档流) 中移除,只管依然放弃局部的流动性。始终平移直到碰到了所处的容器的边框,或者碰到另外一个浮动的元素。</p>
    </div>
  </div>
</div>

上面就是两栏布局的写法

.date{float: right;}
.outer-wrap{overflow: hidden;}

提醒:如果采纳 fit-content 形式,能够省去 .outer-wrap 这一层容器

实时成果如下

残缺代码可拜访 float-auto-text-fixed (codepen.io)

六、总结和阐明

下面介绍了浮动布局的几个罕用案例,置信能实用于绝大部分布局,当然并不是举荐大家肯定要应用浮动布局,甚至有时候布局凌乱(HTML 构造与视觉不统一)、实现啰嗦(嵌套层级多)等状况,然而在不兼容 flex 布局的浏览器中还是挺有用的(低于 IE10),甚至还有仅仅只能应用浮动能力实现的布局(文本盘绕)。这里总结如下

  1. 通过 BFC 实现自适应弹性布局,float + overflow
  2. 浮动的影响范畴是由浮动元素在 HTML 中的构造决定的
  3. 通过设置最大宽度实现文本追随成果(fit-content 也能够)
  4. 其余布局可互相组合实现
  5. 另外这些 float 实现形式全兼容(IE6+),能够放心使用

随着 IE 的逐步退去,有些布局也会缓缓的淡出,就像早年的 table 布局一样。但浮动布局始终在往新个性上倒退,比方 Shapes 布局就须要浮动做反对,另外,浮动布局也在缓缓反对逻辑属性,比方 float: inline-start。最初,CSS 最重要的是灵活性,多一种思路总是没错的。如果感觉还不错,对你有帮忙的话,欢送点赞、珍藏、转发❤❤❤

正文完
 0