WordPress管理栏与Twitter Bootstrap导航重叠


10

WordPress管理栏与Twitter Bootstrap(2.3.0)导航栏重叠时出现问题。我已经尝试过此修复程序:

body.admin-bar .navbar-fixed-top {
    top: 28px;
}

.navbar .brand {
    color: #000 !important;
    text-shadow: 0 1px 0 rgba(255, 255, 255, 0.1), 0 0 30px
        rgba(255, 255, 255, 0.125);
    font-weight: bold !important;
}

.nav-container {
    padding-left: 0;
    padding-right: 0;
}

.nav-tabs, .nav-pills {
    margin-top: -6px;
}

.dropdown-menu li>a:hover,.dropdown-menu li>a:focus,.dropdown-submenu:hover>a
    {
    color: #fff !important;
}

#inner-header {
    width: 100%;
}

input,textarea,select,.uneditable-input {
    margin-bottom: 0;
}

.navbar-form,.navbar-search {
    margin: 0 0 9px;
}

.navbar-search {
    padding-left: 0;
}

#s {
    width: 100px;
}

但可惜它仍然是一个问题。我想知道有哪些修复程序可用?

Answers:


17

如何防止WordPress管理栏与Twitter Bootstrap导航栏重叠。

回应: WordPress管理栏重叠Twitter引导导航

询问: @TheWebs

如果您将Twitter BootstrapWordPress一起使用,并且WordPress管理栏与导航栏重叠存在问题,那么您可能会对其中的某些答案感到沮丧。在最终决定将档位调低至最低档并找出完全可以满足我需要的解决方案之前,我一直在寻找解决方案。

因此,这里提供的答案不会隐藏WordPress管理栏,也不会将WordPress管理栏移动到页面底部。此答案将使WordPress管理栏保持在其所属位置...在页面顶部。

请注意,这将需要一些短的步骤来完成,但这是值得的。这实际上不是一个复杂或耗时的过程。我只是想确保有关此操作的说明是清晰且易于理解/理解的。


第1步

主题具有用于body标记的模板标记,这将帮助主题作者更有效地使用CSS进行样式设置。模板标签称为 body_class。此函数为body元素提供了不同的类,通常可以在header.php的HTML body标签中添加它。

  1. 使用Twitter Bootstrap目录打开当前活动的WordPress主题。查找header.php并打开它。
  2. 查找 <body>
  3. 用。。。来代替 <?php echo '<body class="'.join(' ', get_body_class()).'">'.PHP_EOL; ?>

完成上述三个步骤后,您现在已成功使用WordPress主体类启用了WordPress主题。

第2步(可选!)

  • 将自定义条件CSS类添加到<body>标记中。

默认情况下,如果您使用body_class()get_body_class()函数,则WordPress已经提供了HTML标记的默认类列表。

如果您在WordPress网站上查看任何呈现的前端页面的源代码,您会注意到自动添加到HTML <body>标记中的两个CSS类是“已登录”和“管理栏”。

您还将注意到,只有<body>在用户登录后,这些CSS类名称才会添加到HTML 标记中,否则它们将不会添加到HTML <body>标记中。

因此,如果您不想使用默认的WordPress CSS类名称,则可以轻松添加自己的名称。

  1. 使用Twitter Bootstrap目录打开当前活动的WordPress主题。查找functions.php并打开它。
  2. 添加 add_filter('body_class', 'mbe_body_class');到文件的顶部。
  3. 将以下代码添加到文件底部。

编码:

function mbe_body_class($classes){
    if(is_user_logged_in()){
        $classes[] = 'body-logged-in';
    } else{
        $classes[] = 'body-logged-out';
    }
    return $classes;
}

现在,如果您在WordPress网站上查看任何呈现的前端页面的源代码,则如果用户已登录,则将看到“ body-logged-in”已添加到HTML <body>标记中,并且如果用户是注销后,您将看到“ body-logged-out”已添加到HTML <body>标记中。

第三步

  • 将CSS代码添加到您的主题。

这是代码部分,它将纠正您的主题以正确显示WordPress管理栏和Twitter Bootstrap导航,无论用户是否登录您的网站。

  1. 使用Twitter Bootstrap目录打开当前活动的WordPress主题。查找functions.php并打开它。
  2. 添加 add_action('wp_head', 'mbe_wp_head');到文件的顶部。
  3. 将以下代码添加到文件底部。

编码:

