2
votes

Le rendu de la boîte flexible comme une colonne alors qu'il devrait s'agir d'une ligne

Je mets en place ce qui devrait être une simple barre de navigation et un style avec une boîte flexible. Pour une raison quelconque, au lieu de s'afficher sous forme de ligne (horizontale), elle s'affiche sous forme de colonne (verticale).

Je peux rendre les liens horizontaux en utilisant float: left, mais ils ne s'étirent pas uniformément pour remplir le barre de navigation.

Je crois comprendre que flex-grow: 1 devrait faire en sorte que chaque élément occupe une quantité égale d'espace . Mais cela ne se produit pas.


Il y a quatre déclarations qui ne fonctionnent pas comme prévu:

flex-direction Les liens dans la barre de navigation est dans une colonne au lieu d'une ligne

padding Bien que le padding de la barre de navigation soit mis à zéro, il semble toujours avoir un padding

text-align Le texte de chaque

  • n'est pas centré horizontalement

    flex-grow Les liens ne sont pas espacés uniformément


    Je ne sais pas s'ils proviennent tous de à un problème, ou chaque problème distinct.

    Voici un extrait de code simplifié:

    <!doctype html>
    <html lang="en">
    
    <head>
    <meta charset="utf-8">
    <title>Curse of the Nav Bar</title>
    <style>
    nav {
    	display: flex;
    	flex-direction: row; /* not working */
    	background-color: #d2d6d6;
    	padding: 0; /* not working */
    }
    nav a {
    	display: flex;
    	text-decoration: none;
    	list-style: none;
    	border: 2px solid #727171;
    	color: #727171;
    	background-color: #c4c4c4;
    	padding: 4px;
    	margin: 2px;
    	text-align: center; /* not working */
    	flex-grow: 1; /* not working */
    }
    nav a:hover,
    nav a:active {
    	background-color: #aaa;
    }
    </style>
    </head>
    
    <body>
    <nav>
    	<ul>
    		<a href="#"><li>Once</li></a>
    		<a href="#"><li>Upon</li></a>
    		<a href="#"><li>A Time</li></a>
    		<a href="#"><li>There</li></a>
    		<a href="#"><li>Was</li></a>
    		<a href="#"><li>A Problematic</li></a>
    		<a href="#"><li>Nav Bar</li></a>
    	</ul>
    </nav>
    </body>
    </html>

    J'ai utilisé la boîte flexible de nombreuses fois auparavant, mais je ne l'ai jamais vue se comporter comme ça.


    0 commentaires

    5 Réponses :


    0
    votes

    Vous pouvez également essayer de donner display: flex à nav ul.

    nav ul {
        display: flex;
    }
    

    Maintenant, les éléments apparaissent dans une ligne au lieu d'une colonne. Par défaut, ul est un élément de bloc, donc l'affichage sera bloqué pour ul.


    0 commentaires

    2
    votes
    1. utilisez le flex sur ul et non sur nav (vous devez définir flex sur le DOM wrap de vous éléments que vous voulez qu'ils flex )
    2. Je pense qu'il vaut mieux utiliser ul et immédiatement li pas a ( ul li a ) li >

      <nav>
        <ul>
          <li>
            <a href="#">Once</a>
          </li>
                 <li>
            <a href="#">Once</a>
          </li>
          <li>
            <a href="#">Once</a>
          </li>
          <li>
            <a href="#">Once</a>
          </li>
          <li>
            <a href="#">Once</a>
          </li>
        </ul>
      </nav>
      ul {
        display: flex;
        flex-direction: row;
        background-color: #d2d6d6;
        padding: 0;
      }
      
      nav li {
        display: flex;
        text-decoration: none;
        list-style: none;
        border: 2px solid #727171;
        color: #727171;
        background-color: #c4c4c4;
        padding: 4px;
        margin: 2px;
        text-align: center;
        flex-grow: 1;
      }
      
      nav a:hover,
      nav a:active {
        background-color: #aaa;
      }

    1 commentaires

    dites-moi pour plus d'aide



    2
    votes

    Il y a une petite erreur dans votre code, voici la correction, Vous avez donné toutes les propriétés à Nav, alors que vous devez les attribuer à UL,

    1. Il n'est pas nécessaire de donner flex-direction: row car il s'agit de la propriété par défaut.
    2. Le remplissage fonctionne également maintenant, veuillez vérifier.

    <nav>
    	<ul>
    		<li><a href="#">Once</a></li>
    		<li><a href="#">Upon</a></li>
    		<li><a href="#">A Time</a></li>
    		<li><a href="#">There</a></li>
    		<li><a href="#">Was</a></li>
    		<li><a href="#">A Problematic</a></li>
    		<li><a href="#">Nav Bar</a></li>
    	</ul>
    </nav>
    nav ul {
    	display: flex;
            text-decoration: none;
    	flex-direction: row; /* not working */
    	background-color: #d2d6d6;
    	padding: 0; /* not working */
    }
    nav li {
    	display: flex;
    	text-decoration: none;
    	list-style: none;
    	border: 2px solid #727171;
    	color: #727171;
    	background-color: #c4c4c4;
    	padding: 4px;
    	margin: 2px;
    	justify-content: center;
    	flex-grow: 1;
    }
    nav a:hover,
    nav a:active {
    	background-color: #aaa;
    }


    5 commentaires

    et encore une chose, Li doit être l'enfant direct d'UL pas d'ancrage.


    Merci. C'était la réponse la plus clairement expliquée et m'a aidé à comprendre la source du problème principal. Vous avez également abordé les problèmes de remplissage et de centrage du texte, j'accepte donc la vôtre comme la meilleure réponse. (Merci à tous ceux qui ont répondu!)


    J'ai modifié l'extrait pour que le style hover et text-decoration: none soient maintenant correctement ciblés également.


    (Si vous vous posez la question, cette modification est actuellement en attente d'examen. Supprimera ce commentaire une fois qu'il aura été examiné et sera visible par tous.)


    Quelque chose que je devais rechercher (et je publierai ici au cas où d'autres le trouveraient utile), c'est comment rendre les éléments

  • cliquables, depuis leur emballage dans provoque la rupture de la mise en page. Ajoutez simplement un événement onclick . stackoverflow.com/a/16582588/2454914 Ceci combiné avec le style du survol sur le
  • (pas le ) et l'ajout de cursor: pointer au
  • le fait se comporter comme si c'était une ancre.



  • 0
    votes

    Dans nav a {...} remplacez display: flex; out of display: inline-flex;

    Voici le effet:

    <!doctype html>
    <html lang="en">
    
    <head>
    <meta charset="utf-8">
    <title>Curse of the Nav Bar</title>
    <style>
    nav {
    	display: flex;
    	flex-direction: row; /* not working */
    	background-color: #d2d6d6;
    	padding: 0; /* not working */
    }
    nav a {
    	display: inline-flex;
    	text-decoration: none;
    	list-style: none;
    	border: 2px solid #727171;
    	color: #727171;
    	background-color: #c4c4c4;
    	padding: 4px;
    	margin: 2px;
    	text-align: center; /* not working */
    	flex-grow: 1; /* not working */
    }
    nav a:hover,
    nav a:active {
    	background-color: #aaa;
    }
    </style>
    </head>
    
    <body>
    <nav>
    	<ul>
    		<a href="#"><li>Once</li></a>
    		<a href="#"><li>Upon</li></a>
    		<a href="#"><li>A Time</li></a>
    		<a href="#"><li>There</li></a>
    		<a href="#"><li>Was</li></a>
    		<a href="#"><li>A Problematic</li></a>
    		<a href="#"><li>Nav Bar</li></a>
    	</ul>
    </nav>
    </body>
    </html>


    0 commentaires

    0
    votes

    Vous apportez un simple changement de la

    <!doctype html>
    <html lang="en">
    
    <head>
    <meta charset="utf-8">
    <title>Curse of the Nav Bar</title>
    <style>
    nav ul {
    	display: flex;
    	flex-direction: row; /* not working */
    	background-color: #d2d6d6;
    	padding: 0; /* not working */
    }
    nav a {
    	display: flex;
    	text-decoration: none;
    	list-style: none;
    	border: 2px solid #727171;
    	color: #727171;
    	background-color: #c4c4c4;
    	padding: 4px;
    	margin: 2px;
    	text-align: center; /* not working */
    	flex-grow: 1; /* not working */
    }
    nav a:hover,
    nav a:active {
    	background-color: #aaa;
    }
    </style>
    </head>
    
    <body>
    <nav>
    	<ul>
    		<a href="#"><li>Once</li></a>
    		<a href="#"><li>Upon</li></a>
    		<a href="#"><li>A Time</li></a>
    		<a href="#"><li>There</li></a>
    		<a href="#"><li>Was</li></a>
    		<a href="#"><li>A Problematic</li></a>
    		<a href="#"><li>Nav Bar</li></a>
    	</ul>
    </nav>
    </body>
    </html>

    nav ul {
       display: flex;
       flex-direction: row; /* not working */
       background-color: #d2d6d6;
       padding: 0; /* not working */
    }
    


    0 commentaires