【发布时间】:2015-08-24 00:51:21
【问题描述】:
我正在使用一个简单的无序列表在一个带有导航栏的网站上工作。每个 HTML 元素的 CSS 值以 px 为单位。我一直在 Google Chrome 中使用 Inspect Element 来测量 ul 标记的上部填充,该标记使列表居中,以及 a 标记的填充使链接与导航栏的高度相同。
当我在屏幕较大的笔记本电脑/台式机上查看该页面时,一切看起来都不错。浅灰色的“选定链接”背景与导航栏的深灰色完美对齐:
但是,当我在任何移动设备上查看同一页面时(我已经在 iPhone 6+、iPhone 5 和 iPad 2 上进行了测试),所选链接的填充有点偏离:
如果我稍微调整链接和无序列表填充的 CSS 属性,我可以使浅灰色背景在移动设备上完美对齐,但在台式机/笔记本电脑设备上就关闭了!
我对 px 测量的工作原理进行了一些研究,并了解它并不完全对应于屏幕上的一个像素,而是对应于某种“CSS 像素”,该像素可以根据浏览器缩放而改变大小和像素密度和其他一些因素。如果导航栏在移动设备上实际显示更小,这对我来说是有意义的,但元素实际上在改变位置的事实让我感到困惑。如果有人对这里发生的事情有一些澄清信息,以及我可以做些什么来使菜单栏元素在桌面和移动设备上正确排列,我将不胜感激。
澄清编辑:我已将导航栏的度量单位切换为 em,但仍然存在相同的错位问题。我的理解是,在同一设备上,其他所有条件(浏览器缩放等)都相同,px(或 pt 等)具有固定长度。因此,为了便于讨论,假设 10px = 2cm 在特定桌面上,D,而 10px = 1cm 在特定移动设备上,M,其他条件相同.因此,从 M 到 D 存在 2 倍的真实比例因子。现在,使用我为导航栏中的每个元素分配的固定 CSS 属性集,“选定链接”背景和每个列表项(博客等)(以及所有它们的填充)使用 D 完美对齐。因此,当 M 渲染导航栏时,它应该 到达比 D 渲染的导航栏小 2 倍的导航栏。尽管 M 实际上更小,但导航栏的高度(以 px 为单位)仍等于列表项的高度及其相关的以 px 为单位的填充。相反,在渲染过程中的某处,M 决定导航栏的高度实际上略 小于列表项的高度及其关联的填充。我很难理解为什么会发生这种情况。换句话说,即使 px 在两个不同的设备上是不同的尺寸,在 px 中测量的两个量之间的 relation 应该仍然是一样。
导航栏的代码如下。
<body id="blog">
<div id="wrapper">
<div id="header">
<div id="nav-menu">
<ul id="nav">
<li class="nav"><a id="nav-blog" href="/blog" class="nav">BLOG</a></li>
<li class="nav"><a id="nav-projects" href="/projects" class="nav">PROJECTS</a></li>
<li class="nav"><a id="nav-about" href="/about" class="nav">ABOUT</a></li>
<li class="nav"><a id="nav-contact" href="/contact" class="nav">CONTACT</a></li>
<li class="nav"><a href="/rss" class="nav">RSS</a></li>
</ul>
</div>
使用以下 CSS 代码:
div#header {
position: fixed;
height: 60px;
width: 100%;
margin: 0 auto;
background: #57606A;
opacity: 0.85;
}
ul#nav {
font-size: 0;
list-style-type: none;
text-align: left;
margin: 0;
padding-top: 19px;
}
li.nav {
font-size: 19px;
font-family: "Helvetica", sans-serif;
font-weight: lighter;
display: inline;
}
a:link.nav {
color: #dddddd;
text-decoration: none;
transition: 0.25s;
padding: 19px 12px;
}
/* Ensures that the current page is highlighted in nav */
body#blog a#nav-blog,
body#about a#nav-about,
body#projects a#nav-projects,
body#contact a#nav-contact {
color: #aaccaa;
background: #798088;
}
【问题讨论】:
标签: html css navigationbar