J'essaie de positionner une fine ligne grise entre les éléments
sur une barre de navigation horizontale pour fournir une perception de connexion entre les éléments. Le code serait celui ci-dessous. Comment puis-je ajouter une ligne simple entre ces éléments?
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>
ul { display: flex; align-items: stretch; /* Default */ justify-content: space-between; width: 100%; margin: 0; padding: 0; } li { display: block; flex: 0 1 auto; /* Default */ list-style-type: none; }
4 Réponses :
Voici un exemple de ligne entre chacun des li
s.
position: relative
à l'élément ul
pour qu'il devienne parent de l'élément : after
: après
au milieu vertical des caractères par translation verticale z-index
et background-color
aux li
s afin qu'ils restent "au-dessus" de la ligne grise li >
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>
ul { display: flex; align-items: stretch; /* Default */ justify-content: space-between; width: 100%; margin: 0; padding: 0; position: relative; } li { display: block; flex: 0 1 auto; /* Default */ list-style-type: none; background-color: white; padding: 0 0.75em; z-index: 1; } li:first-child { padding-left: 0; } li:last-child { padding-right: 0; } ul:after { content: ''; border-bottom: 1px solid lightgray; position: absolute; transform: translateY(-50%); top: 50%; width: 100%; }
Merci Andy, c'est exactement ce que j'ai pensé.
Si cela ne vous dérange pas de centrer le texte sur la barre de navigation, cette solution devrait fonctionner pour vous.
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>
ul { display: flex; align-items: stretch; /* Default */ justify-content: space-between; width: 100%; margin: 0; padding: 0; } li { display: block; flex: 0 1 auto; /* Default */ list-style-type: none; flex:1; text-align:center; border-right:1px solid gray; } li:last-of-type{ border-right:none; }
Merci, jleggio. En fait, ce serait une ligne horizontale pour fournir la perception de la connexion comme Andy Hoffman l'a écrit ci-dessus
Je ne comprends pas vraiment la chose «entre» mais vous pouvez ajouter un:
li { border-left: 1px solid gray; border-right: 1px solid gray;
Comme je l'ai dit, je ne sais pas si c'est ce que vous voulez dire. :)
Vous pouvez également faire une simple coloration d'arrière-plan:
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>
ul { display: flex; justify-content: space-between; margin: 0; padding: 0; background: linear-gradient(blue,blue) left 50px top 50%, linear-gradient(blue,blue) right 50px top 50%, linear-gradient(blue,blue) center; background-size:calc((100% - 4*50px)/3) 1px; background-repeat:no-repeat; } li { list-style-type: none; width: 50px; font-size:25px; text-align:center; } body { background:pink; }
Et voici un moyen pour avoir de la transparence:
<ul> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul>
ul { display: flex; justify-content: space-between; margin: 0; padding: 0; background:linear-gradient(#ccc,#ccc) center/100% 1px no-repeat; } li { list-style-type: none; background-color: white; padding: 20px; font-size:25px; } li:first-child { padding-left: 0; } li:last-child { padding-right: 0; }
Lorsque vous dites «entre», voulez-vous dire que la ligne doit passer par le milieu des caractères eux-mêmes?
Je voulais dire non pas à travers les éléments, mais côte à côte horizontalement entre les éléments