CSS 弹性浮动布局应用

简介: CSS 弹性浮动布局应用

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


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


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


一、文本环绕布局


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


image.png

设置一个左浮动就可以了,实现如下

<div>
  <strong class="float">浮</strong>
  <p>动属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,尽管仍然保持部分的流动性。</p>
</div>
.float{
  float: left;
  /*其他样式*/
}


完整代码可访问 float-layout (codepen.io)点击预览


需要注意的是,浮动元素必须放在文本的前面( HTML 结构),如果放在文本后面

<div>
  <p>动属性指定一个元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。该元素从网页的正常流动(文档流)中移除,尽管仍然保持部分的流动性。</p>
  <strong class="float">浮</strong>
</div>


那么就会变成这样


image.png

也就是说,浮动的影响范围是由浮动元素在 HTML 中的结构决定的,这一点非常重要

不过,现在很少会见到这种环绕布局了,但有些时候这种思路还是挺有用的,比如在这篇文章 CSS 实现多行文本“展开收起” (juejin.cn),里面就用到了浮动的特性,实现了右下角文本环绕的效果,有兴趣的可以看看


image.png

二、两栏布局


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


image.png

结构如下

<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;
}


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


image.png

这种情况如何处理呢?很多人可能会想到右浮动,没错,但是要注意,HTML 结构不需要改动,也就是浮动元素仍然在文本的前面

.head{
  float: right;
}


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

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


完整代码可访问 float-2-cols点击预览


三、三栏布局


三栏布局的特点是左右是固定尺寸,中间自动撑满剩余空间,例如


image.png

结构如下

<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. 当文本比较少时,标签文本跟随文本


示意如下


image.png

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

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


image.png

很明显现在标签文本一直位于右边,那如何实现标签文本跟随的效果呢?其实可以嵌套一个最大宽度为 100% 的容器


image.png

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


image.png

完整代码可访问 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)


image.png


完整代码可访问float-mul-tags (codepen.io)点击预览


五、其他扩展布局


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


有时候标签的后面会有日期,会一直位于最右边,效果如下


image.png


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


image.png

因此需要再添加一层容器,实现如下

<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 这一层容器


实时效果如下


image.png


完整代码可访问 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 最重要的是灵活性,多一种思路总是没错的。如果觉得还不错,对你有帮助的话,欢迎点赞、收藏、转发❤❤❤

相关文章
|
5月前
|
前端开发 算法 Java
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
(CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
174 1
|
5月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
Flex 布局 布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性。它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现。 2009年,W3C 提出了一种新的方案----Flex 布局,可以简便、完整、响应式地实现各种页面布局。目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。 一、Flex 布局是什么? Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。
380 1
|
9月前
|
前端开发
用 CSS Grid 轻松构建复杂布局
用 CSS Grid 轻松构建复杂布局
368 83
|
5月前
|
前端开发 算法 Java
【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
position定位(核心) 我们讲盒模型的时候,提到了3个属性可以用来控制页面排版。 三大属性:position属性,display属性,float属性。 position 属性控制页面上元素间的位置关系。 display 属性控制页面元素是否显示或者是堆叠还是并排显示。 float 属性提供控制方法。 通过float这种控制方法,可以实现多栏布局,导航菜单等等。 position属性是干嘛用的?怎么用?有哪些属性值? position属性控制页面上元素间的位置关系,也就是排版。 怎么用?要知道怎么用
535 0
|
8月前
|
Web App开发 前端开发 数据可视化
用 CSS Grid 实现高效布局的 3 个实战技巧
用 CSS Grid 实现高效布局的 3 个实战技巧
|
前端开发 JavaScript UED
CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画
本文探讨了CSS滚动效果和视差滚动的原理、应用及其对用户体验的影响。从平滑滚动到元素跟随,再到滚动触发动画,这些效果增强了页面的吸引力和互动性。视差滚动通过不同层次元素的差异化移动,增加了页面的深度感和沉浸感。文章还讨论了实现方法、性能优化及案例分析,旨在为设计师和开发者提供实用指导。
382 7
|
前端开发 UED 开发者
CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度
本文探讨了CSS Sprites和图标字体在网页图标加载优化中的应用。CSS Sprites通过合并多图标减少HTTP请求,提升加载速度;图标字体则以字体形式呈现图标,便于调整样式。文章分析了两者的优缺点及应用场景,并提供了应用技巧和注意事项,旨在帮助开发者提升页面性能,改善用户体验。
185 5
|
编解码 前端开发 UED
探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用
本文深入探讨了CSS媒体查询在移动端开发中的应用,介绍了媒体查询的基本概念、常见条件及其在响应式布局、导航菜单、图片优化和字体调整等方面的具体应用。通过实际案例分析和注意事项的讨论,旨在帮助开发者更好地理解和运用媒体查询,提升移动端用户体验。
319 4
|
前端开发 JavaScript 开发者
掌握 CSS 弹性布局(Flexbox):构建复杂页面布局的高效秘籍与实战案例
CSS弹性布局(Flexbox)是现代网页设计中构建复杂页面布局的高效工具。本文将深入浅出地介绍Flexbox的核心概念、使用技巧及实际应用案例,帮助读者快速掌握这一强大布局方法。

热门文章

最新文章

  • 1
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(九):强势分析Animation动画各类参数;从播放时间、播放方式、播放次数、播放方向、播放状态等多个方面,完全了解CSS3 Animation
    372
  • 2
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(八):学习transition过渡属性;本文学习property模拟、duration过渡时间指定、delay时间延迟 等多个参数
    295
  • 3
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(七):学习ransform属性;本文学习 rotate旋转、scale缩放、skew扭曲、tanslate移动、matrix矩阵 多个参数
    259
  • 4
    (CSS)使用Flex布局,帮助你快速了解各种基本的Flex布局属性以及帮你让元素快速达到布局中的指定位置!
    174
  • 5
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(六):全方面分析css的Flex布局,从纵、横两个坐标开始进行居中、两端等元素分布模式;刨析元素间隔、排序模式等
    380
  • 6
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(五):背景属性;float浮动和position定位;详细分析相对、绝对、固定三种定位方式;使用浮动并清除浮动副作用
    535
  • 7
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(四):元素盒子模型;详细分析边框属性、盒子外边距
    494
  • 8
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(三):元素继承关系、层叠样式规则、字体属性、文本属性;针对字体和文本作样式修改
    177
  • 9
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(二):CSS伪类:UI伪类、结构化伪类;通过伪类获得子元素的第n个元素;创建一个伪元素展示在页面中;获得最后一个元素;处理聚焦元素的样式
    434
  • 10
    【CSS】前端三大件之一,如何学好?从基本用法开始吧!(一):CSS发展史;CSS样式表的引入;CSS选择器使用,附带案例介绍
    333