float元素先后顺序

今天练习经典左中右三列布局,左右固定宽度,中间撑开自适应,遇到了小问题

本来想效果是这种:

写完代码如下:

<style>
  .container {
    height: 200px;
  }
  .container div {
    height: 100px;
  }
  .left {
    float: left;
    width: 200px;
    background: red;
  }
  .center {
    background: green;
    height: 150px;
  }
  .right {
    float: right;
    width: 200px;
    background: blue;
  }
</style>
<div class="container">
  <div class="left">llllll</div>
  <div class="center">ccccccc</div>
  <div class="right">rrrrrrrr</div>
</div>

发现实际效果是这样:

为什么呢???

几经查阅资料(搜索)发现问题出在了三个div书写顺序上

首先是 left 元素,它是一个左浮动的float元素,会脱离文档流;接下来是 center 元素,这是一个正常的块元素,一个块元素默认独占一行,所以实际上 绿色区域是占满了宽度100%的(上图中红色区域下边也是绿色,只是被float的红色遮盖住了,给center设置宽度150px如下图);最后是 right 元素,它是右浮动的float元素,但因为上一行已经被center占满,只能在下一行右浮动。

那怎么才能实现想要的效果呢?

很简单,只要在dom中交换center和right的位置,这样,left和right都会浮动脱离文档流,后边的center就会自动填充第一行了

如下图:(故意将center元素高度设置150px,为了说明后边的问题)

如上图,可以看到效果虽然实现了,但是 center 实际占满了一整行,这就会出现一个问题:当center 中文字过多时,会在 left 和right周围产生文字环绕现象,如下图:

解决办法:

1.给 center 增加 overflow:hidden;

2.给 center 设置 margin-left: left宽度; margin-right: right宽度;

如此,极好了

猜你喜欢

转载自blog.csdn.net/RedaTao/article/details/107979530
今日推荐