有很多方法可以解决这个问题;我将在这里描述一种方法。
基本上,您需要将徽标从布局流程中取出,以便文本可以居中而不受其影响。最简单的方法是在徽标中添加position: absolute。
因此,一个完整的示例可能如下所示:
.header {
/* Allows the logo to be positioned relative to the header */
position: relative;
/* Centers the text — can be done other ways too */
text-align: center;
}
.header .logo {
position: absolute;
left: 0;
}
一个 JSFiddle 示例:https://jsfiddle.net/g01z27tv/.
保持正确对齐
如果您想保持徽标和文本正确(垂直)对齐,flexbox 将是您的朋友。
首先,确保标题高于徽标;否则标志会被剪掉。
接下来,为您的徽标创建一个包装器<div>。在你的情况下:
<header class="header">
<div class="logo-wrapper">
<div class="logo">
<img src="logo.gif" alt="a logo">
</div>
</div>
<!-- ... -->
</header>
现在,为.logo-wrapper 添加一些样式。即:
- 使其扩展以填充页眉的高度,
- 让它成为一个弹性容器,
- 使其项目垂直居中,
-
position: absolute,然后
- 将其放置在标题的左侧:
.logo-wrapper {
height: 100%;
display: flex;
align-items: center;
position: absolute;
left: 0;
}
请注意,您现在应该从 .logo 中删除 position: absolute 和 left: 0,因为我们正在定位包装器。
最后,为了正确对齐文本,我们将在 .header 上使用 flexbox:
.header {
display: flex;
justify-content: center; /* Use this instead of text-align: center */
align-items: center;
}
您现在会注意到,即使您将徽标设置得更高(只要页眉更高),所有内容都会保持对齐。
更新 JSFiddle 示例:https://jsfiddle.net/oL5un8gb/。
注意:我在这个例子中创建了一个单独的包装器<div>;在您的情况下,您可能不需要,因为您已经有一个单独的 <div> 和 <img>。您也许可以在没有额外元素的情况下使其工作。