2012-12-05 6 views
0

J'ai HTML suivant pour un en-tête. Les .left et .right sont des intervalles vides. J'ai la largeur spécifique pour le .left et mais la largeur .text n'est pas toujours la même chose. Je veux définir l'arrière-plan pour le .left (largeur fixe) et le .right. Le .right devrait obtenir tout l'espace restant dans l'élément parent (h1). Comment cela peut-il être fait?largeur de travée automatique

<h1> 
    <span class="left"></span> 
    <span class="text">Text</span> 
    <span class="right"></span> 
</h1> 

J'essaie CSS suivant qui ne fonctionne pas:

.left{ 
    background: yellow; 
    width: 30px; 
    height: 20px; 
    display: inline-block; 
} 

.right{ 
    display: inline-block; 
    background: blue; 
} 

Voici le lien jsFiddle: http://jsfiddle.net/jMR8u/

Voici ce que je suis en train de faire: enter image description here

L'idée est de définir une image de fond en h1 à l'exception de la .text span et le problème est que je ne peux pas définir le backg rond pour le .text, sinon ce serait plus facile.

+0

Je ne comprends pas ce que vous essayez de faire, pourriez-vous tirer peut-être une image de qu'est-ce que vous essayez d'accomplir? – daniel

+0

"Le' .right' [span] devrait obtenir tout l'espace restant dans l'élément parent (h1). " –

+0

@daniel J'ai ajouté l'image. Je sais que ce serait plus facile si je pouvais définir bg pour h1 et ensuite définir bg pour l'extension .text, mais le problème est que je ne peux pas définir bg pour .text (car il devrait utiliser l'arrière-plan du corps) – user1355300

Répondre

1

si j'interprète l'image correcte .. ceci est la réponse http://jsfiddle.net/jMR8u/4/

h1{ 
    border: 1px solid red; 
    position: relative; 
} 

.left{ 
    background: yellow; 
    width: 30px; 
    height: 20px; 
    display: inline-block; 
} 

.right{ 
    display: inline-block; 
    background: blue; 
    position: absolute; 
    z-index: 99; 
    height: 20px; 
    width: 100%; 
} 
​.text { 
    height: 20px; 
    width: 150px; 
    display: inline-block; 
    position: relative; 
    z-index; 101; 
}​ 

ok, puis utilisez des couches .. avec z-index et le positionnement

+0

.text devrait utiliser le même arrière-plan du parent hg bg. – user1355300

+0

De cette façon est le plus facile. Si vous ne pouvez pas agir à l'intérieur du H1, alors agir à l'extérieur ... ajouter un div entourant le H1 avec un arrière-plan coloré et définir votre H1 avec un fond blanc et une marge gauche/droite? –

+0

vérifier cette nouvelle verion en violon http://jsfiddle.net/jMR8u/4/ – Mik

1

Vous pouvez utiliser FlexBox (mais utiliser le new syntax). Malheureusement, il ne fonctionne que sur Chrome and Opera pour l'instant, donc cela a une utilité limitée:

h1 { display: -webkit-flex; display: flex; } 
.left { width: 30px; } 
.right { flex: 1; -webkit-flex: 1; } /* This makes it fluid. */ 
.left { background: yellow; } 
.right { background: blue; } 

Voici une démonstration jsFiddle: http://jsfiddle.net/FN7vQ/

+0

C'est exactement ce que j'essaie d'obtenir, mais j'ai besoin des principaux navigateurs support (au moins FF) – user1355300

+0

Voir mon [autre réponse] (http://stackoverflow.com/a/13733816/237285) pour un plus compatible Solution. –

1

si vous pouvez définir la largeur de la durée .text et élément h1.

body{ 
background:green; 
} 

h1{ 
    border: 1px solid red; 
    display:table; 
    width:100%; 
} 

.left{ 
    background: yellow; 
    width: 30px; 
    display: table-cell; 
} 

.right{ 
    display: table-cell; 
    background: blue; 
} 
.text { 
    display:table-cell; 
    width: 150px; 
} 
1

Cette version Étirer pour adapter le contenu de .text et devrait être multi-navigateur.

Vous pouvez fond faux le bleu (à droite) en faisant une bordure de .text:

.text { border-right: 1000px solid; } 

Ensuite, passer .right à gauche par 1000px:

.right { margin-left: -1000px; } 

Donner une largeur .left, faites chaque élément inline-block, masquer la bordure bleue supplémentaire sur la droite, et assurez-vous que .text et .right n'emballent pas à une nouvelle ligne:

.left { width: 200px; } 
.left, .text, .right { display: inline-block; } 
h1 { overflow: hidden; white-space: nowrap; } 

Et donnez-lui de la couleur!

body { background: green; } 
.left { background: red; } 
.text { border-color: blue; } 

Voici une jsFiddle demonstration:

Screenshot from the JSFiddle

+0

Merci Andres pour la bonne solution. – user1355300

0

Si je comprends bien votre exigence correctement.vous devriez changer votre balisage un peu comme ci-dessous

h1 { 
 
    background: #660000; 
 
    padding-left: 30px; 
 
    line-height: 1.1; 
 
} 
 
h1 span { 
 
    background: #fff; 
 
    padding: 0 3px; 
 
    color: #600; 
 
}
<h1> 
 
    <span> 
 
    Lorem, ipsum dolor. you are doing great 
 
    </span> 
 
</h1>

et CSS va ici-bas

Questions connexes