Установите мой логотип слева и меню навигации справа, используя flexbox - PullRequest
0 голосов
/ 04 мая 2018

Я хочу сделать заголовок с моим именем слева и навигатором с "about", "портфелем", "contact" справа, используя flexbox.

Я использую justify-content: flex-end; в своем контейнере для флексбокса, но элементы не выровнены вправо, они остаются слева, и я не знаю почему.

Я могу использовать все виды justify-content, но заголовок остается прежним.

Я хочу знать, как сделать так, чтобы имя «Роджер Андерсон» оставалось слева, а «О, портфолио, контакт» - справа.

/* http://meyerweb.com/eric/tools/css/reset/
       v2.0 | 20110126
       License: none (public domain)
    */

html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}


/* HTML5 display-role reset for older browsers */

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
  display: block;
}

body {
  line-height: 1;
}

ol,
ul {
  list-style: none;
}

blockquote,
q {
  quotes: none;
}

blockquote:before,
blockquote:after,
q:before,
q:after {
  content: '';
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}


/* COMEÇADO O ESTILO */

header {
  display: flex;
  justify-content: flex-end;
  background-color: black;
  height: 50px;
  align-items: center;
  width: 100%;
}

.logo-name,
.nav li {
  font-family: 'Abel', sans-serif;
  color: white;
  font-weight: 400;
  text-transform: uppercase;
  align-self: center;
  padding-left: 5px;
}

.logo {
  height: 25px;
  width: 25px;
}

a {
  text-decoration: none;
}

a:visited {
  color: white;
}

a:link {
  color: white;
}


/*
    ========================================
      Navigation
    ========================================
    */

.nav {
  margin-right: auto;
}

.nav li {
  display: inline-block;
  margin: 0 10px;
}

< !DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>Roger Anderson</title><link rel="stylesheet" href="style.css"><link href="https://fonts.googleapis.com/css?family=Abel" rel="stylesheet"></head><body>< !-- Header --><header class="primary-header"><h5 class="logo-name">Roger Anderson</h5><nav class="nav"><ul><li><a href="about.html">about</a></li>< !-- --><li><a href="portfolio.html">portfolio</a></li>< !-- --><li><a href="contact.html">contact</a></li></ul></nav></header></body></html>My CSS:
/* http://meyerweb.com/eric/tools/css/reset/
       v2.0 | 20110126
       License: none (public domain)
    */

html,
body,
div,
span,
applet,
object,
iframe,
h1,
h2,
h3,
h4,
h5,
h6,
p,
blockquote,
pre,
a,
abbr,
acronym,
address,
big,
cite,
code,
del,
dfn,
em,
img,
ins,
kbd,
q,
s,
samp,
small,
strike,
strong,
sub,
sup,
tt,
var,
b,
u,
i,
center,
dl,
dt,
dd,
ol,
ul,
li,
fieldset,
form,
label,
legend,
table,
caption,
tbody,
tfoot,
thead,
tr,
th,
td,
article,
aside,
canvas,
details,
embed,
figure,
figcaption,
footer,
header,
hgroup,
menu,
nav,
output,
ruby,
section,
summary,
time,
mark,
audio,
video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}


/* HTML5 display-role reset for older browsers */

article,
aside,
details,
figcaption,
figure,
footer,
header,
hgroup,
menu,
nav,
section {
  display: block;
}

body {
  line-height: 1;
}

ol,
ul {
  list-style: none;
}

blockquote,
q {
  quotes: none;
}

blockquote:before,
blockquote:after,
q:before,
q:after {
  content: '';
  content: none;
}

table {
  border-collapse: collapse;
  border-spacing: 0;
}


/* COMEÇADO O ESTILO */

header {
  display: flex;
  justify-content: flex-end;
  background-color: black;
  height: 50px;
  align-items: center;
  width: 100%;
}

.logo-name,
.nav li {
  font-family: 'Abel', sans-serif;
  color: white;
  font-weight: 400;
  text-transform: uppercase;
  align-self: center;
  padding-left: 5px;
}

.logo {
  height: 25px;
  width: 25px;
}

a {
  text-decoration: none;
}

a:visited {
  color: white;
}

a:link {
  color: white;
}


/*
    ========================================
      Navigation
    ========================================
    */

.nav {
  margin-right: auto;
}

