问题描述

浮动元素导致的后面img标签居中对齐“失败”,如下图

<div>
<div class="content1">
<div class="float-left">left-div</div>
<div class="float-right">right-div</div>
</div>
<div class="content2">
<img src="./1.jpg" style="width:150px;height:150px;"/>
<p>center text</p>
</div>
</div> <style>
.content1{
background: pink;
height:50px;
line-height:50px;
}
.float-left{
float: left;
width: 100px;
height: 50px;
background: tan;
}
.float-right{
float: right;
width: 100px;
height: 51px;
background: tan;
}
.content2{
background:springgreen;
text-align:center;
height: 300px;
}
</style>

问题原因

浮动元素造成的影响,文本、行内元素、行内块元素会采取环绕的方式排列在浮动元素周围。图中right-div的高度为51px,高于父级div的50px,故img标签居中是相对于(父级div宽度)-(right-div宽度)来计算的,所以偏离了正常水平居中的位置。若将p标签放到第img标签前面去,则不会产生这种问题。但最好的办法还是清除浮动

清除浮动的方法

clear:both

  • 使用<div style="clear:both"></div>

    1. 将上面的div插入content1和content2之间时,会造成content1和content2之间有一条缝隙,如果看不清,可以将right-div的高度调大
    2. 将上面的div插入content1尾部时,无变化,问题并未解决
  • 使用伪元素,结果与上面方式2一致,未能解决问题

    .clearfix:before,
    .clearfix:after{
    content: '';
    display: table;
    clear: both;
    }
    .clearfix: { zoom:1 } //触发IE的haslayout.

BFC(Block formatting context)

  • 设置content1样式overflow:hidden,完美解决问题

总结:总而言之,本次问题是由于浮动和设置了浮动元素父级元素高度共同作用的结果,不是仅仅清除浮动就能完全解决的。若不设置浮动元素父元素的高度,则img也会正常垂直居中,但浮动未清除。若只清除浮动,而不解决高度突出的问题,则img不能正常垂直居中。设置overflow:hidden刚好两点都做到了。

参考文章:清除浮动方法解析

从问题找原因之CSS浮动清除的更多相关文章

  1. 横向排列两个多个div盒子的方法(CSS浮动清除float-clear/inline)/办法

    最近在做一个div css切割,昨晚发现了长期以来一直无记录下来的问题!关于兼容IE跟FF的float属性.趁现在还清醒赶紧记下笔记先:一.并排在一行的两个div样式有这种情况:ie或者ff下对于子d ...

  2. [css]浮动-清除浮动的3种方法

    清除浮动的方法: 内墙法 注: 这是个奇淫技巧,没什么原理可言,记住即可 这个技巧又使得父box重新可以被子box撑开高度了. 隔墙法-适用于2个box之间上下排列 由于2个box高度依旧是0, 彼此 ...

  3. 彻底理解浮动float CSS浮动详解 清除浮动的方法

    我们把网页的常用的布局格式分为以下三种: 1.标准流. 所谓的标准流就是,行内元素自己单独一行,而块级元素是上下显示的. 以前我们学习的都是标准流.   注意:标准流使我们网页布局中最稳定的一种结构 ...

  4. css浮动(float)及清除浮动的几种实用方法

    CSS浮动是现在网页布局中使用最频繁的效果之一,而浮动可以帮我们解决很多问题,那么就让我们一起来看一看如何使用浮动. 一.css浮动(float) (1)html文档流 自窗体自上而下分成一行一行,并 ...

  5. CSS浮动并清除浮动(造成的影响)

    一.浮动 CSS浮动    CSS float浮动的深入研究.详解及拓展(一)    CSS浮动属性Float详解 块级元素独占一行 块级元素,在页面中独占一行,自上而下排列,也就是传说中的流. 可以 ...

  6. css浮动(float)及如何清除浮动

    前言: CSS浮动是现在网页布局中使用最频繁的效果之一,而浮动可以帮我们解决很多问题,那么就让我们一起来看一看如何使用浮动. 一.css浮动(float)(1)html文档流 自窗体自上而下分成一行一 ...

  7. css浮动现象及清除浮动的方法

    css浮动现象及清除浮动的方法   首先先明确浮动最初的定义及使用场景:实现文本环绕图片的效果. 除了用浮动外,目前暂无其他方法实现文本环绕   再来看看浮动的具体定义: 浮动的框可以左右移动,直至它 ...

  8. css浮动(folat),清除浮动(clear)(另加两种清除浮动方式,总共三种清除浮动方式)

    css浮动(float) float是css样式,用于设置标签的居左浮动和居右浮动,浮动后的元素不属于html文档流,需要用清除浮动把文档拽回到文档流中 浮动值: left:向左浮动 right:向右 ...

  9. css浮动布局,浮动原理,清除(闭合)浮动方法

    css浮动 1.什么是浮动:在我们布局的时用到的一种技术,能够方便我们进行布局,通过让元素浮动,我们可以使元素在水平上左右移动,再通过margin属性调整位置 2.浮动的原理:使当前元素脱离普通流,相 ...

