2017-08-10 23 views
0

我已经浏览了几个关于这个问题;然而,他们似乎都没有解决或解决这个问题。h1和导航元素拒绝正确排队

实质上发生的事情是,h1和nav元素并排结束,但没有正确排列。我已经尝试了多个显示和浮动设置,但都没有工作。

CSS本身相对干净,也许flex不能正常工作,或者我没有正确使用它?我不确定什么导致这里的问题帮助非常感谢!

/* Mobile CSS */ 
 
    #navbar h1 { 
 
     display: block; 
 
     padding-top: 1.4rem; 
 
     text-align: center; 
 
     font-weight: 400; 
 
    } 
 

 
    #hbmenu { 
 
     display: block; 
 
     position:absolute; top:1.8rem; left:2rem; 
 
     background-color: transparent; 
 
     border: none; 
 
    } 
 

 
    .iconbar { 
 
     display: block; 
 
     margin-top: 5px; 
 
     height: 3px; 
 
     border-radius: 3px; 
 
     width: 30px; 
 
     background-color: #888; 
 
    } 
 

 
    #hbmenu:hover .iconbar { 
 
     background-color: #fff 
 
    } 
 

 
    #navbar > nav { 
 
     display: flex; 
 
     flex-direction: column; 
 
     background-color: white; 
 
     transform: 300ms all ease; 
 
    } 
 

 
    #navbar > nav > ul { 
 
     margin: 0 auto; 
 
     flex: 1; 
 
     text-align: center; 
 
     list-style-type: none; 
 
    } 
 

 
    #navbar > nav > ul > li { 
 
     border-bottom: 1px solid rgba(51,51,51,0.4); 
 
    } 
 

 
    #navbar > nav > ul > li > a {/*border bottom none?*/ 
 
    display: block; 
 
    padding: 1.2rem 0; 
 
    text-decoration: none; 
 
    transition: 250ms all ease; 
 
    } 
 

 
    /* Medium screens or Desktop screens */ 
 
    @media all and (min-width: 600px) { 
 

 
     #hbmenu { 
 
     display: none; 
 
     } 
 

 
     #navbar h1 { 
 
     display: inline-block; 
 
     padding-left: 2rem; 
 
     } 
 

 
     #navbar > nav { 
 
     display: inline-block; 
 
     padding-top: 2.1rem; 
 
     background-color: #333333; 
 
     } 
 

 
     #navbar > nav > ul { 
 
     padding-left: 1.8rem; 
 
     } 
 

 
     #navbar > nav > ul > li { 
 
     display: inline-block; 
 
     } 
 

 
     #navbar > nav > ul > li > a { 
 
     padding: 0 0.5rem; 
 
     margin: 0 0.5rem; 
 
     color: #9D9D9D; 
 
     border-top: 1.5px solid transparent; 
 
     border-bottom: 1.5px solid transparent; 
 
     transition: 0.5s; 
 
     } 
 

 
     #navbar > nav > ul > li > a:hover { 
 
     border-bottom: 1.5px solid #fff; 
 
     color: #fff; 
 
     transition: 0.5s; 
 
     } 
 

 
    } 
 

 
    /* Color & Font Stuff */ 
 
    #navbar > nav > ul > li > a { 
 
     font-family: "Helvetica Neue"; 
 
     font-weight: 600; 
 
    } 
 

 
    .highlight { 
 
    color: #9D9D9D; 
 
    transition: 0.5s; 
 
    } 
 

 
    .highlight:hover { 
 
     color: #ffffff; 
 
     transition: 0.5s; 
 
    }
<header> 
 
    <div id="navbar"> 
 
     <button type="button" id="hbmenu"> 
 
     <span class="iconbar"></span> 
 
     <span class="iconbar"></span> 
 
     <span class="iconbar"></span> 
 
    </button> 
 
    <h1> 
 
     <span class="highlight">Gatsby</span> 
 
    </h1> 
 
    <nav> 
 
     <ul> 
 
     <li> 
 
     <a href="#">Home</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">Test</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">About</a> 
 
     </li> 
 
     </ul> 
 
    </nav> 
 
    </div> 
 
    </header> 
 

取出h1元素允许我适当地添加填充到导航元素的顶部。而只有这两个人才能让我正确地填充h1。我相信填充不是垂直居中的最佳方式,但问题仍然存在。

UPDATE:

misalignment picture

我赶紧打上了其希望澄清这一问题的屏幕截图。底部的红线显示文本当前的排列方式。虽然顶部的红线表明li元素应该如何垂直居中。

h1, nav element views

由于这表明也许更大的问题是如何其目前设置的元素没有,如果你将“捕捉”。

+0

以何种方式不都排队? – sol

+0

使用开发人员工具,您可以在其中查看边距和填充。标题标签和导航标签可能不同。这可能是问题 –

+0

你想达到什么目的? – Felix

