Я хотел бы удалить один элемент в flexbox с помощью display:none, и я хотел бы установить выравнивание по правому краю (с помощью margin-right: auto) для элемента класса logo из класса nav. Но если я использую display:none, то margin-right: auto не работает. Что случилось? Может быть, другое решение вместо display:none?
* {
margin: 0;
padding: 0;
}
body {
background: white;
}
/*
---------------------------
----------Flexbox----------
---------------------------
*/
.container {
border: 1px solid red;
}
.header {
display: flex;
flex-direction: row;
height: 80px;
}
.menubtn {
align-self: center;
margin-left: 20px;
font-size: 20px;
margin-right: auto;
}
.logo {
align-self: center;
margin-right: 40px;
}
.nav {
background: #000;
color: #FFF;
position: fixed;
top: 0;
left: 0;
height: 100%;
width: 0%;
opacity: 0;
text-align: center;
overflow-x: hidden;
list-style: none;
transition: .5s;
border: 1px solid blue;
}
.closebtn {
text-align: left;
margin-left: 30px;
margin-top: 30px;
}
.nav-item {
font-size: 1.8em;
}
.nav-item:nth-child(1n+2) {
margin-top: 3em;
}
/*
---------------------------
--------Responsive---------
---------------------------
*/
@media (min-width: 640px) {
.closebtn {
display: none;
}
.menubtn {
display: none;
}
.nav {
transition: 0;
background: none;
color: #000;
display: flex;
flex-direction: row;
align-items: center;
position: static;
opacity: 1;
font-size: 0.8em;
width: auto;
margin-right: auto;
}
.nav-item:nth-child(1n+2) {
margin-left: 10px;
}
.nav-item:nth-child(1n+2) {
margin-top: 0;
}
}<!DOCTYPE html>
<html>
<head>
<meta charset = "utf-8">
<meta http-equiv = "X-UA-Compatible" content = "IE=edge">
<title>Mineral Fever</title>
<meta name = "viewport" content = "width=device-width, initial-scale=1">
<link rel = "stylesheet" href = "main.css">
</head>
<body>
<div class = "container">
<header>
<div class = "header">
<p class = "menubtn" onclick = "openNav()">☰</p>
<nav>
<ul id = "nav" class = "nav">
<li class = "nav-item closebtn" onclick = "closeNav()">×</li>
<li class = "nav-item">Termékek</li>
<li class = "nav-item">Kapcsolat</li>
<li class = "nav-item">Szállítás</li>
</ul>
</nav>
<h1 class = "logo">Mineral Fever</h1>
</div>
</header>
</div>
</body>
<script src = "main.js"></script>
</html>





Поскольку вы уже используете display: flex; на .header, может быть, это так же просто, как использовать justify-content и там…
.header {
display: flex;
flex-direction: row;
height: 80px;
justify-content: space-between;
}
* {
margin: 0;
padding: 0;
}
body {
background: white;
}
/*
---------------------------
----------Flexbox----------
---------------------------
*/
.container {
border: 1px solid red;
}
.header {
display: flex;
flex-direction: row;
height: 80px;
justify-content: space-between;
}
.menubtn {
align-self: center;
margin-left: 20px;
font-size: 20px;
margin-right: auto;
}
.logo {
align-self: center;
margin-right: 40px;
}
.nav {
background: #000;
color: #FFF;
position: fixed;
top: 0;
left: 0;
height: 100%;
width: 0%;
opacity: 0;
text-align: center;
overflow-x: hidden;
list-style: none;
transition: .5s;
border: 1px solid blue;
}
.closebtn {
text-align: left;
margin-left: 30px;
margin-top: 30px;
}
.nav-item {
font-size: 1.8em;
}
.nav-item:nth-child(1n+2) {
margin-top: 3em;
}
/*
---------------------------
--------Responsive---------
---------------------------
*/
@media (min-width: 640px) {
.closebtn {
display: none;
}
.menubtn {
display: none;
}
.nav {
transition: 0;
background: none;
color: #000;
display: flex;
flex-direction: row;
align-items: center;
position: static;
opacity: 1;
font-size: 0.8em;
width: auto;
margin-right: auto;
}
.nav-item:nth-child(1n+2) {
margin-left: 10px;
}
.nav-item:nth-child(1n+2) {
margin-top: 0;
}
}<div class = "container">
<header>
<div class = "header">
<p class = "menubtn" onclick = "openNav()">☰</p>
<nav>
<ul id = "nav" class = "nav">
<li class = "nav-item closebtn" onclick = "closeNav()">×</li>
<li class = "nav-item">Termékek</li>
<li class = "nav-item">Kapcsolat</li>
<li class = "nav-item">Szállítás</li>
</ul>
</nav>
<h1 class = "logo">Mineral Fever</h1>
</div>
</header>
</div>Вы можете просто добавить margin-right: auto к элементу nav — см. демонстрацию ниже:
* {
margin: 0;
padding: 0;
}
body {
background: white;
}
/*
---------------------------
----------Flexbox----------
---------------------------
*/
.container {
border: 1px solid red;
}
.header {
display: flex;
flex-direction: row;
height: 80px;
}
.menubtn {
align-self: center;
margin-left: 20px;
font-size: 20px;
margin-right: auto;
}
.logo {
align-self: center;
margin-right: 40px;
}
nav {
margin-right: auto; /* added */
}
.nav {
background: #000;
color: #FFF;
position: fixed;
top: 0;
left: 0;
height: 100%;
width: 0%;
opacity: 0;
text-align: center;
overflow-x: hidden;
list-style: none;
transition: .5s;
border: 1px solid blue;
}
.closebtn {
text-align: left;
margin-left: 30px;
margin-top: 30px;
}
.nav-item {
font-size: 1.8em;
}
.nav-item:nth-child(1n+2) {
margin-top: 3em;
}
/*
---------------------------
--------Responsive---------
---------------------------
*/
@media (min-width: 640px) {
.closebtn {
display: none;
}
.menubtn {
display: none;
}
.nav {
transition: 0;
background: none;
color: #000;
display: flex;
flex-direction: row;
align-items: center;
position: static;
opacity: 1;
font-size: 0.8em;
width: auto;
margin-right: auto;
}
.nav-item:nth-child(1n+2) {
margin-left: 10px;
}
.nav-item:nth-child(1n+2) {
margin-top: 0;
}
}<div class = "container">
<header>
<div class = "header">
<p class = "menubtn" onclick = "openNav()">☰</p>
<nav>
<ul id = "nav" class = "nav">
<li class = "nav-item closebtn" onclick = "closeNav()">×</li>
<li class = "nav-item">Termékek</li>
<li class = "nav-item">Kapcsolat</li>
<li class = "nav-item">Szállítás</li>
</ul>
</nav>
<h1 class = "logo">Mineral Fever</h1>
</div>
</header>
</div>У вас, кажется, это задом наперёд. Если вы хотите сдвинуть элемент вправо, установите для него автоматическое левое поле (и наоборот). Это может помочь вам думать об этом следующим образом: поля (за исключением отрицательных) отталкиваются от чего-то. В этом случае вы хотите отодвинуть элемент от левого края его родителя. Автоматические поля увеличиваются по мере необходимости, чтобы занять все доступное пространство (если ширина не вычисляется как «авто»).
Или, как предлагает kukkuz, вместо этого вы можете поставить автоматическое правое поле на элемент <nav>.
Спасибо за помощь, теперь понял.