随机推荐

  1. 教程6--配置ssh

    配置ssh 如果需要使用到远程仓库,那么就需要两个步骤: (1)配置创建SSH key(用于识别用户,免得每次输入账号密码) 在命令窗口输入ssh-keygen -t rsa -c "你的邮 ...

  2. SQL Server用SPLIT函数分割字符串

      declare @str varchar(100),@sql varchar(1000)set @str='1,2,3,4,5,6,7,8,9,10'set @sql='select Value= ...

  3. Windows原理深入学习系列-访问控制列表-关于安全描述符的补充

    这是[信安成长计划]的第 20 篇文章 0x00 目录 0x01 安全描述符的结构 0x02 两个结构的不同点 0x03 真正的查询方案 0x04 参考文章 0x01 安全描述符的结构 在上一篇文章中 ...

  4. JZ-046-圆圈中最后剩下的数

    圆圈中最后剩下的数 题目描述 每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此.HF作为牛客的资深元老,自然也准备了一些小游戏. 其中,有个游戏是这样的:首先,让小朋友们围成一 ...

  5. javascript订阅模式浅析和基础实例

    前言 最近在开发redux或者vux的时候,状态管理当中的createStore,以及我们在组件中调用的dispatch传递消息给状态管理中心,去处理一些操作的时候,有些类似我们常见到订阅模式 于是写 ...

  6. laravel 框架增删改查+数据恢复

    ...............路由页面 //修改页面的自定义路由Route::post('unigoods/updata','uniGoodsController@updata');//数据恢复Rou ...

  7. petite-vue源码剖析-优化手段template详解

    什么是<template>元素? <template>是2013年定稿用于提供一种更统一.功能更强大的模板本存放方式.具体表现为 通过<template>元素属性c ...

  8. 微信小程序实现简单的2048

    这两天心血来潮,用微信小程序写了一个简单的2048,欢迎各位老铁围观,提出宝贵意见.这里我从0到1赘述一下个人实现流程: 首先去微信公平台(https://mp.weixin.qq.com/)注册一个 ...

  9. vue3 区别于 vue2 的“与众不同”

    希望本篇文章能帮你加深对 Vue 的理解,能信誓旦旦地说自己熟练Vue2/3.除此之外,也希望路过的朋友可以帮助我查漏补缺.   区别 生命周期的变化 整体来看,变化不大,只是名字大部分需要 + on ...

  10. CF1392F题解

    首先题意很明显就不说了吧www 先说一下做这道题的经历 昨天下午和 blw 一起去食堂吃饭,和他产生了一点儿冲突,于是我考了一下他 P1119 (就是那道 Floyd),他很快做出来了,于是考了我这道 ...