使用 javascript 设置正文填充以移动到固定导航下方

Posted

技术标签:

【中文标题】使用 javascript 设置正文填充以移动到固定导航下方【英文标题】:Setting body padding with javascript to move below fixed navigation 【发布时间】:2017-12-24 19:06:19 【问题描述】:

我进行了很多搜索,但找不到任何有用的东西。我正在开发一个顶部带有 Bootstrap 固定导航栏的 WP 主题。一切都很顺利,但是当我开始添加更多菜单项时,菜单高度扩大并开始覆盖内容。由于这是一个主题,其他人可能会开始在导航中放置大量链接,因此我需要一种方法将 body padding 设置为导航栏的高度。

这是 html

<body class="page-template page-template-page-full-width page-template-page-full-width-php page page-id-42">

    <header role="banner">

        <div id="inner-header" class="clearfix">

            <div class="navbar navbar-fixed-top">
                <div class="navbar-inner">
                    <div class="container-fluid nav-container">
                        <nav role="navigation">
                           <div class="span3">
                            <a class="brand" id="logo" title="Just another WordPress site" href="http://corpuschristi2:8888/corpuschristi">
                                                                        <img src="http://corpuschristi2:8888/corpuschristi/wp-content/uploads/2017/07/cc_logo_white.png" >
                                                                            <!--<img src="" >-->
                                    </a>
                                                            </div>
                                                        <div class="span9">
                            <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                                <span class="icon-bar"></span>
                            </a>

                            <div class="nav-collapse">
                                <ul id="menu-main-menu" class="nav"><li id="menu-item-45" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://corpuschristi2:8888/corpuschristi/recent-news/">Recent News</a></li><li id="menu-item-44" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-42 current_page_item active"><a href="http://corpuschristi2:8888/corpuschristi/test-page/">Full Width Page w/fi</a></li><li id="menu-item-119" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://corpuschristi2:8888/corpuschristi/full-width-page-wo-fi/">Full Width Page w/o FI</a></li><li id="menu-item-46" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://corpuschristi2:8888/corpuschristi/sample-page/">Left Side Bar Page w/FI</a></li><li id="menu-item-118" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://corpuschristi2:8888/corpuschristi/left-sidebar-wo-fi/">Left sidebar w/o FI</a></li><li id="menu-item-107" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://corpuschristi2:8888/corpuschristi/regular-page/">Regular Page w/ FI</a></li><li id="menu-item-111" class="menu-item menu-item-type-post_type menu-item-object-page"><a href="http://corpuschristi2:8888/corpuschristi/regular-page-wo-fi/">Regular Page w/o FI</a></li></ul>                              </div>
                                                        </div>
                        </nav>


                    </div> <!-- end .nav-container -->
                </div> <!-- end .navbar-inner -->
            </div> <!-- end .navbar -->

        </div> <!-- end #inner-header -->

    </header> <!-- end header -->

    <div class="container-fluid">
                            <div style="position: relative">
    <h1 class="title-over-image">Full Width Page w/fi</h1>...

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

你能抓住导航栏的高度并使用 jquery 设置填充吗?

$('body').css('padding-top',$('.navbar').height)

【讨论】:

谢谢。我会说我的JS有点欠缺。添加脚本的最佳位置在哪里?我需要把它放在一个函数中吗? 我相信它只需要在您的$(document).ready(function() \\put it here )中的任何位置 我试过了,但没有用。这似乎应该是一件简单的事情,但我担心有什么干扰它。我是否需要注意 CSS 样式中可能冲突或覆盖它的任何内容? 不,javascript 应该能够覆盖 CSS。当你运行console.log($('.navbar').height) 时你会得到什么? Uncaught TypeError: $ is not a function at :1:13【参考方案2】:

使用 jquery 设置填充。

在function.php中添加下面的函数

<?php
function myscript() 
?>
<script type="text/javascript">
jQuery( document ).ready( function( $ ) 
    jQuery('body').css('padding-top',jQuery('.navbar').height);
 );
</script>
<?php

add_action( 'wp_footer', 'myscript' );
?>

【讨论】:

好的,我试过了,没用。我确实在文档末尾自动加载了 wp_footer,所以我也尝试将脚本放在头部但仍然没有。 CSS 样式中是否有任何我应该注意的可能会覆盖它的内容? 好的,你可以根据分辨率大小使用响应式媒体查询css 在这种情况下,导航区域的大小与窗口大小无关。对于较小的屏幕,我已经让它崩溃了。问题是内容的数量,在这种情况下是链接的数量。我将把它传递下去,如果添加链接的人添加了足够多的链接以使菜单进入第二行,则导航区域会扩大并且内容会被掩盖。 在footer.php中添加java脚本: 【参考方案3】:
<?php
function myscript() 
?>
<script type="text/javascript">
jQuery( document ).ready( function() 
    jQuery('body').css('padding-top',jQuery('.navbar').height());
 );
</script>
<?php

add_action( 'wp_footer', 'myscript' );
?>

【讨论】:

【参考方案4】:

解决办法是:

$('body').css('padding-top',$('.navbar').outerHeight(true));

当高度设置为自动时,似乎仅使用 .height 会出现问题。使用 .outerHeight() 可以得到正确的值。

【讨论】:

以上是关于使用 javascript 设置正文填充以移动到固定导航下方的主要内容,如果未能解决你的问题,请参考以下文章

当它们移动以填充其他淡出的 div 留下的空白空间时如何为 div 设置动画

通过 JavaScript 获取元素的位置

如何以编程方式填充使用 React 构建的输入元素?

如何使用 Datatable 以 POST 类型传递请求正文数据以使用 Javascript 进行服务器端分页

边框和填充宽度javascript

如何将图像设置为画布背景而不是让它在 Android Studio/JavaScript 中填充颜色