【问题标题】:Get two aside sections to float left with fixed width CSS使用固定宽度 CSS 获取两个侧边部分以向左浮动
【发布时间】:2013-05-19 14:13:36
【问题描述】:

我正在尝试让两个部分漂浮在右侧主列的旁边。这些部分应该具有固定的宽度,并且主要部分应该是流动的。这是我最近的一次。问题是 main 没有改变它的大小。如果它在我曾经使用过圣杯的另一部分的地方,但这也不起作用。

[编辑]澄清; HTML 不能更改(很多)。左右需要停留在 main 之后,这对屏幕阅读器和 seo 来说是最好的。如果内容足够宽,旁白实际上是左右栏。所以只有特定的宽度才能得到我想要实现的布局。[/edit]

https://jsfiddle.net/TR2SD/1/

<div id="container">
    <div id="main">
        main contents<br>with some content
    </div>
    <aside id="left">
        left contents
    </aside>
    <aside id="right">
        right contents
    </aside>
</div>

和 CSS:

#container {
    border: 1px solid red;
    width: 100%;
}

#main {
    border: 1px dotted #f0f;
    margin: 0 -240px 0 0;
    position: relative;
    width: 100%;
    float: left;
}

#left {
    background-color: #0ff;
}

#right {
    background-color: #ff0;
}

#left,#right {
    float: left;
    width:220px;
    position: relative;
    z-index:2;
}

【问题讨论】:

    标签: css css-float


    【解决方案1】:

    对于一个侧边栏,您可以通过使用容器上的填充和主要部分的边距来计算其宽度来定位:

    .container {
        padding-right: 200px; /* Matches sidebar width */
        overflow: hidden;
    }
    
    .main {
        width: 100%;
        float: left;
    }
    
    .sidebar {
        width: 200px; 
        margin-right: -200px; /* Matches sidebar width */
        float: right;
    }
    

    对于带有缩放中心的左右侧边栏,您可以使用类似的技术:

    .container {
        padding-right: 200px;
        padding-left: 200px;
        overflow: hidden;
    }
    
    .main {
        width: 100%;
        float: left;
    }
    
    .left-sidebar {
        float: left;
        width: 200px;
        margin-left: -200px;
    }
    
    .right-sidebar {
        float: left;
        width: 200px;
        margin-right: -200px;
    }
    
    .left-sidebar, .right-sidebar {
        display: none;
    }
    

    这是final result on JSBin。您需要调整页面大小才能看到不同的视图。

    请注意,在上面的示例中使用了小屏幕的辅助侧边栏,因为使用 CSS 来呈现不符合 DOM 顺序的元素非常困难。

    【讨论】:

    • 我想我需要详细说明(并将其添加到问题中)。左侧和右侧通常是左侧和右侧边栏。但是为了节省空间,我需要它们都在右侧以用于特定尺寸。我不确定,但不认为你的答案可以解决这个问题?
    • 我还添加了一个两列示例。强制元素脱离 DOM 顺序值得另一个问题。这是一个更加棘手的完成。如果您担心屏幕阅读器,可以使用适当的 aria 属性掩盖辅助边栏。
    【解决方案2】:

    我最终通过使用#main 的内部元素来回答它。我需要检查的是此修复程序的兼容性。以及分配给#main 的背景是什么。

    https://jsfiddle.net/TR2SD/5/

    我添加了一个“内部”元素

    <div id="container">
        <div id="main">
            <div class="inside">
            main contents<br>with some content
            </div>
        </div>
        <aside id="left">
            left contents
        </aside>
        <aside id="right">
            right contents
        </aside>
    </div>
    

    并且 css 会通过一些更正来浮动所有内容。

    #container {
        border: 1px solid red;
        width: 100%;
    }
    
    #main {
        background-color: #f0f;
        margin-left: -240px;
        width: 100%;
        float: left;
    }
    
    #main .inside {
        margin-left: 240px;
    }
    
    #left {
         background-color: #0ff;
    }
    
    #right {
         background-color: #ff0;
    }
    
    #left,#right {
        float: left;
        width:240px;
    }
    

    【讨论】:

    • 我确实需要稍后添加一个 js,以始终使 main 的最小高度为 left + 10px,这样右侧就不会漂浮在左侧。但这是一个小问题,因为 css 解决了所有其他问题。
    【解决方案3】:

    为了按照您的要求定位您的 div,您应该:

    定位div左右浮动

    为了将你命名为 left 的 div 放在 right 的左侧,你必须在 left 之前声明 right,最后声明 main 不需要相对定位 容器应声明最小宽度以防止布局中断。

    所以 HTML 应该是一种...

    <div id="container">
         <aside id="right">
            right contents
        </aside>
        <aside id="left">
            left contents
        </aside>   
        <div id="main">
            main contents<br>with some content
        </div>
    </div>
    

    CSS应该是

    #container {
        border: 1px solid red;
        width: 100%;
         min-width:600px;
    }
    
    #main {
        border: 1px dotted #f0f;
        margin: 0 -240px 0 0;    
    }
    
    #left {
         background-color: #0ff;
    }
    
    #right {
         background-color: #ff0;
    }
    
    #left,#right {
        float: right;
        width:220px;        
    }
    

    从这里开始,随心所欲地调整 一个fiddle here

    【讨论】:

    • 注意,如果页面缩小,侧边栏会消失。
    • 请注意,如果页面缩小超过指定的min-width,侧边栏将消失。您应该按照我的回答中所述使用媒体查询进行调整,以创造更好的用户体验。
    • 其实这个答案是不正确的。我需要给定 HTML 的答案。 HTML 不能重新排序,这将使答案变得简单。 SEO、屏幕阅读器和其他原因。
    • 抱歉 Fico,忘记感谢您的付出。但是将内容按特定顺序放置以获得所需的结果是一种简单的方法。我相信一定有答案。
    猜你喜欢
    • 1970-01-01
    • 2012-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    相关资源
    最近更新 更多