.content {
background-color: #BAC9FF;
height: 100vh;
}
.navbar {
height: 10vh;
background-color: white;
display: block;
}
.title {
font-family: arial;
font-size: 3vh;
display: inline-block;
padding-left: 1vw;
margin-top: 3vh;
}
.logo {
display: inline-block;
vertical-align: middle;
}
<div class="content">
<div class="navbar">
<div class="title">
我的 DICTIONARY
</div>
<div class="logo">
<img src="logo.png" width="60" height="50">
</div>
</div>
</div>
我尝试应用“margin-left: auto; margin-right: auto
”等多种技术,并尝试将其更改为“阻止”并使用display:absolute
强制将导航栏元素放置到位。然而,无济于事,我无法做到。有没有建议将我的页面从当前转换...
答案 0 :(得分:2)
你可以使用flex并最终重新思考结构:
header,
header div,
header nav {
display: flex;
justify-content: space-between;/* push things appart from edge to edge */
box-sizing:border-box;
}
header div {
width: calc(50% + 60px - 1em);/* 50% + width of image - padding */
}
header nav {
flex: 1;
justify-content: flex-end;
flex-wrap:wrap;
}
header> * > * {
margin: auto 1em;/* vertical align(same as align-items: center + margin-left&right : 1em */
}
header {/* makup to see its center */
padding: 1em;
background: linear-gradient(to top, transparent 50%, rgba(0, 0, 0, 0.2) 50%), linear-gradient(to left, transparent 50%, rgba(0, 0, 0, 0.2) 50%)
}
img {
border-radius: 50%;
box-shadow: 0 0 0 2px;
opacity: 0.5
}
<header>
<div>
<a href="#">link</a>
<img src="http://dummyimage.com/60x40&text=logo" />
</div>
<nav>
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Contact Us</a>
</nav>
</header>
您也可以使用display:table来支持旧浏览器(例如IE8):
header,
header div,
header nav {
box-sizing:border-box;
}
header {
display:table;
width:100%;
table-layout:fixed;
}
header div ,
header nav {
display:table-cell;
vertical-align:middle;
text-align:justify;
}
header > :after,
header > :before{
content:'';
display:inline-block;
width:99%;
}
header > nav {
text-align:right;
padding-left:40px;
}
header> * > * {
vertical-align:middle;
}
header {/* makup to see its center */
padding:0 1em;
background: linear-gradient(to top, transparent 50%, rgba(0, 0, 0, 0.2) 50%), linear-gradient(to left, transparent 50%, rgba(0, 0, 0, 0.2) 50%)
}
img {
border-radius: 50%;
box-shadow: 0 0 0 2px;
opacity: 0.5;
margin-right:-30px;
}
nav a {
display:inline-block;
text-align:center;
max-width:30%;
margin:0 1em;
}
<header>
<div>
<a href="#">link</a>
<img src="http://dummyimage.com/60x40&text=logo" />
</div>
<nav>
<a href="#">Home</a>
<a href="#">About</a>
<a href="#">Contact Us</a>
</nav>
</header>
两种技术都允许vertical-align
内容(这似乎是你的问题)并且很容易将它们喷在里面
注意text-align:justify
+伪来模仿来自justify-content:space-between
的{{1}}。
答案 1 :(得分:1)
您需要从徽标中删除display:inline-block
属性,将您的css更新为
.content {
background-color: #BAC9FF;
height: 100vh;
}
.navbar {
height: 10vh;
background-color: white;
display: block;
}
.title {
font-family: arial;
font-size: 3vh;
padding-left: 1vw;
margin-top: 3vh;
}
.logo {
margin-left:50%;
margin-right:50%;
}
您可能仍希望调整标题类以控制标题div元素的宽度,以防止div跨越页面的整个宽度,但此更改将使徽标居中。
答案 2 :(得分:1)
另一种无缝工作的方式是以left
和transform: translateX()
属性为中心:
.logo {
position: absolute;
display: inline-block;
left: 50%;
transform: translateX(-50%);
}
此外,如果您还要将元素垂直居中,请对top
和translateY()
.logo {
position: absolute;
display: inline-block;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
}
优点:
缺点:
一些注意事项:
position
属性(例如relative
,absolute
,fixed
)。display: block
替换div。 This attribute is initially set to block
for divs. 另一个解决方案是使用flexbox(如@GCyrillus'答案中所述),但这也将删除与IE9的兼容性。 IE10和11也报告了大量的错误。
以下是包含更改后代码的代码段。
.content {
background-color: #BAC9FF;
height: 100vh;
}
.navbar {
height: 10vh;
background-color: white;
position: relative;
}
.title {
font-family: arial;
font-size: 3vh;
display: inline-block;
padding-left: 1vw;
margin-top: 3vh;
}
.logo {
position: absolute;
display: inline-block;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
}
<div class="content">
<div class="navbar">
<div class="title">
我的 DICTIONARY
</div>
<div class="logo">
<img src="logo.png" width="60" height="50">
</div>
</div>
</div>
答案 3 :(得分:1)
我会重新构建html,将div
元素更改为span
<div class="content">
<div class="navbar">
<span class="title">
我的 DICTIONARY
</span>
<span class="logo">
<img src="logo.png" width="60" height="50">
</span>
</div>
</div>
然后在css
.content {
background-color: #BAC9FF;
height: 100vh;
}
.navbar {
height: 10vh;
background-color: white;
position: relative;
}
.title {
font-family: arial;
font-size: 3vh;
padding-left: 1vw;
margin-top: 3vh;
}
.logo {
position: absolute;
left: 50%;
top: 50%;
transform: translateX(-50%) translateY(-50%);
}