J'essaie de faire une règle horizontale avec du texte au milieu. Par exemple:
----------------------------------- mon titre ici ------------ -----------------
Existe-t-il un moyen de le faire en CSS? Sans tous les tirets "-" évidemment.
html
css
cross-browser
Jason
la source
la source
form
balise?fieldset
etlegend
Réponses:
Voici à peu près comment je le ferais: la ligne est créée en mettant un
border-bottom
sur le contenanth2
puis en donnanth2
un plus petitline-height
. Le texte est ensuite placé dans un imbriquéspan
avec un arrière-plan non transparent.J'ai testé uniquement dans Chrome, mais il n'y a aucune raison pour que cela ne fonctionne pas dans d'autres navigateurs.
JSFiddle: http://jsfiddle.net/7jGHS/
la source
Après avoir essayé différentes solutions, je suis venu avec un valide pour différentes largeurs de texte, tout arrière-plan possible et sans ajouter de balisage supplémentaire.
Je l'ai testé dans IE8, IE9, Firefox et Chrome. Vous pouvez le vérifier ici http://jsfiddle.net/Puigcerber/vLwDf/1/
la source
h1 {
débordement: caché; `text-align: gauche; `texte-indent: 40px; `}:after
élément la largeur du bloc. Je suis curieux: quel est exactement le rôle demargin-right: -50%
? Lorsque je cherchais du code, manquer cette propriété ferait que la décoration se briserait sur une autre ligne. Et même lorsque la:after
largeur est affectée à 100%, j'ai toujours besoin de la marge de droite négative de 50% pour l'adapter. Pourquoi?Ok, celui-ci est plus compliqué mais il fonctionne dans tout sauf IE <8
Les éléments: avant et: après sont positionnés de manière absolue afin que nous puissions en tirer un à gauche et un à droite. De plus, la largeur (40% dans ce cas) est très dépendante de la largeur du texte à l'intérieur. Il faut réfléchir à une solution pour cela. Au moins, le
top: 1.2em
s'assure que les lignes restent plus ou moins au centre du texte même si vous avez une taille de police différente.Cela semble bien fonctionner cependant: http://jsfiddle.net/tUGrf/3/
la source
form
balise. S'il le fait, comme vous le savez sûrement, il pourrait simplement utiliserfieldset
etlegend
.Méthode la plus courte et la meilleure:
la source
font-family: monospace;
fonctionnait bien.Voici une solution basée sur Flex.
JSFiddle: https://jsfiddle.net/yoshiokatsuneo/3h1fmj29/
la source
<h1><span>Today</span></h1>
avec une marge / rembourrage sur la travée.pour un navigateur ultérieur (de nos jours),
display:flex
anddpseudo-elements
facilite le dessin.border-style
,box-shadow
etbackground
aide même aussi pour le maquillage.la source
la source
Donnez à l'intervalle un remplissage pour faire plus d'espace entre le texte et la ligne.
Exemple: http://jsfiddle.net/tUGrf/
la source
J'ai cherché des solutions pour cette décoration simple et j'en ai trouvé pas mal, certaines bizarres, certaines même avec JS pour calculer la hauteur de la police et bla, bla, bla, puis j'ai lu le un sur ce post et lire un commentaire de thirtydot en parlant
fieldset
etlegend
et je pensais que c'était tout.Je suis en train de remplacer ces 2 styles d'éléments, je suppose que vous pouvez copier les normes W3C pour eux et les inclure dans votre
.middle-line-text
classe (ou comme vous voulez l'appeler) mais c'est ce que j'ai fait:Voici le violon: http://jsfiddle.net/legnaleama/3t7wjpa2/
J'ai joué avec les styles de bordure et ça marche aussi sous Android;) (Testé sur kitkat 4.XX)
ÉDITER:
En suivant l'idée de Bekerov Artur, qui est également une bonne option, j'ai changé l'image .png base64 pour créer le trait avec un .SVG afin que vous puissiez effectuer le rendu dans n'importe quelle résolution et également changer la couleur de l'élément sans aucun autre logiciel impliqué :)
la source
Solution pour IE8 et plus récent ...
Problèmes à noter:
Utiliser
background-color
pour masquer une bordure n'est peut-être pas la meilleure solution. Si vous avez une couleur (ou une image) d'arrière-plan complexe (ou inconnue), le masquage échouera finalement. De plus, si vous redimensionnez le texte, vous remarquerez que la couleur d'arrière-plan blanc (ou tout ce que vous définissez) commencera à couvrir le texte sur la ligne au-dessus (ou en dessous).Vous ne voulez pas non plus "estimer" la largeur des sections, car cela rend les styles très rigides et presque impossibles à mettre en œuvre sur un site réactif où la largeur du contenu change.
Solution:
( Voir JSFiddle )
Au lieu de "masquer" une bordure avec un
background-color
, utilisez votredisplay
propriété.HTML
CSS
Redimensionnez votre texte en plaçant votre
font-size
propriété sur l'.group
élément.Limites:
top
la propriété sur l'.line
élément doit être la moitié deline-height
. Donc, si vous avez unline-height
de1.5em
, letop
devrait-.75em
. Il s'agit d'une limitation car elle n'est pas automatisée et si vous appliquez ces styles à des éléments ayant des hauteurs de ligne différentes, vous devrez peut-être réappliquer votreline-height
style.Pour moi, ces limitations l'emportent sur les "problèmes" que j'ai notés au début de ma réponse pour la plupart des implémentations.
la source
Cela vous donne une longueur fixe pour les lignes, mais fonctionne très bien. La longueur des lignes est contrôlée en ajoutant ou en prenant '\ 00a0' (espace unicode).
la source
Si quelqu'un se demande comment définir le titre de manière à ce qu'il apparaisse à une distance fixe du côté gauche (et non centré comme présenté ci-dessus), je l'ai compris en modifiant le code de @ Puigcerber.
Voici le JSFiddle .
la source
cela vous aidera
entre la ligne
la source
J'utilise une disposition de table pour remplir les côtés dynamiquement et des diviseurs de position absolue à 0 hauteur pour un positionnement vertical dynamique:
https://jsfiddle.net/eq5gz5xL/18/
J'ai trouvé qu'un peu en dessous du vrai centre semble mieux avec du texte; cela peut être ajusté là où se
55%
trouve (une hauteur plus élevée rend la barre plus basse). L'apparence de la ligne peut être modifiée là où elle seborder-bottom
trouve.HTML:
CSS:
la source
Ne pas battre un cheval mort, mais je cherchais une solution, je me suis retrouvé ici et je n'étais pas satisfait des options, notamment pour une raison quelconque, je n'ai pas pu obtenir que les solutions fournies ici fonctionnent bien pour moi. (Probablement à cause d'erreurs de ma part ...) Mais j'ai joué avec la flexbox et voici quelque chose que j'ai réussi à faire pour moi.
Certains paramètres sont câblés, mais uniquement à des fins de démonstration. Je pense que cette solution devrait fonctionner dans presque tous les navigateurs modernes. Supprimez / ajustez simplement les paramètres fixes de la classe .flex-parent, ajustez les couleurs / texte / trucs et (j'espère) vous serez aussi heureux que je suis avec cette approche.
HTML:
J'ai également enregistré ma solution ici: https://jsfiddle.net/Wellspring/wupj1y1a/1/
la source
Juste au cas où quelqu'un le voudrait, à mon humble avis, la meilleure solution en utilisant CSS est une flexbox.
Voici un exemple:
Cela devrait toujours entraîner un contenu aligné parfaitement centré avec une ligne à gauche et à droite, avec une marge facile à contrôler entre la ligne et votre contenu.
Il crée un élément de ligne avant et après votre contrôle supérieur et les définit à l'ordre 1,3 dans votre conteneur flexible tout en définissant votre contenu comme ordre 2 (allez au milieu). donner l'avant / après une croissance de 1 leur fera consommer également l'espace le plus vacant tout en gardant votre contenu centré.
J'espère que cela t'aides!
la source
Je ne suis pas trop sûr, mais vous pouvez essayer d'utiliser une règle horizontale et de pousser le texte au-dessus de sa marge supérieure. Vous aurez besoin d'une largeur fixe sur votre balise de paragraphe et d'un arrière-plan aussi. C'est un peu hacky et je ne sais pas si cela fonctionnera sur tous les navigateurs, et vous devez définir la marge négative en fonction de la taille de la police. Fonctionne sur le chrome cependant.
la source
J'ai essayé la plupart des méthodes suggérées, mais je me retrouve avec des problèmes comme la pleine largeur ou Ne convient pas au contenu dynamique. Enfin, j'ai modifié un code et fonctionne parfaitement. Cet exemple de code dessine ces lignes avant et après, et il est flexible dans le changement de contenu. Centre aligné aussi.
HTML
CSS
Résultat: https://jsfiddle.net/fasilkk/vowqfnb9/
la source
Pour moi, cette solution fonctionne parfaitement bien ...
HTML
<h2 class="strikethough"><span>Testing Text</span></h2>
CSS
la source
Les personnes qui utilisent Bootstrap 4 peuvent réussir avec cette méthode. les classes mentionnées dans le code HTML proviennent de Bootstrap 4.
Et écrivez votre HTML comme ceci
la source
Horizontal etLigne verticale avec des mots au milieu
On y répond également en https://stackoverflow.com/a/57279326/6569224
la source
Résultat:
la source