2017-04-18 6 views
1

Ich möchte zwei Textfelder nebeneinander. Der erste sollte dem zweitwichtigeren Platz geben.Wie kann ich ein div mehr als ein anderes priorisieren

Wie ist das möglich, ohne feste Breiten und Text-Overflow geben: Ellipse auf der ersten?

Beispiel: https://jsfiddle.net/by2e9uej/

div { 
 
    border: 1px solid black; 
 
} 
 
#test1 { 
 
    width: 250px; 
 
    overflow: hidden; 
 
    white-space: nowrap; 
 
} 
 
#test1 > div { 
 
    display: inline-block; 
 
} 
 
#test2 { 
 
    -o-text-overflow: ellipsis; /* Opera */ 
 
    text-overflow: ellipsis; /* IE, Safari (WebKit) */ 
 
    overflow:hidden;    /* don't show excess chars */ 
 
    white-space:nowrap;   /* force single line */ 
 
    vertical-align: bottom; 
 
}
<div id="test1"> 
 
    <div id="test2">long text standing in here</div> 
 
    <div id="test3">more important text in here</div> 
 
</div>

+0

der Inhalt dynamisch abgerufen werden? – Swellar

+0

ja sie sind aus einer Datenbank – naja08

+0

Was meinst du mit geben Raum? Sind beide dazu bestimmt, auf einer Linie zu bleiben und was willst du mit einem Überlauf machen? – Pete

Antwort

4

Sie können Flexbox verwenden und overflow: hidden und text-overflow: ellipsis auf erstes Kind div.

div { 
 
    border: 1px solid black; 
 
} 
 
#test1 { 
 
    width: 250px; 
 
    display: flex; 
 
} 
 
#test1 > div { 
 
    white-space: nowrap; 
 
} 
 
#test2 { 
 
    overflow: hidden; 
 
    text-overflow: ellipsis; 
 
}
<div id="test1"> 
 
    <div id="test2">long text standing in here</div> 
 
    <div id="test3">more important text in here</div> 
 
</div>

1

Wenn die Browser können Sie unterstützen müssen flexbox unterstützen, mit Flexbox gehen.

Ich habe ein Beispiel HTML für Sie gemacht, um Ihnen zu zeigen, was es tut. Die Magie CSS-Eigenschaften sind hier: display: flex, flex-direction: row, flex: 1 und flex-basis: 200px

.container 
 
{ 
 
    display: flex; 
 
    flex-direction: row; 
 
} 
 
.container > .item 
 
{ 
 
    flex: 1; 
 
    
 
    -o-text-overflow: ellipsis; /* Opera */ 
 
    text-overflow: ellipsis; /* IE, Safari (WebKit) */ 
 
    overflow:hidden;    /* don't show excess chars */ 
 
    white-space:nowrap;   /* force single line */ 
 
    
 
    /* this just added for better view */ 
 
    border: 1px solid black; 
 
    padding: 5px; 
 
    box-sizing: border-box; 
 
} 
 
.container > .item-2 
 
{ 
 
    flex: 2; 
 
    flex-basis: 200px; 
 
}
<div class="container"> 
 
    <div class="item item-1"> 
 
    long text standing in here 
 
    </div> 
 
    <div class="item item-2"> 
 
    more important text in here 
 
    </div> 
 
</div>

+0

Vielen Dank für die tolle Antwort! Leider töte ich das css des Elternteils, wenn ich den Behälter zum Flex ändere: /! Es ist ein bisschen schwierig, weil ich das MDL-Framework verwende (und ich missbrauche den MDL-Chip ein bisschen) – naja08

+0

@ naja08 Sie könnten ein Kind innerhalb der # item1 hinzufügen, die dann als der Container fungiert. das sollte deinen # item1 als den normalen Container (wie es jetzt ist) belassen, aber nur einen "container" von flexbox hinzufügen. Funktioniert das? – DoXicK

Verwandte Themen