当前位置: 首页 > Web前端 > CSS

CSS弹性浮动布局应用

时间:2023-03-30 16:58:24 CSS

其实文章原标题是《遇到不支持flex的项目怎么办?》现在几乎是flex的天下,简单灵活,但是有时候接触IE浏览器是不可避免的,比如我最近接触了中国读书作家专区(qq.com),需要兼容用IE9,自然不能用flex布局。不会用flex怎么办(这个项目好XX,2021年还兼容IE)?那只能回到传统的布局方式,即浮动布局。Floating浮动可以说是CSS布局中最灵活的布局之一。不要小看浮动,有些布局只能通过浮动来实现。下面将介绍几种常见的布局,一起来看看1.文字环绕布局这种布局应该是浮动的初衷。例如,设置一个左浮动就足够了,实现如下

float">float

float属性指定一个元素应该沿着它的容器的左侧或右侧定位,允许文本和内联元素环绕它。此元素已从网页的正常流(文档流)中删除,但仍保留部分流。

.float{float:left;/*其他样式*/}完整代码可以访问float-layout(codepen.io)需要注意的是,浮动元素一定要放在文字前面(HTML结构),如果放在文字后面

dynamic属性指定一个元素应该沿着它的容器的左侧或右侧放置,允许文本和内联元素环绕它。这个元素从网页的正常流(文档流)中移除,但仍然保留部分流量。

float
那么就会变成这样,也就是说float的影响范围是由float元素的结构决定的HTML,这是非常重要的,然而,这种环绕式布局现在已经很少见了,但有时候这种思路还是挺有用的,比如这篇文章中CSS实现多行文本“展开和折叠”(juejin.cn),就是利用浮动特性实现了文字在右下角换行的效果。如果你有兴趣,你可以看看第二个和双列布局。两列布局的特点是左边是固定大小,右边自动填满剩余空间。例如结构如下float属性指定一个元素应该沿其容器的左侧或右侧,允许文本和内联元素将其包裹起来。此元素已从网页的正常流(文档流)中删除,但仍保留部分流。

浮动实现如下,主要是文字需要设置overflow:hidden。这里不讲实现原理(BFC)。有兴趣的可以查看这篇CSS了解BFC特性下的流体特性和多列自适应布局。head{float:left;}.info{overflow:hidden;}如果右边是固定大小,遇到这种情况怎么办?很多人可能会想到右浮动,是的,但是需要注意的是HTML结构不需要改变,即浮动元素仍然在文本的前面。head{float:right;}值得注意的是,如果需要设置两列的间距margin,需要在浮动元素上设置。头{浮动:左;margin-right:8px;}完整代码可以访问float-2-cols三三列布局三列布局的特点是左右都是固定大小,自动支持中间填充剩余空间,对于例如,结构如下
Edit
floating属性指定元素应该沿着其容器的左侧或右侧放置,允许文本和内联元素环绕它。此元素已从网页的正常流(文档流)中删除,但仍保留部分流。

注意这里右边的按钮在HTML结构中还是在文本的前面,只需要设置右边的浮动即可。head{float:left;}.info{overflow:hidden;}.right{float:right;左边距:8px;/*Otherstyles*/}完整代码可以访问float-3-cols(codepen.io)4.Textellipsisfollowsthelayout还有一种布局比较常见但是有点tricky,就是这样的。当文字较多时,标签文字在最右边。当文本很少时,标签文本跟在文本后面。如何使用浮动来实现这一点?如果仔细观察,它实际上是一个两列布局。edit
floating属性指定元素应该放置在容器的左侧还是右侧,允许文本和内联元素环绕它。此元素已从网页的正常流(文档流)中删除,但仍保留部分流。平移直到它碰到它所在容器的边界,或者碰到另一个浮动元素。

.info{溢出:隐藏;空白:nowrap;text-overflow:ellipsis;}很明显标签文字总是在右边,那么如何实现标签文字跟随的效果呢?其实可以嵌套最大宽度为100%的容器label浮动属性指定元素应沿其容器的左侧或右侧放置,允许文本和内联元素环绕它。此元素已从网页的正常流(文档流)中删除,但仍保留部分流。平移直到它碰到它所在容器的边界,或者碰到另一个浮动元素。

.wrap{显示:内联块;max-width:100%;}完整代码可以访问float-auto-text(codepen.io)如果不考虑兼容性,width:fit-content会是更好的选择。它可以保持容器的块特性,宽度由文本内容决定。具体可以参考这篇文章:理解CSS3max/min-content和fit-content等宽度值.wrap{/*display:inline-block;*/max-width:100%;width:fit-content;}另外,如果多行文字不适用,可以换种方式实现。详细原理可以参考这篇文章CSS实现多行文本“展开和折叠”(juejin.cn)完整代码可以访问float-mul-tags(codepen.io)五、其他扩展这部分布局等同于上面的扩展。我们来看一个案例。有时标签后面会有日期,总是在最右边。效果如下。可能有人会想到绝对定位,但是这里的日期可能不是固定的,需要自适应。如何实现?其实就是两种布局的结合,所以还需要再加一层容器,如下6-14labelfloat属性指定元素应位于其容器的左侧或右侧,允许文本和内联元素环绕它。此元素已从网页的正常流(文档流)中删除,但仍保留部分流。平移直到它碰到它所在容器的边界,或者碰到另一个浮动元素。

下面是二列布局的写法。date{float:right;}.outer-wrap{overflow:hidden;}实时.outer-wrap层容器的效果可以省略。完整的代码可以访问float-auto-text-fixed(codepen.io)。当然,对于大部分布局,不建议一定要使用浮动布局,有时布局混乱(HTML结构与视觉不符),实现啰嗦(多级嵌套),但在浏览器中与flex布局不兼容的它仍然有用(在IE10以下),甚至还有只有浮动才有可能的布局(文本换行)。这里总结如下通过BFC实现自适应弹性布局。float+overflow的影响范围是由HTML中浮动元素的结构决定的。通过设置最大宽度,可以实现文字跟随的效果(fit-content也是可以的)。其他布局可以相互组合。另外,这些float的实现是完全兼容的(IE6+),大家可以放心使用。随着IE的逐渐退却,一些布局也会逐渐淡出,就像早年的表格布局一样。但浮动布局一直在向新特性发展。例如,Shapes布局需要浮动支持。另外,浮动布局也在慢慢支持逻辑属性,比如float:inline-start。最后,CSS最重要的就是灵活性,想法多一点总是对的。如果您觉得还不错,如果对您有帮助,请点赞,收藏,转发???