.nav li {
  display: inline-block;
  margin: 0 10px;
}
<header class="primary-header">

  <h5 class="logo-name">Roger Anderson</h5>

  <nav class="nav">
    <ul>
      <li><a href="about.html">about</a></li>
      <!--
              -->
      <li><a href="portfolio.html">portfolio</a></li>
      <!--
              -->
      <li><a href="contact.html">contact</a></li>
    </ul>
  </nav>

</header>

Ответы [ 3 ]

0 голосов
/ 04 мая 2018
  1. Justify-content: flex-end; будет выравнивать заголовок и элементы списка справа. Вы хотите использовать justify-content: space -ween; вместо. ( Полное руководство по Flexbox )

  2. Вы можете использовать flexbox, чтобы расположить элементы списка рядом друг с другом. Просто добавьте дисплей: flex; to .nav ul.

  3. Убрать дисплей: встроенный блок; из элементов li и margin-right: авто; от .nav. Лично я предпочитаю решать выравнивание исключительно по свойствам flexbox.

Пример:

header {
  display: flex;   
  justify-content: space-between;
  background-color: black;
  height: 50px;
  align-items: center;
  width: 100%;
}

.nav ul {
  display: flex;
}

Codepen: https://codepen.io/anon/pen/PeKXYw

0 голосов
/ 04 мая 2018

У вас есть это:

.nav {
  margin-right: auto;  
}

Вместо этого используйте это:

.nav {
  margin-left: auto;  
}

html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td,
article, aside, canvas, details, embed,
figure, figcaption, footer, header, hgroup,
menu, nav, output, ruby, section, summary,
time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;
  font-size: 100%;
  font: inherit;
  vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure,
footer, header, hgroup, menu, nav, section {
  display: block;
}
body {
  line-height: 1;
}
ol, ul {
  list-style: none;
}
blockquote, q {
  quotes: none;
}
blockquote:before, blockquote:after,
q:before, q:after {
  content: '';
  content: none;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}



/* COMEÇADO O ESTILO */

header {
display:flex;   
justify-content: flex-end;
background-color: black;
height: 50px;
align-items:center;
width:100%;


}

.logo-name, .nav li {
font-family: 'Abel', sans-serif;
color: white;
font-weight: 400;    
text-transform: uppercase; 
align-self: center;
padding-left: 5px;    
}

.logo {
height: 25px;  
width: 25px;
}

a{text-decoration: none; }
a:visited {color: white;}
a:link {color: white;}

/*
========================================
  Navigation
========================================
*/

.nav {
 /* margin-right: auto;   */
 margin-left: auto; /* NEW */
}


.nav li {
  display: inline-block;
  margin: 0 10px;

}
<header class="primary-header">
  <h5 class="logo-name">Roger Anderson</h5>
  <nav class="nav">
    <ul>
      <li><a href="about.html">about</a></li>
      <li><a href="portfolio.html">portfolio</a></li>
      <li><a href="contact.html">contact</a></li>
    </ul>
  </nav>
</header>

Flex auto поля занимают все свободное пространство в направлении поля.

Таким образом, когда вы устанавливаете margin-right: auto в меню навигации, оно занимает все свободное пространство справа, закрепляя меню слева.

Но если вы используете margin-left: auto, это займет все свободное место слева, отодвинув меню от логотипа и закрепив его вправо.

Вот более полное объяснение:


Есть две причины, по которым justify-content не работал:

  1. Flex auto поля имеют приоритет над свойствами выравнивания ключевых слов (например, justify-content и align-items). Если установлено поле auto, это делает первый выстрел и занимает все свободное место на линии. justify-content идет вторым, но свободного места не осталось, поэтому он ничего не может сделать.

    8,1. Выравнивание с auto поля

    До выравнивания через justify-content и align-self, любой положительное свободное пространство распределяется на auto поля в этом измерение.

    Если свободное пространство распределяется по полям auto, выравнивание свойства не будут иметь никакого эффекта в этом измерении, потому что поля украдет все свободное пространство, оставшееся после сгибания.

  2. Даже если не было поля auto и justify-content работало, оно не сработало бы, как вы ожидаете, потому что у вас установлено значение flex-end. Это прикалывает все элементы справа. Вам нужно будет использовать space-between или space-around.

0 голосов
/ 04 мая 2018
     .primary-header {
        display: flex;
        flex-direction: row;
        justify-content: space-between;
      }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...