2017-08-24 2 views
3

Ich habe mehrere divs, die eine Überschrift und einen Text enthalten. Einige der Überschriften haben einen manuell gesetzten <br /> und angrenzenden Textabschnitt. Ich möchte, dass die Breite des Textes mit der breitesten Stelle der Überschrift übereinstimmt.Die Breite des Textes stimmen mit den Überschriften überein Breite

Wie mache ich das rein mit CSS?

enter image description here

.flex-text { 
 
     align-items: center; 
 
     display: flex; 
 
     justify-content: start; 
 
     color: #007990; 
 
     flex-direction: column; 
 
    } 
 
    
 
    .flex-text p { 
 
     color: #545641; 
 
     text-align: justify; 
 
    }
<div class='flex-text'> 
 
     <h3>Supercool heading <br />done nicely</h3> 
 
     <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
 
    </div>

+0

es Legen Sie in einem 'div' und geben, dass' 'div' eine max-width' dann setzen Text drin. – Sand

+0

Am einfachsten wäre es wahrscheinlich, wenn Sie beide im selben Container sitzen ("div" oder was auch immer Sie wollen) und diesem Container eine feste Breite geben. Nicht wirklich die dynamische Lösung, nach der Sie suchen. Ich bin mir jedoch nicht sicher, was Sie versuchen, ist nur mit CSS möglich. – domsson

+0

Ich habe die Frage leicht geändert und werde versuchen, ein Stack-Snippet zu erstellen. – Hedge

Antwort

3

Sie diese Tabellen mit CSS tun könnte, Sie display: table auf übergeordnete Element festlegen müssen gerade und 1% oder etwas kleiner und dann white-space: nowrap setzen Breite verwenden auf Position.

Dieser Weg wird in einer Zeile bleiben und Zeile, wo Sie br Tag und Text haben wird die gleiche Breite als breiteste Element oder Überschrift in diesem Fall haben.

div { 
 
    text-align: center; 
 
    border: 1px solid black; 
 
    display: table; 
 
    margin: 0 auto; 
 
    width: 1%; 
 
} 
 
h1 { 
 
    white-space: nowrap; 
 
}
<div> 
 
    <h1>Lorem ipsum dolor sit amet <br> consectetur.</h1> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Adipisci fugit minus, ad dicta ullam odio temporibus optio voluptatibus nisi, voluptatum molestias at. Molestiae maiores molestias ducimus praesentium vero, iusto laboriosam.</p> 
 
</div>

+0

Nizza! Ich habe 'display: table' nie berührt, also wusste ich nicht, dass das möglich war. Wäre ein ähnlicher Ansatz auch mit "Inline-Block" oder sogar Flex möglich? – domsson

+1

Das funktioniert wirklich gut. Browser-Unterstützung ist auch etwa 97%! – Hedge

0

Wie in den Kommentaren vorgeschlagen, dass Sie einfach dies mit einem Wrapper, der sowohl den Titel und den Inhalt und gibt, dass die Verpackung einen max-width

Diesen max-width umgeben würde gleich sein, was auch immer Ihre Kopfzeile ist. Dies sollte in Ihrem Fall funktionieren, da die Header bereits manuell gesetzt sind.

.flex-text { 
 
     align-items: center; 
 
     display: flex; 
 
     justify-content: start; 
 
     color: #007990; 
 
     flex-direction: column; 
 
    } 
 

 
    .item { 
 
     max-width: 153px; 
 
    } 
 
    
 
    .flex-text p { 
 
     color: #545641; 
 
     text-align: justify; 
 
    }
<div class='flex-text'> 
 
     <h3 class="item">Supercool heading <br />done nicely</h3> 
 
     <p class="item">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
 
    </div>

+0

Dieser Ansatz berücksichtigt keine manuellen Zeilenumbrüche über '
'. Ich habe dem ursprünglichen Beitrag ein Stack-Snippet hinzugefügt. – Hedge

+0

Eigentlich ist das genau der Grund, warum es funktioniert, da Sie die Pause manuell steuern, kontrollieren Sie die Breite und Sie können sie einstellen. Ich werde meine Antwort mit deinen Sachen aktualisieren. – Johannes

0

Verwenden Sie diesen Code

.flex-text{ 
 
    max-width:270px; 
 
    margin:0 auto; 
 
} 
 
.flex-text h3{ 
 
    text-align:center; 
 
    color: #545641; 
 
    font-size:32px; 
 
    line-height:100%; 
 
} 
 
.flex-text p{ 
 
    text-align:justify; 
 
}
<div class='flex-text'> 
 
    <h3>Supercool heading done nicely</h3> 
 
    <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p> 
 
</div>

+1

Dieser Ansatz funktioniert nicht mehr, wenn die 'max-width' auf einen hohen Wert (z. B. 600px) eingestellt ist. Der Text wird einfach zu breit. – Hedge

Verwandte Themen