回答

0

display: inline-block;元素可以垂直中心通过vertical-align: middle;对准,只需将其添加到两个h1nav

/* Mobile CSS */ 
 
    #navbar h1 { 
 
     display: block; 
 
     text-align: center; 
 
     font-weight: 400; 
 
    } 
 

 
    #hbmenu { 
 
     display: block; 
 
     position:absolute; top:1.8rem; left:2rem; 
 
     background-color: transparent; 
 
     border: none; 
 
    } 
 

 
    .iconbar { 
 
     display: block; 
 
     margin-top: 5px; 
 
     height: 3px; 
 
     border-radius: 3px; 
 
     width: 30px; 
 
     background-color: #888; 
 
    } 
 

 
    #hbmenu:hover .iconbar { 
 
     background-color: #fff 
 
    } 
 

 
    #navbar > nav { 
 
     display: flex; 
 
     flex-direction: column; 
 
     background-color: white; 
 
     transform: 300ms all ease; 
 
    } 
 

 
    #navbar > nav > ul { 
 
     margin: 0 auto; 
 
     flex: 1; 
 
     text-align: center; 
 
     list-style-type: none; 
 
    } 
 

 
    #navbar > nav > ul > li { 
 
     border-bottom: 1px solid rgba(51,51,51,0.4); 
 
    } 
 

 
    #navbar > nav > ul > li > a {/*border bottom none?*/ 
 
    display: block; 
 
    padding: 1.2rem 0; 
 
    text-decoration: none; 
 
    transition: 250ms all ease; 
 
    } 
 

 
    /* Medium screens or Desktop screens */ 
 
    @media all and (min-width: 600px) { 
 

 
     #hbmenu { 
 
     display: none; 
 
     } 
 

 
     #navbar h1 { 
 
     display: inline-block; 
 
     padding-left: 2rem; 
 
     vertical-align: middle; 
 
     } 
 

 
     #navbar > nav { 
 
     display: inline-block; 
 
     vertical-align: middle; 
 
     background-color: #333333; 
 
     } 
 

 
     #navbar > nav > ul { 
 
     padding-left: 1.8rem; 
 
     } 
 

 
     #navbar > nav > ul > li { 
 
     float: left; 
 
     } 
 

 
     #navbar > nav > ul > li > a { 
 
     padding: 0 0.5rem; 
 
     margin: 0 0.5rem; 
 
     color: #9D9D9D; 
 
     border-top: 1.5px solid transparent; 
 
     border-bottom: 1.5px solid transparent; 
 
     transition: 0.5s; 
 
     } 
 

 
     #navbar > nav > ul > li > a:hover { 
 
     border-bottom: 1.5px solid #fff; 
 
     color: #fff; 
 
     transition: 0.5s; 
 
     } 
 

 
    } 
 

 
    /* Color & Font Stuff */ 
 
    #navbar > nav > ul > li > a { 
 
     font-family: "Helvetica Neue"; 
 
     font-weight: 600; 
 
    } 
 

 
    .highlight { 
 
    color: #9D9D9D; 
 
    transition: 0.5s; 
 
    } 
 

 
    .highlight:hover { 
 
     color: #ffffff; 
 
     transition: 0.5s; 
 
    }
<header> 
 
    <div id="navbar"> 
 
     <button type="button" id="hbmenu"> 
 
     <span class="iconbar"></span> 
 
     <span class="iconbar"></span> 
 
     <span class="iconbar"></span> 
 
    </button> 
 
    <h1> 
 
     <span class="highlight">Gatsby</span> 
 
    </h1> 
 
    <nav> 
 
     <ul> 
 
     <li> 
 
     <a href="#">Home</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">Test</a> 
 
     </li> 
 
     <li> 
 
     <a href="#">About</a> 
 
     </li> 
 
     </ul> 
 
    </nav> 
 
    </div> 
 
    </header> 
 

+0

在这种情况下,将vertical-align:middle仅添加到#navbar> nav。然后,将#navbar> nav> ul> li更改为float:left而不是使用display,似乎会产生适当的行为。如果你想更新你的答案,我可以让这个接受答案 – Marce5467

+0

@ Marce5467更新的答案 –

0

您可以尝试使用flexbox来解决您的问题。检查codepen样品。我认为这是你的要求

.header-container { 
    display: flex; 
    max-width: 600px; 
    align-items: center; 
} 

h1, nav { 
    flex-grow: 1; 
} 

检查codepen

+0

“我认为这是你的要求”虽然你的解决方案可能是有用的,但它基本上是对OP想要的一个猜测 – sol

+0

@Abinthaha快速检查codepen看起来像你试图确定我想要达到的目标。我将编辑我的项目,并接受这个答案,如果它的工作。 – Marce5467

+0

@ovokuro如果我的口头解释不好,我很抱歉。我添加了图片来帮助! – Marce5467