Mai mult
Modalitate mai bună de a seta distanța dintre flexbox elemente
Pentru a seta distanța minimă între flexbox elemente I'm folosind `margin: 0 5px "pe".element " și " margin: 0 -5px pe recipient. Pentru mine pare un hack, dar nu pot't găsi nici o modalitate mai bună de a face acest lucru.
[Exemplu][1]
#box {
display: flex;
width: 100px;
margin: 0 -5px;
}
.item {
background: gray;
width: 50px;
height: 50px;
margin: 0 5px;
}
<div id='box'>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
<div class='item'></div>
</div>
648
39
Prin urmare, realizarea de ce imi ceri tu este un pic mai dificil.
În experiența mea, "curat" dar't folosi:first-child
/
:last-childși funcționează fără nici o modificare pe-flex folie:folie
este stabilitpadding:5px
pe recipient șimargin:5px pe copii. Asta va produce o 10px
decalaj între copii și între copii și părinții lor.[Demo](http://jsfiddle.net/7XD8s/)
Acest lucru nu este un hack. Aceeași tehnică este, de asemenea, utilizate de bootstrap și rețeaua sa, deși, în loc de marjă, bootstrap folosește umplutură pentru coloane.
flexbox și css calc()
Salut, mai jos este munca mea de o soluție pentru toate browserele de sprijin flexbox. Nu marjelor negative, nu hacks, nu soluții, pur Css.
[Vioara Demo][1]
.flexbox { display: flex; flex-direcție: rând; -flex folie: folie; justifica-conținut: spațiu-între; }
Puteți utiliza frontiere transparente.
Trebuie avute în vedere această problemă în timp ce încercarea de a construi un flex grid model care poate reîntoarcerii la un mese + masa-model celular pentru browsere mai vechi. Și Frontiere pentru coloana jgheaburi mi sa părut cea mai bună alegere potrivită. de exemplu, Tabelul-celule don't avea margini.
de exemplu
De asemenea, rețineți că aveți nevoie min-width: 50px; pentru flexbox. Flex model nu se va ocupa de dimensiuni fixe, dacă nu vei face
flex: nici unul; pe copil special elementul pe care doriți ca fix și, prin urmare, excluse de la
"flexi". http://jsfiddle.net/GLpUp/4/ Dar toate coloanele împreună cu flex:none;
este nu mai un flex model. Aici este ceva mai aproape de un flex model: http://jsfiddle.net/GLpUp/5/Astfel încât să puteți folosi de fapt, marjele, în mod normal, dacă nu't nevoie de masă de celule de rezervă pentru browsere mai vechi. http://jsfiddle.net/GLpUp/3/
Setarea de fundal-clip: padding-box;` va fi necesar atunci când se utilizează un fundal, ca altfel fundal va curge în transparent zona de frontieră.
Acest lucru va lucra pentru toate cazurile, chiar dacă există mai multe rânduri sau orice număr de elemente.
Suntem folosind [
display: grid;
]1 și proprietățile sale.Dezavantajul acestei metode este în Mobile Safari nu vor fi acceptate și în PC-ul funcționează numai după IE10.
Notă pentru a finaliza compatibilitate browser-ul, inclusiv IE11 vă rugăm să folosiți Autoprefixer
RĂSPUNS VECHI
Don't cred că de ea ca o soluție vechi, l's încă una dintre cele mai bune, dacă doriți doar un singur rând de elemente și se va lucra cu toate browserele.
Această metodă este folosită de CSS frate combinație, astfel încât să puteți manipula multe alte moduri, de asemenea, dar în cazul în care combinația este greșit, aceasta poate provoca, de asemenea, probleme.
Codul de mai jos va face truc. În această metodă, nu este nevoie de a da
margin: 0 -5px;
a#cutie
înveliș.O probă de lucru pentru tine:
Puteți folosi& > +
ca un selector pentru a emula un flex gap-
(pentru o singură linie):Dacă aveți nevoie pentru a sprijini flex ambalaj, puteți folosi un element de înveliș:
Las's spun dacă doriți să setați
10px
spațiu între elemente, puteți seta doar.element {margin-dreapta:10px;}
pentru toate, și resetați-o pe ultima.element:last-child {margin-right:0;}`Puteți folosi, de asemenea, general frate
~
sau viitoare+
frate selector pentru a seta marginea din stânga pe elementele cu excepția primul.articol ~ .element {margin-left:10px;}
sau de a folosi.articol:nu(:last-child) {margin-dreapta: 10px;}
Flexbox este atât de inteligent încât se recalculează automat și la fel de distribuie grila.
Dacă doriți să permiteți flex folie, consultați următorul exemplu.
Am găsit o soluție care se bazează pe general frate selector,
~
, și vă permite infinit de cuibărit.A se vedea acest cod pen pentru un exemplu de lucru
Practic, în interiorul coloanei de containere, fiecare copil care este precedat de un alt copil devine o marginea de sus. De asemenea, în fiecare container rând, fiecare copil care este precedată de o altă devine o marja de stânga.
Se deplasează pe la sawa's a răspunde, aici's o versiune ușor îmbunătățită care vă permite să setați un fix distanța dintre elementele fără marjă înconjurătoare.
http://jsfiddle.net/chris00/s52wmgtq/49/
De asemenea, este inclusă Opera "-webkit-flex" versiune.
O flex container cu -x (negativ) marja și flex elemente cu x (pozitiv) marja sau căptușeală ambele conduce la vizual dorit rezultat: Flex elemente au o fix decalaj de 2x numai între fiecare alte.
Acesta pare a fi pur și simplu o chestiune de preferință, dacă doriți să utilizați margin sau padding pe flex elemente.
În acest exemplu, flex elemente sunt scalate în mod dinamic, în scopul de a păstra fix decalaj:
Am folosit acest lucru pentru înfășurat și lățime fixă coloane. Cheia aici este
calc()
SCSS eșantion
Full Codepen eșantion
În cele din urmă se va adăuga un " gol " proprietatea de a flexbox. Pana atunci ai putea folosi CSS grid loc care are deja un " gol " de proprietate, și au doar un singur rând. Mai frumos decât de-a face cu marje.
Cu flexbox, crearea de jgheaburi este o durere, mai ales atunci când ambalajul este implicat.
Ai nevoie de a utiliza marjele negativ (așa cum se arată în întrebarea):
... sau modifica HTML (după cum se arată într-un alt răspuns):
... sau altceva.
În orice caz, ai nevoie de un urât hack pentru a face să funcționeze pentru că flexbox nu't oferi un "
-flex gap
" caracteristică (cel puțin pentru moment).Problema de jgheaburi, cu toate acestea, este simplu și ușor cu CSS Grid Layout.
Grila spec oferă proprietăți care creează spațiu între elementele de rețea, în timp ce ignoră spațiu între elemente și recipient. Aceste proprietăți sunt:
grid-coloana-gap
grid-rând-gap
grid-gap
(pe scurt, atât pentru proprietățile de mai sus)Recent, spec a fost actualizat pentru a se conforma cu CSS Box-Modul de Aliniere, care oferă un set de aliniere proprietăți pentru utilizarea pe toate modele de cutii. Astfel de proprietăți sunt acum:
coloana-gap
row-gap
Cu toate acestea, nu toate Grid-sprijinirea browsere suport pentru cele mai noi proprietăți, așa că am'll utiliza versiunile originale în demo-ul de mai jos.
De asemenea, dacă distanța este nevoie de între elemente și container,
padding
pe recipient functioneaza foarte bine (a se vedea cel de-al treilea exemplu, în demo-ul de mai jos).De la spec.:
Mai multe informații:
Folosind Flexbox în soluția mea am've justifica-conținut proprietate pentru elementul părinte (container) și am'am specificat marginile în interiorul flex-baza proprietăți ale elementelor. Verifica fragmentul de cod de mai jos:
Aici's my soluție, care nu't nevoie de stabilirea unor clase pe copilul elemente:
Utilizare:
Aceeași tehnică poate fi folosită pentru normal flex rânduri și coloane în plus față de inline exemplul dat mai sus, și a extins-cu clase de spațiere, altele decât 4px.
De ce nu-mi place acest lucru:
Aceasta folosește adiacente frate selector, pentru a da toate
.element
elemente, cu excepția primului, omarja de stânga
. Datorită flexbox, asta chiar rezultate în mod egal largă de elemente. Acest lucru ar putea fi, de asemenea, face cu elemente poziționate vertical șimargin-top
, desigur.De multe ori am folosi operatorul + pentru astfel de cazuri
Am găsit cel mai simplu mod de a face acest lucru este cu procente și doar permițându-marja de socoteala ta lățime
Acest lucru înseamnă că se încheie cu ceva de genul asta daca ai de unde, folosind exemplul tau
Nu înseamnă valorile tale sunt bazate pe lățimea deși care ar putea să nu fie bine pentru toată lumea.
CSS "golul" de proprietate:
Există o nou "gol" proprietate CSS pentru multi-coloană, flexbox, și machete de rețea care funcționează în unele browsere acum! (A se vedea Pot folosi link 1; link 2).
Ca de scris, acest lucru funcționează doar în Firefox, din păcate.
Columnify - Un solo de clasă pentru N coloane
Flexbox și SCSS
Flexbox și CSS
Joaca-te cu pe [JSFiddle][1].