2015-11-03 10 views
26

Sto tentando di aggiungere il riempimento a un elemento all'interno di un elemento display:flex. Quando il padding è definito come percentuale, non viene visualizzato in Firefox, sebbene lo faccia quando definito in px. Entrambi i casi funzionano come previsto in Chrome.Gli elementi Flex ignorano il riempimento percentuale in Firefox

div { 
 
    background: #233540; 
 
} 
 
div > div { 
 
    color: #80A1B6; 
 
} 
 
.parent { 
 
    display: flex; 
 
} 
 
.padded { 
 
    padding-bottom: 10%; 
 
}
<div class="parent"> 
 
    <div class="padded"> 
 
     asdf 
 
    </div> 
 
</div>

Chrome:

chrome

Firefox:

Firefox

Modifica: Ciò potrebbe essere dovuto alla decisione di Mozilla di interpretare percentuali verticali rispetto all'altezza del contenitore genitore. Sembra pazzo per me. https://bugzilla.mozilla.org/show_bug.cgi?id=851379

Edit 2: Sì, sembra che la specifica definisce in realtà padding verticale e il margine come dall'essere risolta contro l'altezza del contenitore, in modo forse Chrome è quello non onorare le specifiche? https://drafts.csswg.org/css-flexbox/#item-margins

+0

RE: Edit 2: in realtà la specifica definisce come una scelta per il browser di utilizzare l'altezza o larghezza in alto/margine inferiore/padding fintanto sono coerenti e usano sempre l'uno o l'altro per tutte le situazioni. Quindi, sia Firefox che Chrome rispettano le specifiche. –

+0

Probabilmente la risposta migliore è seguire anche le specifiche attuali: "Gli autori dovrebbero evitare di utilizzare interamente percentuali di paddings o margini sugli elementi flessibili, in quanto avranno un comportamento diverso nei vari browser." –

risposta

27

Vedi https://lists.w3.org/Archives/Public/www-style/2015Sep/0038.html

Tabella/Flex Percentuali

  • Il gruppo ha cercato di lavorare attraverso il modo verticale percentuale margini e padding sono definiti.
    • Nota: margini superiore e inferiore a CSS hanno tradizionalmente deliberato contro la larghezza blocco che contiene invece del suo altezza, che ha alcuni effetti utili, ma è generalmente sorprendente. Ovviamente le attuali modalità di layout devono continuare con .
    • La precedente risoluzione del gruppo era stata per l'opzione 2 (sotto), ma Google ha ritenuto di avere nuove informazioni sul comportamento di abspos che meritava la riconsiderazione.
    • La discussione è venuto giù a tre possibili soluzioni:
      • Opzione 1: risolvere sempre percentuali contro la larghezza.
      • Opzione 2: risoluzione della griglia e della flessione rispetto all'altezza e gli oggetti asspos si risolvono sempre contro la larghezza.
      • Opzione 3: Grid e flex, compresi gli oggetti assposi, risoluzione rispetto all'altezza. Abspos altrove continuano a risolvere contro la larghezza.
    • In un sondaggio del gruppo è stato abbastanza equamente diviso tra opzioni 1 e 3.
    • Microsoft si opporrebbe a opzione 1 e Google per l'opzione 3, quindi la discussione ha raggiunto una situazione di stallo e sarà continuato privatamente durante la F2F nella speranza di raggiungere una conclusione.

Vedi https://lists.w3.org/Archives/Public/www-style/2015Sep/0113.html,

Flexbox% Follow-Up

  • [...] non vi era ancora alcuna conclusione.

L'attuale Flexbox spec avverte su questo:

margini percentuali e imbottiture su flex items possono essere risolti contro uno:

  • proprio asse (sinistra/destra percentuali risolutezza contro larghezza, superiore/inferiore risoluzione contro altezza)
  • l'asse in linea (sinistra/destra/alto/bo percentuali di ttom tutte risolvono contro larghezza)

Un utente agente deve scegliere uno di questi due comportamenti.

Nota: Questa varianza fa schifo, ma si coglie con precisione la corrente stato del mondo (nessun consenso tra le implementazioni, e nessun consenso in seno alla CSSWG). È intenzione del CSSWG che i browser convergeranno in uno dei comportamenti, momento in cui le specifiche saranno modificate da per richiederlo.

Gli autori dovrebbero evitare di usare le percentuali di imbottiture o di margini su flex items del tutto, in quanto avranno un comportamento diverso in diversi browser.

+0

Wow. Grazie per la tua ampia ricerca sulla politica ecc., molto utile. Qualche raccomandazione su come definire effettivamente i rapporti? https://css-tricks.com/aspect-ratio-boxes/ – nvreez

16

Per me questo è il trucco: aggiungere display: tabella al div. Non so se questo causi altri problemi.

div { 
 
     background: #233540; 
 
     display: table; 
 
    } 
 
    div > div { 
 
     color: #80A1B6; 
 
    } 
 
    .parent { 
 
     display: flex; 
 
    } 
 
    .padded { 
 
     padding-bottom: 10%; 
 
    }
<div class="parent"> 
 
     <div class="padded"> 
 
      asdf 
 
     </div> 
 
    </div>

+3

Sì, cambiando il' display' del genitore cambia questo comportamento, ma la domanda riguarda specificamente gli elementi 'flex'. – nvioli

+0

Sebbene questo non risponda veramente alla domanda, fornisce un trucco che ha risolto il problema , che al momento rimane irrisolto su una base più generale – oligofren

5

Prova questo:

.padded { 
    padding-bottom: 10vw; 
} 
+0

Per migliorare la qualità della risposta, si prega di includere una spiegazione della probabile causa del problema del quesito e come la risposta suggerita costituisce un miglioramento.Include collegamenti a qualsiasi risorsa che trovi utile in materia – toonice

+0

Questa è stata la soluzione perfetta per me. Non sono sicuro del motivo per cui nessun altro l'ha svalutato. – americanknight

+2

Non funzionerà se vuoi che rimanga statico in una certa in larghezza poiché la larghezza non è relativa al contenitore genitore, è la larghezza dell'intero browser (il che significa che manterrà il riempimento fino al crescere del browser, cosa non desiderata quando si ha un contenitore con una larghezza massima). – ha404