J'essaie de créer une règle horizontale avec du texte au milieu. Par exemple :
----------------------------------- mon titre ici -----------------------------
Existe-t-il un moyen de faire cela en CSS ? Sans tous les tirets "-", évidemment.
J'essaie de créer une règle horizontale avec du texte au milieu. Par exemple :
----------------------------------- mon titre ici -----------------------------
Existe-t-il un moyen de faire cela en CSS ? Sans tous les tirets "-", évidemment.
Voici en gros comment je procéderais : la ligne est créée en définissant un paramètre border-bottom
sur le contenant h2
puis en donnant le h2
un plus petit line-height
. Le texte est ensuite placé dans un span
avec un arrière-plan non-transparent.
h2 {
width: 100%;
text-align: center;
border-bottom: 1px solid #000;
line-height: 0.1em;
margin: 10px 0 20px;
}
h2 span {
background:#fff;
padding:0 10px;
}
<h2><span>THIS IS A TEST</span></h2>
<p>this is some content other</p>
J'ai testé dans Chrome uniquement, mais il n'y a aucune raison pour que cela ne fonctionne pas dans d'autres navigateurs.
JSFiddle : http://jsfiddle.net/7jGHS/
C'est ma solution préférée. Elle fonctionne également sous OSX, alors que certaines autres solutions ne fonctionnent pas. Si vous utilisez cette solution, n'oubliez pas de définir l'arrière-plan du span à la même couleur que l'arrière-plan de votre page, ce que je veux dire sera particulièrement évident si votre arrière-plan n'est pas blanc. ;)
@TroyCosentino oui, il suffit d'envelopper le h2/content dans un div qui fait un quart de la largeur.
Après avoir essayé différentes solutions, j'en ai trouvé une valable pour différentes largeurs de texte, n'importe quel arrière-plan possible et sans ajouter de balises supplémentaires.
h1 {
overflow: hidden;
text-align: center;
}
h1:before,
h1:after {
background-color: #000;
content: "";
display: inline-block;
height: 1px;
position: relative;
vertical-align: middle;
width: 50%;
}
h1:before {
right: 0.5em;
margin-left: -50%;
}
h1:after {
left: 0.5em;
margin-right: -50%;
}
<h1>Heading</h1>
<h1>This is a longer heading</h1>
Je l'ai testé dans IE8, IE9, Firefox et Chrome. Vous pouvez le vérifier ici http://jsfiddle.net/Puigcerber/vLwDf/1/
J'aime bien celui-là aussi. Pour obtenir un style où le texte est indenté de la gauche au lieu d'être centré, utilisez ce changement : h1 {
overflow : hidden ; ` text-align : left ; ` text-indent : 40px ; `}
C'est vraiment une bonne solution, d'autant plus qu'elle fonctionne avec n'importe quel arrière-plan et qu'elle ne nécessite pas une largeur définie pour l'élément d'en-tête.
C'est génial. J'ai adapté un peu votre code pour aligner le texte à gauche et faire en sorte que l'élément :after
élément la largeur du bloc. Je suis curieux : quel est le rôle exact de l'élément margin-right: -50%
? Lorsque je tâtonnais avec le code, l'absence de cette propriété entraînait la rupture de la décoration sur une autre ligne. Et même lorsque :after
est affecté d'une largeur de 100 %, j'ai encore besoin de la marge droite négative de 50 % pour qu'il s'adapte. Pourquoi ?
Ok, celui-ci est plus compliqué mais il fonctionne dans tout sauf IE<8
<div><span>text TEXT</span></div>
div {
text-align: center;
position: relative;
}
span {
display: inline-block;
}
span:before,
span:after {
border-top: 1px solid black;
display: block;
height: 1px;
content: " ";
width: 40%;
position: absolute;
left: 0;
top: 1.2em;
}
span:after {
right: 0;
left: auto;
}
Les éléments :before et :after sont positionnés de manière absolue, de sorte que nous pouvons en tirer un vers la gauche et un vers la droite. De plus, la largeur (40% dans ce cas) dépend beaucoup de la largeur du texte à l'intérieur je dois réfléchir à une solution pour cela. En tout cas, la top: 1.2em
fait en sorte que les lignes restent plus ou moins au centre du texte, même si la taille de la police est différente.
Mais il semble bien fonctionner : http://jsfiddle.net/tUGrf/3/
C'est intelligent, mais j'espère que l'OP ne veut pas de ça pour l'intérieur d'une maison. form
étiquette. S'il le fait, comme vous le savez sûrement, il pourrait simplement utiliser fieldset
y legend
.
Heh, tu as raison sur ce point. Ce n'est pas sémantiquement correct, mais c'est mieux que d'avoir recours à javascript pour quelque chose comme ça, je pense.
La meilleure solution que j'ai trouvée et qui fonctionne bien lorsque l'écran est fermé et sans définir la couleur de fond du texte est la suivante jsfiddle.net/vLwDf/268
<div><span>text TEXT</span></div>
div {
height: 1px;
border-top: 1px solid black;
text-align: center;
position: relative;
}
span {
position: relative;
top: -.7em;
background: white;
display: inline-block;
}
Donnez un padding à l'espacement pour créer plus d'espace entre le texte et la ligne.
Exemple : http://jsfiddle.net/tUGrf/
Joli, le seul problème est que vous devez définir le fond en blanc et ne pouvez pas le définir en transparent.
Dans ce cas, vous devrez travailler avec deux lignes, une de chaque côté. Cela va être difficile à réaliser de manière propre
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
0 votes
Est-ce pour l'intérieur d'un
form
tag ?0 votes
Dans ce cas, comme l'a fait remarquer thirtydot en réponse à ma réponse, vous pouvez vous renseigner sur l'initiative de l'Union européenne en faveur de l'environnement.
fieldset
ylegend
éléments0 votes
stackoverflow.com/a/25691518/379855
1 votes
Pour une solution sur un fond transparent voir Ligne avant et après le texte centré sur un fond transparent
0 votes
Voir stackoverflow.com/a/26634224/465233
0 votes
@G-Cyrillus Il s'agit d'un canonical clairement établi avec beaucoup plus de visibilité/SEO et de meilleures réponses (y compris une solution flexbox) que celui auquel vous avez fait référence. Il semble presque que la raison principale de l'action était de mettre en évidence votre propre réponse, ce qui serait un abus du privilège dupehammer IMHO.
0 votes
@tyler, mais obsolète pour les bords. ce que vous aimez ou n'aimez pas ;) J'ai réagi après un upvote et j'ai été surpris de ce duplicte. Mais vous pouvez en sélectionner d'autres.
0 votes
@G-Cyrillus Je voulais dire que vous avez votre propre solution ici en plus des autres solutions flex :-)
0 votes
@TylerH pas de problème, pour moi jouer avec des astuces alors que flex est maintenant bien implémenté partout n'est plus utile pour les débutants qui tombent ici ;) ils sont assez confus. il doit y avoir de meilleurs duplicatas je crois.
0 votes
Si vous venez du "futur" et recherchez une solution basée sur le "flex", reportez-vous à la réponse de @Wellspring.