【发布时间】:2013-11-30 14:38:39
【问题描述】:
我正在使用移动优先的方法构建一个小型网站,这意味着我从一个小屏幕开始,然后逐渐变大。为了节省空间,我在页面上显示/隐藏一些信息或根据屏幕大小替换信息。虽然这看起来很酷,但它确实让我头疼,试图让标记尽可能地符合语义。
让我们开始吧,这就是我目前所拥有的:
HTML
<header>
<nav role="navigation">
<a href="#navlist">☰</a>
<a href="/">Page Title</a>
<p class="hidden-s hidden-l">I the page's tagline</p>
<ul id="navlist">
<li><a href="/">Link 1</a></li>
<li><a href="/">Link 2</a></li>
<li><a href="/">Link 3</a></li>
<li><a href="#">Close Menu</a></li>
</ul>
</nav>
</header>
<main role="main">
<article>
<header>
<h1><a href="#">Blog Post 1</a></h1>
</header>
<p>Short excerpt of Blog Post 1</p>
</article>
<article>
<header>
<h1><a href="#">Blog Post 2</a></h1>
</header>
<p>Short excerpt of Blog Post 2</p>
</article>
</main>
CSS
nav { background-color: rgba(255, 0, 0, .4); }
#navlist {
display:none;
}
#navlist:target {
display:block;
}
.hidden-s {
display: none;
}
@media screen and (min-width: 500px) {
.hidden-s {
display: block;
}
}
@media screen and (min-width: 700px) {
.hidden-l {
display: none;
}
}
你看,标语在小屏幕上是隐藏的,在中等大小的屏幕上显示,在大屏幕上再次隐藏。我在大屏幕上隐藏了标语,因为我想在大屏幕上的不同位置添加更多信息,如下所示:
HTML
<main role="main">
<div class="more-info">
<header>
<h1>Page Title</h1>
<p>Some more info over the page you are reading.</p>
</header>
</div>
<article>
<header>
<h1><a href="#">Blog Post 1</a></h1>
</header>
<p>Short excerpt of Blog Post 1</p>
</article>
<article>
<header>
<h1><a href="#">Blog Post 2</a></h1>
</header>
<p>Short excerpt of Blog Post 2</p>
</article>
CSS
.hidden-s,
.more-info {
display: none;
}
@media screen and (min-width: 700px) {
.hidden-l {
display: none;
}
.more-info {
display: block;
}
}
现在问题出在header 元素上。让我引用the spec:
当最近的祖先分段内容或分段根元素是body元素时,则适用于整个页面。
所以通过将nav 包装在header 中,我基本上说导航及其内容适合整个页面,这是真的吗?因为与此同时,我觉得将nav 放在header 中只在中型屏幕上有意义,因为附加信息仅在那里可见。对于更大的屏幕,.more-info 的内容是页眉。在小屏幕上,我什至不知道在<h1> 中放什么。
我可以把页面标题放在那里,但是一旦页面标题变成图像(徽标或类似的东西),它又是一个糟糕的标记。
我应该如何继续 - 页面上有两个 headers?据我所知,这是允许的,但我真的不确定在我的情况下是否可以/有意?
【问题讨论】:
标签: css html responsive-design semantics