将元素定位在同一导航栏中(左/中/右)

时间:2014-12-01 22:00:34

标签: html css

我正在制作一个简单的导航栏,左侧是徽标,中间是图像,右侧是一些链接。

我希望这一切都在一条线上,彼此相邻,但出于某种原因,我无法将链接与其余部分放在同一条线上。

你可以看到我的作品here。这是代码:

html {
  height: 100%;
  margin: 0;
  padding: 0;
}
body {
  height: 100%;
  margin: 0;
  background-color: #D8D8D8;
  color: white;
  border: 0;
  padding: 0;
  font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
}
nav {
  background-color: #888888;
}
#links {
  height: 30px;
  padding: 10px;
  margin: 0;
}
#links li {
  text-align: center;
  margin: 0;
  height: 30px;
  padding: 0;
  padding-left: 10px;
  padding-right: 10px;
  list-style-type: none;
  display: inline;
}
#container {
  min-width: 624px;
  min-height: 100%;
  position: relative;
}
* {
  margin: 0;
  padding: 0;
}
#links {
  overflow: auto;
  list-style-type: none;
}
#links li {
  height: 25px;
  float: right;
  margin-right: 0;
  border-right: 1px solid #aaa;
  padding: 0 20px;
}
#links li:first-child {
  border-right: none;
}
#links li a {
  text-decoration: none;
  color: #ccc;
  font: 25px/1 Helvetica, Verdana, sans-serif;
  text-transform: uppercase;
  transition: all 0.5s ease;
}
#links li a:hover {
  color: #666;
}
#links li.active a {
  font-weight: bold;
  color: #333;
}
#logo img {
  height: 50px;
  float: left;
  margin-left: 10px;
  cursor: pointer;
}
#arrow {
  text-align: center;
}
#arrow img {
  height: 30px;
  margin-top: 10px;
  margin-bottom: 10px;
  cursor: pointer;
}
<div id="container">
  <nav>
    <ul id="logo">
      <img src="images/logo_tekst.png">
    </ul>
    <ul id="arrow">
      <img src="images/remove-arrow-hi.png">
    </ul>
    <ul id="links">
      <li class="link"><a href="index_pro.html">Pro</a>
      </li>
      <li class="link"><a href="index.html">Recreative</a>
      </li>
    </ul>
  </nav>
</div>

2 个答案:

答案 0 :(得分:1)

将代码剥离到最低限度,只需要完成定位工作的基本要素,应该看起来像这样:

<div id="container">
    <nav>
        <img id="logo" src="images/logo_tekst.png" />
        <img id="arrow" src="images/remove-arrow-hi.png" />
        <ul id="links">
            <li> <a href="index_pro.html">Pro</a>

            </li>
            <li> <a href="index.html">Recreative</a>

            </li>
        </ul>
    </nav>
</div>

nav {
    position: relative;
}
#logo {
    float: left;
}
#links {
    float: right;
}
#links > li {
    float: left;
    margin-left: 10px;
}
#arrow {
    position: absolute;
    left: 50%;
    width: 40px;
    margin-left: -20px; /* halve the width of the image */
}

我做了什么:

  1. 我修复了您的HTML,img不能是ul的直接孩子,只有li可以。无论如何都不需要任何额外的包装器,所以我只是将它们移除并将id移动到图像上。
  2. 让你的徽标始终在左侧,我只是将它漂浮在左侧
  3. 让你的菜单总是在右边,我只是把它漂浮了。
  4. 以箭头为中心,我更有创意。我把它定位为绝对(注意导航上的相对因此它将作为参考)并将左侧设置为50%。这会导致图像的左边缘位于精确的中心。然后我通过将左边距设置为负值将图像的宽度减半,将该边缘移动到左侧。如果您事先不知道图像的宽度(或者它不是图像,而是某种动态内容),您也可以transform: translate(-50%,0)而不是左边距来获得相同的效果
  5. 可以在此处找到演示:http://jsfiddle.net/73ejv2sg/

答案 1 :(得分:0)

您遇到的问题是您只有float您的徽标。您需要float所有元素并添加paddingwidth才能对齐。同时将高度添加到nav以显示背景。

根据您的评论位置绝对并设置left

#arrow {
  position:absolute;
  left:45%;  
}

这里我只设置了45%,但您可以使用JavaScript轻松抓取屏幕宽度和图像宽度,并每次强制它到中心。

&#13;
&#13;
$(document).ready(function() {
  var imageWidth = $("#arrow").width();
  var pageWidth = $(window).width();

  var left = ((pageWidth/2) - (imageWidth/2));

  $("#arrow").css('left',left);  
});

$(window).resize(function() {
  
  var imageWidth = $("#arrow").width();
  var pageWidth = $(window).width();

  var left = ((pageWidth/2) - (imageWidth/2));

  $("#arrow").css('left',left);  
  
}
&#13;
html {
height: 100%;
margin:0;
padding:0;
}

body {
    height:100%;
    margin:0;
    background-color:#D8D8D8 ;
    color:white;
    border:0;
    padding:0;
    font-family: "Helvetica Neue",Arial, Helvetica, sans-serif;
}

nav {
    background-color: #888888;
    height:55px;
}

#links {
    height:30px;
    padding:10px;
    margin:0;
}

#links li {
    text-align:center;
    margin:0;
    height:30px;
    padding:0;
    padding-left:10px;
    padding-right:10px;
    list-style-type: none;
    display:inline;
}

#container {
    min-width: 624px;
    min-height:100%;
    position:relative;
}

* {
    margin: 0;
    padding: 0;
}

#links {
    overflow: auto;
    list-style-type: none;
    float:right;
}

#links li {
    height: 25px;
    float: right;
    margin-right: 0;
    border-right: 1px solid #aaa;
    padding: 0 20px;
}

#links li:first-child {
    border-right: none;
}

#links li a {
    text-decoration: none;
    color: #ccc;
    font: 25px/1 Helvetica, Verdana, sans-serif;
    text-transform: uppercase;
    transition: all 0.5s ease;
}

#links li a:hover {
    color: #666;
}

#links li.active a {
    font-weight: bold;
    color: #333;
}

#logo img {
    height:50px;
    float:left;
    margin-left:10px;
    cursor:pointer;
}

#arrow {
  position:absolute;  
  left:45%; 
}

#arrow img {
    height:30px;
    margin-top: 10px;
    margin-bottom: 10px;
    cursor:pointer;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
    <nav>
        <ul id="logo">
            <img src="images/logo_tekst.png">
        </ul>
        <ul id="arrow">
            <img src="images/remove-arrow-hi.png">
        </ul>
        <ul id="links">
            <li class="link"><a href="index_pro.html">Pro</a></li>
            <li class="link"><a href="index.html">Recreative</a></li>
        </ul>

    </nav>
</div>
&#13;
&#13;
&#13;