2014-06-23 16 views
34

Inizialmente ho sviluppato un sito Web con Chrome (il più semplice da progettare), ma ora sto passando al modello di supporto di IE.Flexbox alternativo per IE9

Detto questo, ho iniziato con IE11 e ho apportato le modifiche necessarie per le eccentriche differenze tra IE & Chrome. Ma ora sto abbassando le versioni di IE. Sono riuscito a visualizzare correttamente il 90% delle pagine Web con CSS per IE10. Ma ora la maggior parte degli elementi CSS che ho per questi due browser sono per la maggior parte irrilevanti per IE9.

Vorrei evitare di dover utilizzare più fogli di stile specifici del browser, se possibile.

Primo problema è la conversione di IE10 + implementazione del modello di CSS della CSS.

implementazione corrente per il contenitore FlexBox:

div#navContainer{ 
    display: flex; //Current browsers (IE11, Chrome, etc) 
    display: -ms-flexbox; //IE10 implementation 
} 

div#TeamsSection { 
    text-align: center; 
} 

div.NavSection { 
    margin: 0px 7px; 
    padding: 4px 0px 0px 0px; 
} 

div#teams { 
    margin: 0px; 

    select { 
     margin: 0px; 
    } 
} 

HTML:

<div id="navContainer" class="float-left"> 
    <div id="LogoSection" class="NavSection"> 
     <div id="Logo"> 
      <img src="Images/Logo.png" /> 
     </div> 
    </div> 
    <div id="TeamsSection" class="NavSection"> 
     <label>Select a Team:</label><br /> 
     <div id="teams"></div> 
    </div> 
    <div id="UserSection" class="NavSection hidden"> 
     <label>Select a User:</label><br /> 
     <div id="requestor"></div> 
    </div> 
</div> 

So IE9 non implementa Flexbox, quindi per favore non insultare la ricerca che ho già fatto. Ho bisogno di un'implementazione equivalente che mi permetta di cambiare l'HTML il meno possibile.

+0

non si dice come si utilizza la proprietà flex, display: table & table-cell potrebbe essere un fallback in cui altrimenti sarebbe giocare con layout e testo-allineamento. Display: flettere; da solo non fornisce abbastanza consigli per specifici fallback –

+0

Bene, l'elemento '# navContainer' è quello che causa il problema di fuori flusso per IE9. Ho pubblicato gli stili CSS HTML ed estesi per bambini. '# teams' e' # requestor' sono riempiti da Moustache dai modelli. Anche in questo caso il problema è proprio con 'navContainer', in quanto IE10 + e Chrome funzionano come previsto. Il suo IE9, ho bisogno di provare e ottenere una corretta implementazione per. – GoldBishop

+0

Questa non è una risposta a flexbox su IE9, ma se si aggiungono prefissi dei fornitori per supportare IE10, prendere in considerazione l'utilizzo di Autoprefixer. Lo rende davvero facile. – sanfilippopablo

risposta

69

Utilizzare modernizr per rilevare se sono presenti funzionalità di flessibilità e fornire, se necessario, stili di fallback.Modernizr aggiungerà classi come flexbox, no-flexbox, e flexbox-legacy all'elemento html, così nei vostri stili si può usare:

.container { 
     display: flex; 
    } 
    .no-flexbox .container { 
     display: table-cell; 
    } 

Consiglio vivamente la lettura attraverso (@zomigi) le presentazioni di Zoe Gillenwater in materia, in particolare Leveling Up With Flexbox (Smart Web Conference - September 2014)

  • slitta 21: spaziatura orizzontale navigazione>display: inline-block;
  • scivolo 62: appunta elementi senza FlexBox>display: table-cell;
  • diapositive 70,71: allineare forme fallback
  • slitta 88,91: esempio con e senza ordine flex

Inoltre, nella sua presentazione CSS3 Layout, ci sono alcuni buoni anteprime collaterali sideby di layout con e senza FlexBox:

  • scivolo 73: Uso inline-block con FlexBox: forma orizzontale
  • scivolo 79: Uso inline-block con FlexBox: navigazione orizzontale

Alcuni di take away per me:

  • supporto del browser IE10 + è piuttosto buona caniuse
  • uso auto-prefixr per gestire il browser prefissi
  • uso Modernizr per fornire fallback
  • "FlexBox non è tutto o niente" @zomigi
+0

.container { display: flex; display: tabella-cella; } –

+19

Penso che dovrebbe essere '.container {display: table-cell; display: flex;} – bernk

39

Mi piace la risposta di cui sopra, ma non è necessario utilizzare modernizr. Si potrebbe semplicemente usare il layout di tabella per ie9 e flexbox per gli altri.

.container { 
    display: table-cell; // ie9 
    display: flex;  // others 
} 
+0

bello! Immagino che ci possano essere alcuni casi limite in cui i browser di 'flexbox-legacy' rendono leggermente diverso .. autoprefixer è ancora a portata di mano! – ptim

+5

Questo non funziona. Sono gli elementi figli di '.container' che devono essere posizionati in linea, non' .container' stesso. – maxedison

+0

Aggiungi il codice sopra agli elementi figli se è quello di cui hai bisogno. –

7

Un anno dopo, questa soluzione, utilizzando JavaScript per regolare il layout in vecchi browser, sembra interessante =>https://github.com/10up/flexibility

Quasi 2.000 stelle su Github ma l'ultimo commit era 3 mesi fa, ho non so se è ancora mantenuto attivamente.

+0

non richiede un sacco di modifiche attive. BootStrap di Google sembra anche fornire la funzionalità con cui tutti abbiamo lottato. – GoldBishop

+9

In realtà è Twitter Bootstrap. Basta dire. ;) –

+0

Tecnici, provengono tutti dallo stesso ramo dell'albero;) – GoldBishop