整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

简单小程序:登录页面(html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>登录页面</title>
    /*总体的样式*/
    <style>
    	/*盒子样式*/
        #box{
            width: 350px; //宽
            height: 450px; //高
            border: 1px solid black; //边框
            border-radius: 10px; //边框弧度
            font-family: 黑体; //字体
            letter-spacing:8px; //段间距
            word-spacing: 10px; //字间距
            line-height: 40px; //行高
            font-size: 18px; //字大小
            padding: 20px; //内边框
        }
        /*给'注册'赋予样式*/
        .register{
            width:280px ; //宽
            height: 50px; //高
            background-color: skyblue; //背景颜色
            border-radius: 10px; //边框弧度

        }
        /*将所有边框都改变*/
        *{
            border-radius: 5px; 边框弧度
        }
        /*使用class选择器,赋予number宽高和边框*/
        .number{
            width: 185px; //宽
            height: 27px; //高
            border-width: 1px; //边框宽度

        }
        /*id选择器*/
        #two{
            width: 55px; //宽
            border-width: 1px; 边框宽度
        }
        /*id选择器*/
        #phone{
            width: 103px; //宽
        }
        /*class 选择器*/
        .boxs{
            zoom: 75%; //清除浮动
            color: darkgray; //颜色
        }
        /*class选择器*/
        .box_a{
            width: 50px; //宽
            height: 50px; //高
            background-image: url("../image/04.jpg "); //背景图片
            background-repeat: no-repeat; // 是否平铺
            background-size: 50px 25px; //背景尺寸
            position: relative; //定位 相对定位
            left: 310px; //定位后左移
            bottom: 32px; //定位后下移

        }
    </style>
</head>
<body>
<div id="box">
    <h1>请注册</h1>
<p style="color: darkgray">已有帐号?<a href="https://im.qq.com/index">登录</a></p>
<form action="" method="post">
    <label for="name">用户名</label>
    <input type="text" placeholder="请输入用户名" id="name" class="number"> <br>
    <label for="phone">手机号</label>
    <select name="" id="two" class="number">
    <optgroup>
        <option style="" class="">+86</option>
    </optgroup>
    </select>
    <input type="text" placeholder="请输入手机号" id="phone" class="number"> <br>
    <label for="mima">密 码</label>
    <input type="password" placeholder="请输入密码" id="mima" class="number"> <br>
    <label for="mima">验证码</label>
    <input type="password" placeholder="请输入验证码" id="is" class="number">
    <div class="box_a"></div>
    <div class="boxs">
        <input type="radio" id="" class="accept">阅读并接受协议<br>
    </div>
    <input type="submit" value="注册" class="register" >

    </form>
</div>


</body>
</html>
在这里插入图片描述

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

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

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

一、文本环绕布局

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

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

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

完整代码可访问 float-layout (codepen.io)[2]

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

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

那么就会变成这样

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

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

二、两栏布局

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

结构如下

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

浮动实现如下,主要是文本需要设置 overflow: hidden 。这里就不谈实现原理(BFC)了,有兴趣深究的可以查看这篇文章 CSS深入理解流体特性和BFC特性下多栏自适应布局[4]

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

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

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

.head{
  float: right;
}

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

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

完整代码可访问 float-2-cols[5]

三、三栏布局

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

结构如下

<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)[6]

四、文本省略跟随布局

还有一类比较常见但是有些棘手的布局,是这样的

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)[7]

如果不考虑兼容的话,width: fit-content 会是更好的选择,可以使容器保持 block 的特性,并且宽度由文本内容决定,详细可以参考这篇文章: 理解CSS3 max/min-content及fit-content等width值 [8]

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

另外,如果多行文本就不适用了,可以用另一种方式实现,详细原理可以查看这篇文章 CSS 实现多行文本“展开收起” (juejin.cn)[9]

完整代码可访问float-mul-tags (codepen.io)[10]

五、其他扩展布局

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

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

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

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

<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)[11]

六、总结和说明

上面介绍了浮动布局的几个常用案例,相信能适用于绝大部分布局,当然并不是推荐大家一定要使用浮动布局,甚至有时候布局混乱(HTML结构与视觉不一致)、实现啰嗦(嵌套层级多)等情况,但是在不兼容 flex 布局的浏览器中还是挺有用的(低于IE10),甚至还有仅仅只能使用浮动才能实现的布局(文本环绕)。这里总结如下

