【问题标题】:Responsive menu with title: have a resizing title that takes up all available space带有标题的响应式菜单:有一个占用所有可用空间的调整大小的标题
【发布时间】:2013-06-19 14:32:04
【问题描述】:

考虑这种情况:我有一个带有标题和菜单栏的页面,在同一行对齐。该网站是响应式的,我希望标题和菜单都具有最佳的可用宽度。

但是,菜单不应折叠,并且应始终占用所有可用空间。标题可以折叠,但应尽可能长地使用所有可用宽度。

这可能有点模糊,所以我在这里创建了一个 jQuery 解决方案:

http://cdpn.io/tBskv

尝试调整浏览器窗口的大小,使菜单与标题重叠以理解我的意思。

但是,我真的喜欢没有任何 Javascript 的 CSS 解决方案。最好它应该在 IE8 上运行,但如果有一个仅适用于现代浏览器的解决方案,我愿意做出一些妥协。

【问题讨论】:

  • 你的意思是像this这样的东西吗?
  • @SpYk3HH:不完全......在你的例子中,容器有一个固定的宽度(即使它有一个百分比),这意味着“松散空间”将被分配给菜单。如果您的页面宽度合理,则标题应该在一行上并且不会中断。请查看示例并调整浏览器窗口的大小以理解我的意思。

标签: jquery html css responsive-design


【解决方案1】:

这实际上可以通过 CSS 实现,并且在 IE8 中适当地使用 display:table-cellwhite-space:nowrap。我在

上发布了针对您的问题的 CSS 解决方案

http://codepen.io/anon/full/HhCFB

此解决方案允许右侧菜单永不折叠,左侧标题为全标题宽度,或在页面太小时折叠到可用宽度。

简而言之:

<div class="wrap">
    <span>a long example title</span>
    <ul>
        <li>One</li>
        <li>Two</li>
        <li>Three</li>
    </ul>
</div>

<style>
    .wrap {
        display: table;
    }

    span {
        display:table-cell;
    }

    ul {
        display: table-cell;
        white-space: nowrap;                   
    }

    li {
        display: inline-block;
        margin-right: 20px;
    }
</style>

display:tabledisplay:table-cell 确保标题和菜单都充当列,因此它们不会在彼此下方浮动。不让菜单崩溃的诀窍是在ul 上使用white-space:nowrap。现在,当页面变得太小时,标题将是唯一的换行符。

在上面提到的 codepen 解决方案链接中,还添加了一个变体,以确保标题跨度永远不会大于其内容的宽度。这样菜单也将坚持标题。只需注释掉.outer{ float:left }即可获得本答案中提到的代码解决方案。

你在找什么?

【讨论】:

    【解决方案2】:

    不幸的是,仅使用 CSS 是不可能的——如果你想使用 IE8 则不行。

    您必须计算可用空间来填充其中的 div,而 calc() 的函数只适用于现代浏览器。

    我创建了两个主题来搜索百分比容器的响应式解决方案,结果是herehere

    JavaScript 的最终解决方案是这样的:

    /** Centralize the main container **/
    function calculateMainContainerWidth() {
        $realWidth = $(".main-container").width() - $(".right").outerWidth(),
        $containerContent = $(".left");
        $containerContent.css("width", $realWidth);
    };
    
    $(window).on("resize", function() {
        calculateMainContainerWidth();
    });
    
    calculateMainContainerWidth();
    

    也可通过FiddleJS 获得。

    希望对你有帮助。

    【讨论】:

    • 感谢您的建议,我实际上想使用calc,因为它适用于除 IE8 之外的所有浏览器。但是,您似乎不能使用 calc 来获取另一个元素的宽度,所以我真的不明白您可以如何将其用作解决方案....
    • 计算值是$(".main-container").width() - $(".right").outerWidth()。你必须适应你的问题。另外:我的目标是为您展示情况,而不是代码。
    • 对.. 但您在这里展示的是一个 jQuery 解决方案,而不是一个 CSS 解决方案。我在codepen链接中提供的解决方案和你的一样……
    • 如我所说,赫斯基:Unfortunately, this is not possible with CSS only — not if you want to work with IE8.
    • 好的,那么 CSS 解决方案是什么?它不需要在 IE8 中工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多