CSS:根据单页导航中的 ID 在一个部分中定位 DIV
CSS: Target a DIV within a Section based on its ID in a One-Pager
我正在开发一个单页 WordPress 网站,我需要在第一部分 (#home) 上隐藏页面的徽标 (#logo)。整个页面是一页纸,所以第一部分不需要徽标,实际上它应该只出现在第一部分下面的其他部分。
这可以使用 CSS 完成吗?
如果是,那么我还想更改第一部分菜单元素的颜色,并为其他部分更改颜色。
简答:否
您需要编写一些 JavaScript 或 jQuery 来确定第一部分(即主页部分)何时不再出现在视图中 window。
徽标通常位于 <header>
内。它是 HTML 标记中的一个元素。它与部分没有关系。使用样式,您可以将其放置在您想要的位置,然后滚动文档以查看其余内容部分。
我假设这是一页纸,您希望 <header>
得到修复。这是一个很好的假设,因为您想在每个部分的同一位置显示徽标,第一个部分除外。
如何
有多种方法可以实现此行为。本质上,您需要确定主页部分是否在浏览器中 window。如果是,则隐藏徽标;否则显示。
一个策略是:
- 通过抓住文档中第 2 部分的位置(即其 offset().top 位置)来设置徽标的显示位置。
- 然后确定第一节在 window 中的位置。如果它 > showPosition,那么它就在视野之外。
这里有一些代码可以帮助您入门。您需要根据您的特定需求对其进行调整。
(function ( $, window, document ) {
"use strict";
var sectionContainers,
showPosition = 400;
var init = function () {
initSection();
logoHandler();
}
function initSection() {
sectionContainers = $( '.section-container' );
showPosition = $( sectionContainers[1] ).offset().top;
}
function logoHandler() {
var $logo = $( '#logo' );
if ( $( sectionContainers[0] ).offset().top >= showPosition ) {
$logo.show();
}
$( window ).scroll( function () {
if ( $( this ).scrollTop() > showPosition ) {
$logo.show();
} else {
$logo.hide();
}
} );
}
$( document ).ready( function () {
init();
} );
}( jQuery, window, document ));
body {
color: #fff;
}
.site-header {
position: fixed;
}
.site-logo {
font-weight: bold;
border: 5px solid #fff;
padding: 10px;
}
.section-container {
width: 100%;
height: 400px;
text-align: center;
padding: 50px 5%;
background-color: #627f00;
}
.section-container:nth-child(odd) {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header class="site-header" itemscope itemtype="http://schema.org/WPHeader">
<p id="logo" class="site-logo" itemprop="headline" style="display: none;">Logo</p>
</header>
<section id="home" class="section-container">
this is the home section
</section>
<section id="about" class="section-container">
this is the about section
</section>
<section id="about" class="section-container">
this is the portfolio section
</section>
我正在开发一个单页 WordPress 网站,我需要在第一部分 (#home) 上隐藏页面的徽标 (#logo)。整个页面是一页纸,所以第一部分不需要徽标,实际上它应该只出现在第一部分下面的其他部分。
这可以使用 CSS 完成吗?
如果是,那么我还想更改第一部分菜单元素的颜色,并为其他部分更改颜色。
简答:否
您需要编写一些 JavaScript 或 jQuery 来确定第一部分(即主页部分)何时不再出现在视图中 window。
徽标通常位于 <header>
内。它是 HTML 标记中的一个元素。它与部分没有关系。使用样式,您可以将其放置在您想要的位置,然后滚动文档以查看其余内容部分。
我假设这是一页纸,您希望 <header>
得到修复。这是一个很好的假设,因为您想在每个部分的同一位置显示徽标,第一个部分除外。
如何
有多种方法可以实现此行为。本质上,您需要确定主页部分是否在浏览器中 window。如果是,则隐藏徽标;否则显示。
一个策略是:
- 通过抓住文档中第 2 部分的位置(即其 offset().top 位置)来设置徽标的显示位置。
- 然后确定第一节在 window 中的位置。如果它 > showPosition,那么它就在视野之外。
这里有一些代码可以帮助您入门。您需要根据您的特定需求对其进行调整。
(function ( $, window, document ) {
"use strict";
var sectionContainers,
showPosition = 400;
var init = function () {
initSection();
logoHandler();
}
function initSection() {
sectionContainers = $( '.section-container' );
showPosition = $( sectionContainers[1] ).offset().top;
}
function logoHandler() {
var $logo = $( '#logo' );
if ( $( sectionContainers[0] ).offset().top >= showPosition ) {
$logo.show();
}
$( window ).scroll( function () {
if ( $( this ).scrollTop() > showPosition ) {
$logo.show();
} else {
$logo.hide();
}
} );
}
$( document ).ready( function () {
init();
} );
}( jQuery, window, document ));
body {
color: #fff;
}
.site-header {
position: fixed;
}
.site-logo {
font-weight: bold;
border: 5px solid #fff;
padding: 10px;
}
.section-container {
width: 100%;
height: 400px;
text-align: center;
padding: 50px 5%;
background-color: #627f00;
}
.section-container:nth-child(odd) {
background-color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<header class="site-header" itemscope itemtype="http://schema.org/WPHeader">
<p id="logo" class="site-logo" itemprop="headline" style="display: none;">Logo</p>
</header>
<section id="home" class="section-container">
this is the home section
</section>
<section id="about" class="section-container">
this is the about section
</section>
<section id="about" class="section-container">
this is the portfolio section
</section>