【发布时间】:2017-07-06 05:10:13
【问题描述】:
我希望有一位 CSS 专家可以帮助解决这个问题... 我正在为一个站点构建响应式布局,其中包括顶部的水平导航栏。这个栏包含 5 个按钮,每个按钮的宽度都相同(尽管显然这个宽度需要灵活)。当在具有小视口宽度的设备上查看菜单时,我想为按钮使用图标而不是文本。一旦我觉得视口宽度达到合适的大小,我将使用媒体查询来调整布局以使用文本。这很重要,因为我预计不需要更改图标本身的大小。我很高兴它们具有固定大小,以按钮为中心,如果按钮大小本身发生变化,那么中心图标周围只会有更多“填充”。 通常我会使用将所有图标放在一张图像中并使用精灵技术仅显示图像的正确部分,但我遇到了一个问题。如果我希望锚元素填充父列表元素,那么如何使精灵居中?
以下是一些示例标记: 首先是html(sn-p)
<nav>
<ul class="top_nav">
<li><a class="link_1" href="#">link 1</a></li>
<li><a class="link_2" href="#">link 2</a></li>
<li><a class="link_3" href="#">link 3</a></li>
<li><a class="link_4" href="#">link 4</a></li>
<li><a class="link_5" href="#">link 5</a></li>
</ul>
</nav>
我可能会这样设计:
nav ul {
width: 100%;
overflow: auto;
}
nav li {
float: left;
width: 20%;
background: #2c2c2c; /* dark background for light icons */
}
nav li a {
display: block;
border: 1px solid #e7e7e7;
background-image: url(path/to/sprite.png);
background-repeat: no-repeat;
text-indent: -15000px;
width: 48px;
height: 48px;
margin: 0 auto;
}
nav li a.link_1 {
background-position: 0 0;
}
nav li a.link_2 {
background-position: 0 -49px;
}
等等……
但这只会在一个按钮内给我一个 48px x 48px 的可点击区域,该区域可以根据父元素的大小改变它的宽度。如果我让锚元素填充它的父列表元素,那么图标不能使用边距规则居中。 我可以在锚元素中添加另一个元素,该元素是空的,但背景是这样的图标:
<li><a href="#"><div class="link_1">Link 1</div></a></li>
并设置样式:
nav li a {
display: block;
border: 1px solid #e7e7e7;
width: 100%;
}
nav li a div {
background-image: url(path/to/sprite.png);
background-repeat: no-repeat;
text-indent: -15000px;
width: 48px;
height: 48px;
margin: 0 auto;
}
nav li a div.link_1 {
background-position: 0 0;
}
但这不是一个非常语义化或优雅的解决方案。谁能想到更好的办法??
【问题讨论】:
标签: html css responsive-design