2016-06-23 6 views
6

Chcę mieć element nadrzędny, który zawiera dwa elementy div o szerokości 50%, które zmieniają rozmiar wraz z zawartością.Dwa 50% elementów div z białymi znakami: elementy nowrap wewnątrz kontenera elastycznego

Jeden z nich ma h3 z , co powoduje, że element div rośnie o 50%.

Mogę zmusić element div, aby powrócił do szerokości 50% przy użyciu min-width:0;, ale teraz przepełnienie wynosi h3.

Więc albo dostaję inną szerokość na div dzieci lub przelew z h3 wewnątrz jednego z nich.

Czy można sprawić, aby miały taką samą szerokość 50%, nawet jeśli zawierają elementy o numerze white-space:nowrap;?

Sprawdź tutaj problemu: http://codepen.io/anon/pen/VjPwLm?editors=1100

#parent { 
 
    background: whitesmoke; 
 
    display: inline-flex; 
 
} 
 
#left { 
 
    background: rgba(10, 200, 250, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
} 
 
#right { 
 
    background: rgba(250, 200, 10, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
    /*min-width:0;*/ 
 
    /* Turn this on to see the h3 overflow */ 
 
} 
 
h3 { 
 
    white-space: nowrap; 
 
}
<div id="parent"> 
 
    <div id="left">Captain Deadpool</div> 
 
    <div id="right"> 
 
    <h3>Very long title that does not entirelly fit into the div</h3> 
 
    </div> 
 
</div>

Odpowiedz

5

Jeśli dobrze rozumiem, chcesz lewo pozycja Flex być tak szeroki jak długi tytuł.

Następnie można:

  • Zastosowanie min-width: 100% zarówno giętkie przedmioty, aby je tak szeroka jak konkatenacji swoich tekstach. Wtedy będą równie szerokie.

  • Są one jednak zbyt szerokie, ponieważ zawierają tekst pierwszego elementu flex. Użyj width: 0, aby go zignorować.

#parent { 
 
    background: whitesmoke; 
 
    display: inline-flex; 
 
} 
 
#left, #right { 
 
    min-width: 100%; 
 
} 
 
#left { 
 
    background: rgba(10,200,250,0.5); 
 
    width: 0; 
 
} 
 
#right { 
 
    background: rgba(250,200,10,0.5); 
 
    white-space: nowrap; 
 
}
<div id="parent"> 
 
    <div id="left">Captain Deadpool</div> 
 
    <div id="right"><h3>Very long title that does not entirelly fit into the div</h3></div> 
 
</div>

+0

inteligentnej. Efektem ubocznym używania 'width: 0;' na lewym elemencie flex jest to, że kolor tła i obramowanie flex container mają teraz tylko 50% jego prawidłowej szerokości. Czy istnieje sposób, aby to poprawić? –

+0

@Amoguai Dobry punkt. Sądzę, że możesz użyć 'min-width: 50%' na elementach flex, 'width: 200%' na pojemniku flex i zawinąć go do kontenera śródliniowego. [Demo] (https://jsfiddle.net/610o1whg/). Ale teraz elastyczny pojemnik przepełni opakowanie. Nie mogę myśleć w żaden sposób, aby pozbyć się przepełnienia. – Oriol

+0

@Amoguai Zrobiłem to z marginesem. Ale łamie się, gdy ekran jest zbyt wąski, ponieważ powinien być zwymiarowany przy użyciu maksymalnej zawartości zamiast domyślnej treści dopasowania. Ale nie wszystkie przeglądarki obsługują 'width: max-content'. [Demo] (https://jsfiddle.net/610o1whg/1/) – Oriol

0

Jeśli rozumiem problemu poprawnie, chcesz maintian z 2 DIV tak, że mają 50% szerokości. Ustaw div jednostki nadrzędnej na szerokość 100%, a następnie ustaw wartość #right i #left na min-width: 50%; Dodaj do h3, aby przepełnienie zostało ukryte.

#parent { 
 
    background: whitesmoke; 
 
    display: inline-flex; 
 
} 
 
#left { 
 
    background: rgba(10, 200, 250, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
    min-width: 100%; 
 
} 
 
#right { 
 
    background: rgba(250, 200, 10, 0.5); 
 
    flex-basis: 0; 
 
    flex-grow: 1; 
 
    min-width: 100%; 
 
} 
 
h3 { 
 
    white-space: nowrap; 
 
}
<div id="parent"> 
 
    <div id="left">Captain Deadpool</div> 
 
    <div id="right"> 
 
    <h3>Very long title that does not entirelly fit into the div</h3> 
 
    </div> 
 
</div>

+1

Chcę, aby element nadrzędny i podrzędny działały w celu zmiany rozmiaru z zawartością, zamiast przepełniać. Zasadniczo chcę, aby rodzic div miał dwa razy większą szerokość niż największy div dziecka. –

+0

Nie jest to bardzo ważne, ponieważ mogę używać zapytań o media do ponownego formatowania zachowania na małych ekranach, ale najlepiej byłoby układać je jak elementy pływające. –

Powiązane problemy