1.通过 BFC 实现自适应弹性布局,float + overflow2.浮动的影响范围是由浮动元素在 HTML 中的结构决定的3.通过设置最大宽度实现文本跟随效果(fit-content也可以)4.其他布局可相互组合实现5.另外这些 float 实现方式全兼容(IE6+),可以放心使用

随着 IE 地逐渐退去,有些布局也会慢慢地淡出,就像早年的 table 布局一样。但浮动布局一直在往新特性上发展,比如 Shapes 布局[12]就需要浮动做支持,另外,浮动布局也在慢慢支持逻辑属性,比如 float: inline-start 。最后,CSS 最重要的是灵活性,多一种思路总是没错的。如果觉得还不错,对你有帮助的话,欢迎点赞、收藏、转发❤❤❤

References

[1] 阅文作家专区 (qq.com): https://write.qq.com/
[2] float-layout (codepen.io):
https://codepen.io/xboxyan/pen/RwpqWvJ
[3] CSS 实现多行文本“展开收起” (juejin.cn):
https://juejin.cn/post/6963904955262435336
[4] CSS深入理解流体特性和BFC特性下多栏自适应布局:
https://www.zhangxinxu.com/wordpress/2015/02/css-deep-understand-flow-bfc-column-two-auto-layout/
[5] float-2-cols:
https://codepen.io/xboxyan/pen/WNpYQLB
[6] float-3-cols (codepen.io):
https://codepen.io/xboxyan/pen/oNZQLWB
[7] float-auto-text (codepen.io):
https://codepen.io/xboxyan/pen/poeQbYo
[8] 理解CSS3 max/min-content及fit-content等width值 :
https://www.zhangxinxu.com/wordpress/2016/05/css3-width-max-contnet-min-content-fit-content/
[9] CSS 实现多行文本“展开收起” (juejin.cn):
https://juejin.cn/post/6963904955262435336
[10] float-mul-tags (codepen.io):
https://codepen.io/xboxyan/pen/PopWVNX
[11] float-auto-text-fixed (codepen.io):
https://codepen.io/xboxyan/pen/WNpYJpN
[12] Shapes 布局:
https://www.zhangxinxu.com/wordpress/2019/02/css-css3-shapes

么是 CSS Float(浮动)?

CSS 的 Float(浮动),会使元素向左或向右移动,其周围的元素也会重新排列。

Float(浮动),往往是用于图像,但它在布局时一样非常有用。


元素怎样浮动

元素的水平方向浮动,意味着元素只能左右移动而不能上下移动。

一个浮动元素会尽量向左或向右移动,直到它的外边缘碰到包含框或另一个浮动框的边框为止。

浮动元素之后的元素将围绕它。

浮动元素之前的元素将不会受到影响。

如果图像是右浮动,下面的文本流将环绕在它左边:

实例

img

{

float:right;

}


彼此相邻的浮动元素

如果你把几个浮动的元素放到一起,如果有空间的话,它们将彼此相邻。

在这里,我们对图片廊使用 float 属性:

实例

.thumbnail

{

float:left;

width:110px;

height:90px;

margin:5px;

}


清除浮动 - 使用 clear

元素浮动之后,周围的元素会重新排列,为了避免这种情况,使用 clear 属性。

clear 属性指定元素两侧不能出现浮动元素。

使用 clear 属性往文本中添加图片廊:

实例

.text_line

{

clear:both;

}

尝试一下 »

更多实例

为图像添加边框和边距并浮动到段落的左侧

让我们为图像添加边框和边距并浮动到段落的左侧

标题和图片向右侧浮动

让标题和图片向右侧浮动。

让段落的第一个字母浮动到左侧

改变样式,让段落的第一个字母浮动到左侧。

创建一个没有表格的网页

使用 float 创建一个网页页眉、页脚、左边的内容和主要内容。


CSS 中所有的浮动属性

"CSS" 列中的数字表示不同的 CSS 版本(CSS1 或 CSS2)定义了该属性。

属性描述CSS
clear指定不允许元素周围有浮动元素。leftrightbothnoneinherit1
float指定一个盒子(元素)是否可以浮动。leftrightnoneinherit1

如您还有不明白的可以在下面与我留言或是与我探讨QQ群308855039,我们一起飞!