2015-12-13 14 views
10

Próbuję utworzyć responsywną aplikację; na większych ekranach jest lista elementów div i możesz przewinąć do, aby zobaczyć poprzednie divy (zachowanie "tradycyjne"). Na mniejszych ekranach pokazuje tę samą listę, ale odwraca kolejność, więc przewijanie dół widzi div pokazuje.Flexbox kolumna-rewers i przepełnienie w Firefox/IE

Wyobraziłem sobie, że flexbox byłby świetnym rozwiązaniem tego i było ... w Chrome.

Oto HTML:

<div id="list"> 
    <div class="item">1</div> 
    <div class="item">2</div> 
    <div class="item">3</div> 
    <div class="item">4</div> 
    <div class="item">5</div> 
    <div class="item">6</div> 
    <div class="item">7</div> 
    <div class="item">8</div> 
    <div class="item">9</div> 
</div> 

I CSS:

#list { 
    display: flex; 
    flex-direction: column-reverse; 
    height: 250px; 
    overflow-y: scroll; 
    border: 1px solid black; 
} 

.item { 
    flex: 1; 
    padding: 2em; 
    border: 1px dashed green; 
} 

Jak również skrzypce to pokazać: http://jsfiddle.net/jbkmy4dc/3/

W Chrome list div poprawnie pokazuje pasek przewijania. Jednak w przeglądarce Firefox i IE/Edge pasek przewijania jest widoczny, ale wyłączony.

Wszelkie pomysły? Czy brakuje mi prefiksu dostawcy?

Odpowiedz

8

Jako obejście, można rozpowszechniać style kontenera spośród dwóch różnych pojemnikach:

  • Zewnętrzna jeden z rozmiarów, granice i przepełnienie
  • Wewnętrzna jeden ze stylów schematu flexbox

Jeśli ma to być przewijane do dołu domyślnie, można użyć JS: Scroll to bottom of div?

function scrollToBottom(el) { el.scrollTop = el.scrollHeight; } 
 
scrollToBottom(document.getElementById('list'));
#list { 
 
    height: 250px; 
 
    overflow-y: scroll; 
 
    border: 1px solid black; 
 
} 
 
#inner-list { 
 
    display: flex; 
 
    flex-direction: column-reverse; 
 
} 
 
.item { 
 
    flex: 1; 
 
    padding: 2em; 
 
    border: 1px dashed green; 
 
}
<div id="list"> 
 
    <div id="inner-list"> 
 
    <div class="item">1</div> 
 
    <div class="item">2</div> 
 
    <div class="item">3</div> 
 
    <div class="item">4</div> 
 
    <div class="item">5</div> 
 
    <div class="item">6</div> 
 
    <div class="item">7</div> 
 
    <div class="item">8</div> 
 
    <div class="item">9</div> 
 
    </div> 
 
</div>

+0

Wow, nie mogę uwierzyć, że to działa ... dzięki! – TranquilMarmot

+0

w chrome Widzę tylko 3 2 1 i bez paska przewijania – rofrol

+2

@rofrol Chrome potrzebował 'flex-shrink: 0' na' # inner'. Zaktualizowałem odpowiedź, dziękuję. – Oriol

-3
#list { 
    /*display: flex; 
    flex-direction: column-reverse;*/ 
    height: 250px; 
    -ms-overflow-y:scroll; 
    overflow-y:scroll; 
    border: 1px solid black; 
} 

Twój numer pochodzi z wyświetlacza: flex; Właściwość, która nie jest obsługiwana w IE 8 i IE 9 !! :)

+0

ja testowałem tylko w IE 10 i krawędzi – TranquilMarmot

8

To jest błąd w przeglądarkach Firefox, Edge i IE11.

Z paskiem przewijania pojawia się tylko w przeglądarce Chrome.

Po przełączeniu na column pasek przewijania działa we wszystkich przeglądarkach.

Więcej informacji:

+0

Oh cool, wygląda grupy roboczej przyjął definicję, która naprawię to ... Sądzę, że będę go używał na razie i mam nadzieję, że sprzedawcy mogą zgodzić się na niektóre funkcje;) – TranquilMarmot

Powiązane problemy