Superfish 水平菜单。如何测量宽度

发布于 2024-12-23 15:41:00 字数 230 浏览 1 评论 0原文

我正在使用 superfish 在我的网站上创建水平菜单。

菜单项总是会有所不同,因为内容非常动态。菜单项不应具有固定宽度。

当显示的菜单项足够填满网站的整个宽度时,将显示最后一个名为“更多项目”的菜单。

我将如何测量每个菜单项(li 标签)的宽度,以便我可以限制显示的项目?

问题是我不能依赖某种字体来实现这一点。字体必须是访客机器上可用的任何字体。

感谢您的意见

I am using superfish to create a horizontal menu on my website.

The menu items will always vary, as the content is very dynamic. The menu items should not have a fixed width.

When the enough menu items are displayed to fill the entire width of the website, a last menu called 'More Items' will be shown.

How would I go about measuring the width of each menu item (li tag), so that i can limit the items shown?

The problem is that I can not depend on a certain font to achieve this. Font's must be, whatever is available on the visitors machine.

Thanks for your input

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

绝不放开 2024-12-30 15:41:00

这是一种方法...

示例 jsfiddle

$(function() {
    $('.sf-menu').superfish();

    var tempWidth = 0,
        // width of our layout minus width of our "More Items..." menu
        maxWidth = $('#container').outerWidth() - $('#more').outerWidth(); 

    // get any menu items that extend past our maxWidth
    var $moreItems = $('.sf-menu > li').not('#more').filter(function() {
        tempWidth += $(this).outerWidth();
        if (tempWidth >= maxWidth) return true;
        else return false;
    });

    // if we have items extending past, add those items to "More Items..."
    if ($moreItems.length > 0) {
        $('#more').show().find('ul').append($moreItems);
    } else {
        $('#more').hide();
    }
});

在中间部分我将每个菜单项的宽度相加,当满足阈值(最大宽度)时,我将返回这些菜单项,以便我可以将它们添加到“更多项目”菜单(在最后一步中)

Here's one way to do this...

example jsfiddle

$(function() {
    $('.sf-menu').superfish();

    var tempWidth = 0,
        // width of our layout minus width of our "More Items..." menu
        maxWidth = $('#container').outerWidth() - $('#more').outerWidth(); 

    // get any menu items that extend past our maxWidth
    var $moreItems = $('.sf-menu > li').not('#more').filter(function() {
        tempWidth += $(this).outerWidth();
        if (tempWidth >= maxWidth) return true;
        else return false;
    });

    // if we have items extending past, add those items to "More Items..."
    if ($moreItems.length > 0) {
        $('#more').show().find('ul').append($moreItems);
    } else {
        $('#more').hide();
    }
});

In that middle segment I'm totaling up the widths of each menu item and when a threshold is met (the maxWidth) I'm returning those menu items so that I can add them to the "More Items" menu (in the final step)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文