【问题标题】:Floated element doesn't stick to top of parent wrapper div浮动元素不会粘在父包装 div 的顶部
【发布时间】:2014-07-11 17:35:18
【问题描述】:

我在包装器中有 3 个 div。我希望它们中的 2 个粘在左上角,并且它们需要彼此位于下方。第三个 div 需要粘在右上角,但不粘在顶部。

我尝试这样做但失败了: http://jsfiddle.net/TZ82X/

<div id="wrapper">
  <div id="logo">Logo</div>
  <div id="motto">Motto</div>
  <div id="nav">Navigation</div>
</div>

CSS:

#wrapper {
  background: #CCC;
  width: 500px;
  height: 250px;
  margin: auto;
}
#logo {
  background: tomato;
  width: 300px;
  height: 20px;
  float: left;
}
#motto {
 background: sienna;
  width: 300px;
  height: 20px;
  float: left;
  clear: left;
}
#nav {
  background: seagreen;
  width: 200px;
  height: 40px;
  float: right;
}

这是 .html 中重新排列 div 的第一次修复: http://jsfiddle.net/KJG9q/

<div id="wrapper">
  <div id="nav">Navigation</div>
  <div id="logo">Logo</div>
  <div id="motto">Motto</div>
</div>

这是对另一个容器 div 的第二次修复: http://jsfiddle.net/x98Mf/

<div id="wrapper">
  <div id="logo-motto-container">
    <div id="logo">Logo</div>
    <div id="motto">Motto</div>
  </div>
  <div id="nav">Navigation</div>
</div>

CSS:

#logo-motto-container {
  float: left;

我不想重新排列 .html 中的元素,因为我希望它们为移动设备的样式正确排列,我可以使用另一个包装器 div,但我想知道为什么第一种方法不起作用以及是否有修复它而不弄乱 .html 并保持模板灵活(没有位置:相对)?

【问题讨论】:

  • 在我看来,最好的选择是侧边栏内容(徽标和座右铭)的容器。你为什么不想用这个?
  • 如有必要我会使用它,但我想更好地理解它为什么会这样
  • 您在第二个向左浮动div 之后立即浮动div,这是因为右侧浮动div 与第二个向左浮动div 并驾齐驱。如果您将右侧浮动的div 放在第二个位置,它将与第一个div 并驾齐驱。解决方案将是您提供的两个修复程序就足够了!
  • 关于这个问题的任何更新? .. 像 OP 我想知道是什么导致了这种行为

标签: css html css-float


【解决方案1】:

我已经修改了你的小提琴,以便给你你想做的事情。

以下链接是您的第一个修复小提琴的修改版本。我刚刚使用了 css 属性,并没有根据需要移动任何 html div。

Fiddle Link

#nav {
    background: seagreen;
    width: 100%x;
    height: 40px;    
}

【讨论】:

  • 问题是这个坚持到左边的 div jsfiddle.net/6Rffa 我希望它在我调整到更小的尺寸时坚持到右边框
  • 现在我完全知道您要做什么。您在帖子中提到您希望您的 div 也适合移动设备,我建议您使用 % in 而不是 px 的高度和宽度值,因为使用明确的 px(像素)值会扭曲您在移动设备中的页面。您可以通过仅将其他两个分组到一个 div 中来实现导航 div 向右浮动,正如您在第二个 Fix fiddle 中提到的那样。我已经更新了你的第二个小提琴,检查一下jsfiddle.net/x98Mf/2我没有将高度和宽度的 px 值更改为 %。
【解决方案2】:

#nav 中删除float: right;

#nav {
    background: seagreen;
    width: 200px;
    height: 40px;
}  

【讨论】:

  • 你测试过这个吗?这不是作者想要的。
  • 哦!有用!您仍然需要将 display: inline-block 添加到 div 以使其工作,但它可以工作。谢谢! jsfiddle.net/z2zqM
  • 这毕竟行不通:/ 它粘在其他 div 上 jsfiddle.net/6Rffa 我希望它粘在右边框上
【解决方案3】:
#nav {
    background: seagreen;
    width: 200px;
    height: 40px;
    float: right;
    position: absolute;
}

【讨论】:

  • 你能解释一下吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多