html - 如何在不使用边距或文本对齐的情况下将元素居中对齐

标签 html css

我有 ( jsfiddle ):

<body>
<div id="navbar">
    <ul class="nav">
        <li class="nav_left"><a class="nav" href="#">Home</a></li>
        <li class="nav_left"><a class="nav" href="#">Support</a></li>
        <li class="nav">
            <form class="nav" method="post" action="action.php?do=search">
                <input class="search_bar" type="text" name="search_input" />
            </form>
        </li>
        <li class="nav_right"><a class="nav" href="#">Login</a></li>
        <li class="nav_right"><a class="nav" href="#">Register</a></li>
    </ul>
</div>
</body>

我有:

html, body {height:100%;margin:0;padding:0;font-size:12px;}
body {background:#F1F1F1;}

#navbar {
    width:100%;
    padding:5px 0;
    overflow:auto;
    background:#34495e;
    border-bottom:solid 1px #222;
    text-align:center;
}
    ul.nav {
        margin:0;
        padding:0;
        list-style-type:none;
    }
    li.nav_left, li.nav_right, li.nav {padding:0 5px;}
    li.nav_left {float:left;}
    li.nav_right {float:right;}
    li.nav {}

我希望能够在不使用 text-align 或 margin 的情况下将 li.nav 对齐到中心,因为我同时拥有 float:leftfloat :right 正在使用,所以 float:right 如果被使用,将被推出。

希望能帮到你,谢谢。

最佳答案

使用绝对定位:

html, body {height:100%;margin:0;padding:0;font-size:12px;}
body {background:#F1F1F1;}

#navbar {
  position:relative;
  width:100%;
  height:50px;    
  padding:5px 0;
  overflow:auto;
  background:#34495e;
  border-bottom:solid 1px #222;
}

ul.nav {padding:0;list-style-type:none;}
li.nav_left, li.nav_right {padding:0 5px;}
li.nav_left {float:left;}
li.nav_right {float:right;}
li.nav {
  background-color:green;
  width:200px;
  height:30px;
  position:absolute;    
  margin:-15px 0 0 -100px;
  top:50%;
  left:50%;
  text-align:center;
}

您需要重新安排您的 html 代码:

<body>
<div id="navbar">
    <ul class="nav">
        <li class="nav_left"><a class="nav" href="#">Home</a></li>
        <li class="nav_left"><a class="nav" href="#">Support</a></li>
        <li class="nav_right"><a class="nav" href="#">Login</a></li>
        <li class="nav_right"><a class="nav" href="#">Register</a></li>
        <li class="nav">
            <form class="nav" method="post" action="action.php?do=search">
                <input class="search_bar" type="text" name="search_input" />
            </form>
        </li>
    </ul>
</div>
</body>

上面的代码将 li.nav 的左侧定位在#navbar 的中间。通过使用 li.nav 宽度的一半作为负边距,整个元素定位在精确的中心。

只是一个简单的例子,它是如何工作的。您还可以围绕 nav_left 和 nav_right 创建容器元素,并在那里使用 position:absolute 。在容器元素内,您可以为 nav_left 和 nav_right 元素使用 float 。

http://jsfiddle.net/jCCL7/5/

关于html - 如何在不使用边距或文本对齐的情况下将元素居中对齐,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21649213/

相关文章:

asp.net - 雪碧图像CSS

jquery - 我在切换类中做的越来越少,当我单击但向下箭头和向上箭头没有出现时,文本正在更改(更多选项变为更少)

ios - Web View 中的 Html5 播放器在 iOS 10 中的 native 播放器中打开视频

html - 使用内联 block 并向节点添加填充的正确输出是什么?

php - 单击复选框时会出现一个文本框,适用于 jsfiddle,但不适用于我的浏览器

javascript - 我创建了一个 jQuery 幻灯片,但它不断重复相同的图像

css - 为什么显示内联 block 匹配文本高度?

jquery - 在 twitter bootstrap 中制作两个下拉菜单

Javascript 图像 slider 将文本发送到屏幕外并调出页脚

javascript - 在可滚动 div 的可见区域中查找所有输入元素