我想创建一个网页布局,并在右侧的侧边栏和主要内容围绕侧边栏流动。

要求:

  • 侧栏下方的内容应占据所有可用宽度
  • 碰到侧边栏的左侧时,不应压缩侧边栏下方的内容
  • 主要内容应在标记
  • 的侧边栏之前
  • 边栏具有固定的宽度,但高度未知/可变
  • 仅CSS-没有JavaScript解决方案

  • 这可以在没有第三个要求的情况下实现:如果侧边栏位于标记中的主要内容之前,并且位于同一包含元素之内,则只需执行简单的右 float 即可。标记中主要内容之前的侧边栏不是一个选项。侧边栏将包含补充信息和广告。如果这是在标记中的主要内容之前,那么它将使无CSS的浏览器和屏幕阅读器用户(甚至带有“跳到...”链接)也很烦人。

    这可以在没有第四要求的情况下实现。如果侧边栏具有固定的高度,我可以在主要内容之前放置一个包含元素,将其正确 float 并提供合适的宽度和高度,然后使用绝对定位将侧边栏放置在预制空间的顶部。

    标记示例(无CSS,仅相关位):
    <body>
      <div id="content">
        <p>
          Lorem ipsum ....
        </p>
        <p>
          Pellentesque ....
        </p>
        <div id="sidebar">
          /* has some form of fixed width */
        </div>
      </div>
    </body>
    

    布局示例:

    alt text http://webignition.net/images/layoutexample.png

    我不确定这是否可能。我很高兴接受权威的回答,指出这是无法实现的。如果无法实现这一点,我将不胜感激。有一个解释-知道为什么无法实现比被告知不能实现的意义更大。

    更新:我很高兴看到不满足所有五个要求的答案,只要答案说明忽略了哪个要求以及忽略该要求的后果(利弊)。然后,我可以做出明智的妥协。

    更新2 :我不能忽略要求3-边栏不能位于内容之前。

    最佳答案

    没有源顺序相反的简单 float 就无法完成(没有CSS3规范草案)。务实的方法是首先构建一个不错的布局,以支持所需的源顺序。 HTML:

    <div id="content" class="noJs">
      <div id="floatSpace"></div>
      <p>Lorem ipsum ....</p>
      <p>Pellentesque ....</p>
      <div id="sidebar">content</div>
    </div>
    

    CSS:
    #content {position:relative;}
    #sidebar {width:150px; position:absolute; top:0; right:0;}
    .noJs {padding-right:150px;}
    .noJs #floatSpace {display:none;}
    .js #floatSpace {float:right; width:150px;}
    

    这满足除1和2之外的所有条件。现在,我们添加JS:
    $(function () {
      // make floatSpace the same height as sidebar
      $('#floatSpace').height($('#sidebar').height());
      // trigger alternate layout
      $('#content')[0].className = 'js';
    });
    

    这将使内容在#floatSpace周围 float ,并且#sidebar将保持定位在其顶部。这比移动#sidebar更好,因为源顺序保持不变(对于支持Javascript的屏幕阅读器等)。

    这是JSFiddle of this in action。不幸的是,这种布局要求将floatSpace的高度与侧边栏的高度保持同步。如果侧边栏是动态的或具有延迟加载内容,则必须重新同步。

    关于html - 带有主要内容的右侧 float 边栏-怎么样?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/268093/

    10-16 22:05