2012-12-12 2 views
4

Dans une boîte de connexion/enregistrement, je dois séparer deux boutons avec un texte comme celui-ci.Ligne centrée verticalement pour un texte

Log in/Register box

Avec mon code HTML être:

<button class="facebookSux">Ingresa con Facebook</button> 
<label>o si prefieres</label> 
<button class="register">Regístrate con tus datos</button> 

Comment puis-je obtenir la ligne horizontale pour l'étiquette uniquement avec CSS?

Une solution que j'ai envisagée consiste à utiliser un gradient linéaire de manière appropriée, mais il doit y avoir une manière plus élégante d'y parvenir.

+0

Pouvez-vous poster un jsFiddle? – Nelson

Répondre

2

Je suppose qu'il ya un conteneur autour de ces trois balises qui peuvent être coiffés aussi, dans ce cas, je propose this solution.

Screenshot

Markup (non modifié):

<div> 
    <button>Ingresa con Facebook</button> 
    <label>o si prefieres</label> 
    <button>Regístrate con tus datos</button> 
</div> 

feuille de style:

div { 
    width: 250px; 
    text-align: center; 
    overflow: hidden; 
} 
button { 
    width: 100%; 
} 
label { 
    padding: 0 1em; 
    position: relative; 
} 
label::before, 
label::after { 
    width: 125px; /* =250/2 */ 
    height: 0; 
    border-top: 1px solid #000; 
    content: ""; 
    display: inline-block; 
    position: absolute; 
    top: 50%; 
    right: 100%; 
} 
label::after { 
    left: 100%; 
} 
+0

Peu de temps après avoir posté cette question, j'ai trouvé une solution qui ressemble beaucoup à la vôtre. Je choisis cette réponse pour être le seul qui n'a pas besoin d'ajouter du code HTML (éléments vides) pour le style. En bref, vous avez répondu exactement ce que je demandais. – Mario

3

Vous pouvez certainement utiliser 2 divs et le positionnement

Demo

HTML

<div class="wrapper"> 
    <div class="line"></div> 
    <div class="text">Hello</div> 
</div> 

CSS

.wrapper { 
    margin: 30px; 
    position: relative; 
    width: 300px; 
} 

.line { 
    height: 1px; 
    background-color: #000000; 
} 

.text { 
    background: #ffffff; 
    display: inline-block; 
    position: absolute; 
    top: -15px; 
    left: 128px; 
    padding: 5px; 
} 
+0

En démo, lorsque j'ajoute plus de texte, le texte ne reste plus centré. Au moins les lignes horizontales ne sont pas équidistantes. –

+0

@SushantGupta si vous savez ce que cela signifie, il doit être redimensionné manuellement, l'OP n'a pas de texte dynamique –

+0

@MrAlien En fait, je ne sais pas CSS. Je regardais juste la démo de JSFiddle, et je n'ai pas eu le résultat attendu. J'ai donc pensé à partager ce que j'ai vu.De toute façon, vous pouvez ignorer mon opinion car je ne mérite même pas d'appeler CSS newbie: P En passant, Félicitations, pour votre nouveau privilège –

0

Vous pouvez utiliser la balise <hr /> pour cela. Il est possible de définir l'étiquette <hr /> comme une seule ligne noire. Avec l'utilisation de css, vous pouvez les placer dans la bonne position.

Styling l'étiquette <hr /> comme une ligne noire:

hr { 
     border: 1px; 
     height: 1px; 
     color: #000000; 
     background-color: #000000; 
} 
+0

'border: 0px;' est également valide. – MartenBE

0

En utilisant ceci: http://jsfiddle.net/tErMn/

Vous avez le positionnement de texte dynamique et la ligne avec seulement css. L'astuce est dans display: inline-block;, margin: auto; et z-index;

HTML

<div class="container">  
    <div class="text">Hello</div> 
    <div class="line"></div> 
</div> 

CSS

.container{ 
    width: 300px; 
    text-align: center; 
} 

.text{ 
    background-color: white; 
    padding: 5px 20px; 
    position: relative; 
    z-index:1; 
    margin: auto; 
    display: inline-block; 

} 

.line { 
    height: 1px; 
    width: 100%; 
    background-color: black; 
    margin-top: -15px; 
} 
Questions connexes