【问题标题】:Filling left side of a float: right element in a full width design填充浮动的左侧:全宽设计中的右侧元素
【发布时间】:2012-02-23 14:09:20
【问题描述】:

我正在使用 HTML5/CSS3 进行新的设计,距离我上次使用 html 的工作已经有一段时间了,而不仅仅是编写内容,而不是布局。

我想要实现的是“全宽”或更确切地说是“80% 宽度”的设计,以便它适合浏览器大小到 800 像素。 (最小宽度)。

部分内容将包含放置在右侧的导航块(固定大小,例如 300 像素),我通过使用浮动实现了这一点,尽管由于“clearfix”问题我已经学会讨厌浮动,但对于缺乏更好的。

在它的左侧,我希望内容占据右侧浮动元素的空间。

但是,如果该内容超出宽度,则会将右侧浮动元素向下推。

比如:

   -----------------------------------------------------------
          |                 Header                    |
          |                <header>                   |
          |-------------------------------------------|
   <-10%->|         <- Fill ->            |<- 300px ->|<-10%->
          |                               |           |
          |         <section>             |  <aside>  |
   -----------------------------------------------------------

部分 (id=articles) 设置为:

margin: 0 0 0 30px;
display: inline-block;
float: left;

Aside (id=sidebar) 设置为:

margin: 0 30px 10px 30px;
width: 290px;   

border:1px solid #6B6B6B;

border-radius: 6px;
-moz-border-radius: 6px;
-webkit-border-radius: 6px;

box-shadow: 0px 0px 2px 1px #6B6B6B inset;

display: inline-block;
float: right;

修复方法:

  • 显示:表格和表格单元格,可以使用,但它添加了我想避免的额外标签,也不确定在任何地方都可以使用?
  • 弹性盒?好吧,所以我想,但有问题,但无论如何它都没有得到广泛支持。
  • 让所有的都有固定的宽度。
  • 让所有的都有动态宽度。 (天哪)
  • 表格,但我们非常了解这种讨论。

现在无法正确处理该列表中的第一个,因为这是目前唯一让我实现目标的方法,但我想看看是否有更干净的方法。强>

【问题讨论】:

    标签: html css css-float autofill


    【解决方案1】:

    这样的事情怎么样?为左右部分创建一个容器。提供右边距,为正确的容器腾出空间。你可以浮动它,但我绝对定位它,因为你讨厌浮动 =)。

    http://jsfiddle.net/Z62f2/

    div { border: 1px solid gray; width: }
    #container { width: 80%; min-width: 600px; margin: 0 auto;  }
    #header { height: 100px; }
    #content { position: relative; }
    #left { margin-right: 300px; height: 1000px; }
    #right { width: 300px; height: 500px; position: absolute; top: 0px; right: 0px; }
    
    <div id="container">
        <div id="header">Header</div>
        <div id="content">
            <div id="left">Left</div>
            <div id="right">Right</div>
        </div>
    </div>
    

    【讨论】:

    • 嗯,这是“浮动”不扩展其容器的一小部分,或者不能通过 CSS 标签来制作,我发现缺少,如果你可以指导他们就可以了要么扩大他们的父母(或者在父母级别要求它扩大到浮动的孩子或不)......但是不得不使用额外的不可见的div来重置浮动只是......好吧......你的解决方案没有'不要让我免于需要额外的“内容”容器,这正是我想要的,所以在“显示:表”上使用它有什么论据吗?
    • (由于空间而额外评论)这将是我现在所拥有的,除了我的实际页面使用“aside”、“section”和“header”标签而不是 div:jsfiddle.net/Z62f2/6
    • 使用 display table-cell 是完全合理的。 IE7不支持,但我也不支持。您似乎想要的东西是不可能的,那是因为 css 规则的编写方式。没有概念,我希望你尽可能大,除了这么多。我当然经常看到这个请求。话虽这么说,两个额外的标签或一个清除 div 确实是获得所需内容的最小附加标记。我不会花时间担心这个。
    • 好吧,我还是坚持我现在所拥有的吧。并且肯定一个额外的容器可能是一个最小的添加,但是如果我可以摆脱它,那为什么不呢?......毕竟一个额外的容器变成了,如果一个人不小心,那么三个,所以这只是一种尝试尽可能说清楚,我认为可以做到。而且我不再关心 IE7 支持,这不是一个巨大的国际网站,这是一个个人博客,其中包含一些作品集、画廊和其他主要针对 IT 的内容,因此感兴趣的读者很可能拥有无论如何都要更新浏览器。
    • 虽然从技术角度来看,当我在那个领域时,我应该关心,但从长远来看,我可能会为这种情况添加一个特殊的处理程序,将不同的样式表交给旧浏览器(我应该能够在我的 CSS 路由处理程序/http 处理程序中处理它)并将其设置为静态的。
    【解决方案2】:

    我想试一试,

    以下是我将如何在您已有的 HTML 中标记它。基本上我插入了另一个 div 来包含该部分和旁边。

    <div id="contentContain">
        <div id="section"></div>
        <div id="aside"></div>
    </div>
    

    还有 CSS..

    #contentContain {width: 80%; }
    #section {float:left; width: 60%;}
    #aside {float:left; width: 40%; }
    

    这段代码应该给你更多的视角,而且它有效,你可以在一边有“更多”的内容,它不会破坏布局。

    祝你好运!

    【讨论】:

    • 我不想成为一个百分比,而是一个固定的,拥有一个“contentContainer”就是我的atm。包装它们,然后在容器上使用“display:table”,然后在侧面和部分(以及它们的 ID)上使用“display:table-cell”,但如果可以的话,我想避免使用额外的 html 标记。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-30
    • 1970-01-01
    • 2022-11-20
    相关资源
    最近更新 更多