gpt4 book ai didi

html - 证明内容 : space-between failing to align elements as expected

转载 作者:技术小花猫 更新时间:2023-10-29 12:10:12 26 4
gpt4 key购买 nike

我需要使用 flexbox 来居中导航,因此我想到了以下内容:

.navbar-brand > img {
width: 100px;
}
.navbar-default {
background-color: #fff;
border-color: #fff;
-webkit-box-shadow: 0 0 3px rgba(0, 0, 0, .3);
box-shadow: 0 0 3px rgba(0, 0, 0, .3);
}
.navbar-default .navbar-nav > li > a {
color: #464646;
text-transform: uppercase;
}
.navbar-default .navbar-nav > li > a:hover,
.navbar-default .navbar-nav > li > a:focus,
.navbar-default .navbar-nav > li > a:active {
color: #727272;
}
.navbar-default .navbar-nav > li:not(.active) > a:before {
content: '';
position: absolute;
bottom: 0;
left: 30%;
right: 30%;
height: 1px;
background: #ed1c24;
opacity: 0;
-webkit-transform: translateY(10px);
-ms-transform: translateY(10px);
-o-transform: translateY(10px);
transform: translateY(10px);
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
.navbar-default .navbar-nav > li > a:hover:before {
opacity: 1;
-webkit-transform: none;
-ms-transform: none;
-o-transform: none;
transform: none;
}
.navbar-default .navbar-nav > li:first-child > a {
font-weight: 700;
}
.navbar-default .navbar-nav > li.active > a {
background: #ed1c24;
color: #fff;
padding-top: 25px;
padding-bottom: 25px;
position: relative;
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
.navbar-default .navbar-nav > li.active > a:hover,
.navbar-default .navbar-nav > li.active > a:focus,
.navbar-default .navbar-nav > li.active > a:active {
background: #e0222a;
color: #fff;
}
.navbar-default .navbar-nav > li.active:hover > a:after {
bottom: 0;
}
.navbar-default .navbar-nav > li.active > a:after {
font-family: FontAwesome;
content: '\f078';
position: absolute;
bottom: 5px;
font-size: 0.6em;
/*opacity: 0.8;*/
left: 50%;
-webkit-transform: translateX(-50%);
-ms-transform: translateX(-50%);
-o-transform: translateX(-50%);
transform: translateX(-50%);
-webkit-transition: all .3s;
-o-transition: all .3s;
transition: all .3s;
}
/* use flexbox to center align nav elements above 992px */

@media (max-width: 992px) {
.navbar-default .navbar-nav > li > a {
text-align: center;
}
.navbar-collapse {
max-height: 350px;
overflow-y: hidden;
}
}
@media (min-width: 992px) {
.navbar-default {
display: flex;
align-items: center;
justify-content: space-between;
}
.navbar-default {
min-height: 100px;
}
.navbar-default .navbar-right {
display: flex;
align-items: center;
}
.navbar-default > .container {
display: flex;
align-items: center;
justify-content: space-between;
}
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet" />
<nav role="navigation" class="navbar navbar-default navbar-fixed-top">
<div class="container">
<!-- Brand and toggle get grouped for better mobile display -->
<div class="navbar-header">
<button type="button" data-target="#navbarCollapse" data-toggle="collapse" class="navbar-toggle">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a href="index.html" class="navbar-brand">
<img src="https://upload.wikimedia.org/wikipedia/commons/4/48/EBay_logo.png" alt="Logo">
</a>
</div>
<!-- Collection of nav links and other content for toggling -->
<div id="navbarCollapse" class="collapse navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li class="active"><a href="index.html">Home</a>
</li>
<li><a href="consulting.html">CONSULTING</a>
</li>
<li><a href="devices.html">Medical Devices</a>
</li>
<li><a href="">Servises</a>
</li>
<li><a href="">News</a>
</li>
<li><a href="">Contact Us</a>
</li>
</ul>
</div>
</div>
</nav>

FIDDLE HERE

正如您从 HTML 中看到的那样,.container 有两个子元素。

我将以下 CSS 应用于 .container 元素:

.navbar-default > .container{
display: flex;
align-items:center;
justify-content:space-between;
}

问题是 space-between 不会使容器的两个子元素位于容器的左右边缘。

我想要的行为是两个子元素应该在左右边缘,这可以使用 float 来实现,即,我将一个子元素向左浮动,一个向右浮动。

此外,如果您应用 flex-startflex-end,元素将被拉到边缘,但是使用 flex-startflex-end,两个元素都会被拉到一边。因此我需要使用 space-between

有人能告诉我为什么 space-between 不起作用吗?这个错误在我的整个网站上造成了巨大的对齐问题,请有人告诉我我做错了什么。

最佳答案

问题是与 Bootstrap 样式表发生冲突,它将伪元素放置在您的 flex 容器中。这会导致 space-between 计算多个 flex 元素而不是两个。

这是您的 flex 容器:

Logo 和导航菜单与 justify-content: space-between 对齐,但不位于相对的边缘。对齐方式看起来更像是 space-around

enter image description here


这是 Bootstrap 的 ::before::after 伪元素(或伪 flex 项):

Firefox documentation 中所述:

In-flow ::after and ::before pseudo-elements are flex items.

enter image description here


让我们把一些内容放在伪类中:

就像在汽车旅馆房间里发出黑光一样,您会看到很多您不希望出现的东西。

enter image description here


删除(或覆盖)伪元素,您的问题就消失了:

enter image description here


关于 flex 容器和伪元素的更多细节:

关于html - 证明内容 : space-between failing to align elements as expected,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35719124/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com