function mbe_wp_head(){
    echo '<style>'.PHP_EOL;
    echo 'body{ padding-top: 70px !important; }'.PHP_EOL;
    // Using custom CSS class name.
    echo 'body.body-logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    // Using WordPress default CSS class name.
    echo 'body.logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}

编辑代码

add_action('wp_head', 'mbe_wp_head');
function mbe_wp_head(){
    echo '<style>'
    .PHP_EOL
    .'body{ padding-top: 70px !important; }'
    .PHP_EOL
    .'body.body-logged-in .navbar-fixed-top{ top: 46px !important; }'
    .PHP_EOL
    .'body.logged-in .navbar-fixed-top{ top: 46px !important; }'
    .PHP_EOL
    .'@media only screen and (min-width: 783px) {'
    .PHP_EOL
    .'body{ padding-top: 70px !important; }'
    .PHP_EOL
    .'body.body-logged-in .navbar-fixed-top{ top: 28px !important; }'
    .PHP_EOL
    .'body.logged-in .navbar-fixed-top{ top: 28px !important; }'
    .PHP_EOL
    .'}</style>'
    .PHP_EOL;
}

此版本的mbe_wp_head函数包括移动优先的媒体查询,以确保将标题向下压入适当的距离。对于移动设备,WP管理栏高度为48px。在783px断点之后,管理栏会缩短到仅28px高。

你有它。如果用户已登录,那么您现在应该在页面的顶部具有WordPress管理栏,然后是Twitter Bootstrapped导航。如果用户从WordPress网站注销,则Twitter Bootstrap导航仍应适当显示在网站顶部。


1
您为什么不将CSS放入例如style.css中,而不是将其嵌入到html中?这将是一个更优雅的解决方案。也感谢您的工作和想法!
Max Ruf

@MaxRuf你是完全正确的。单独排队的CSS文件会更好。我只是想着人们找到这篇文章,所以他们可以轻松地复制/粘贴。遇到问题的可能性较小。
Michael Ecklund '16

25

不适用于我,但是我找到了一个不错的解决方法。在header.php中,使用wordpress函数查询是否显示了工具栏,然后在导航栏div下方创建一个空div:

<div class="navbar navbar-inverse navbar-fixed-top">
<?php 
  // Fix menu overlap
  if ( is_admin_bar_showing() ) echo '<div style="min-height: 32px;"></div>'; 
?>
<div class="navbar-inner">

很好的解决。我喜欢这比接受的答案要简单得多,并且它查找is_admin_bar_showing(),不仅是用户已登录,考虑到有人可能已登录,但关闭了管理栏,因此很好。谢谢!
Mark Rummel

3
从WordPress 3.8开始,管理栏高度为32px。
Cowgill 2014年

这有点hacky,但是我发现这是最好的解决方案。Upvoted
plushyObject 2015年

使用三元逻辑和内联样式的稍微修改后的解决方案:<nav class="navbar navbar-default navbar-fixed-top"<?php echo (is_admin_bar_showing()) ? ' style="top: 32px;"' : ''; ?>>
Mark Rummel

1
这很好,除了在移动设备上,偏移量不是32px而是46px。为了解决这个问题,我使用了CSS类而不是样式。这是可以应用的课程:.fix_wp_overlap { min-height: 32px; } @media screen and (max-width: 782px) { .fix_wp_overlap { top: 46px !important; } }
垃圾广告

3

您可以尝试以下方法:

   .navbar-fixed-top { top: 0px; }
    body.admin-bar .navbar-fixed-top { top: 28px !important; }

如果这对您有用(应该这样做!),则必须通过将以下代码粘贴到plugins文件夹或functions.php文件中,将wp管理栏移到底部。

function fb_move_admin_bar() {
    echo '
    <style type="text/css">
    body { 
    margin-top: -28px;
    padding-bottom: 28px;
    }
    body.admin-bar #wphead {
       padding-top: 0;
    }
    body.admin-bar #footer {
       padding-bottom: 28px;
    }
    #wpadminbar {
        top: auto !important;
        bottom: 0;
    }
    #wpadminbar .quicklinks .menupop ul {
        bottom: 28px;
    }
    </style>';
}
// on backend area
add_action( 'admin_head', 'fb_move_admin_bar' );
// on frontend area
add_action( 'wp_head', 'fb_move_admin_bar' );

作为替代,您可以使用此插件

我不太喜欢使用插件,因为大多数主题都使用不需要的伪代码加载了我的脚本...上面的解决方案1和2可以正常工作,但是如果它对您不起作用,则可以尝试以下解决方案3:

function stick_admin_bar_to_bottom_css() {
echo "

html {
padding-bottom: 28px !important;
}

body.admin-bar {
margin-top: -28px;
}

#wpadminbar {
top: auto !important;
bottom: 0;
}

#wpadminbar .quicklinks .menupop ul {
bottom: 28px;
}

";
}

add_action('admin_head', 'stick_admin_bar_to_bottom_css');
add_action('wp_head', 'stick_admin_bar_to_bottom_css');

没有28px问题,这似乎对我来说很好。


2

在我将其添加到body标签之前,它对我不起作用:

<body <?php body_class(); ?>>

然后工作正常!


0

完善!但是,正是我要找的东西,在第3步中做了一些不同的事情。不确定是否很重要,但是我的代码看起来像这样……

    function mbe_wp_head(){
    echo '<style>'.PHP_EOL;
    echo 'body{ padding-top: 70px !important; }'.PHP_EOL;
    // Using custom CSS class name.
    echo 'body.body-logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    // Using WordPress default CSS class name.
    echo 'body.logged-in .navbar-fixed-top{ top: 28px !important; }'.PHP_EOL;
    echo '</style>'.PHP_EOL;
}
add_action('wp_head', 'mbe_wp_head');

您提到在不同的地方添加内容,但是我一直都是这样做的,而且看起来还不错。感谢您的修复!


1
您究竟做了什么不同?
kaiser 2014年

0

修复Bootstrap'navbar-fixed-top'以防止站点菜单与WordPress管理菜单重叠

.admin-bar .navbar-fixed-top { top:46px; @media screen and (min-width:782px) { top:32px; } }
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.