CSS colonna di riempimento può essere utilizzato durante la distribuzione di colonne specifiche?

voti
1

Recentemente sono stato cercando di utilizzare la nifty proprietà sotto-utilizzato column-fill: balancequando ho notato qualcosa di un po 'strano. Alcune delle colonne che avevo distribuiti in questo modo sembrava davvero strano perché degli ultimi elementi finali. Mi aspettavo qualcosa di simile:

Test Test Test Test

Test Test Test Test

Test

Ma invece ho ottenuto un risultato come questo:

Test Test Test Test

Test Test Test

Test Test Test

Dal punto di vista di un progettista, che non sta andando a volare ... Ho preso uno sguardo al spec w3 e ho notato che si aspettano questo risultato, ma offrono alcuna soluzione per esso. Questo mi fa pensare probabilmente non c'è modo per utilizzare in modo esplicito column-fillper raggiungere questo obiettivo, ma mi chiedo se c'è qualche interessante trucco CSS posso usare per raggiungere questo obiettivo, sia al fianco column-fillo con grido flexboxal posto.

Ricordate : sono 4 colonne con 3 righe ciascuno, non 3 righe con 4 colonne. So solo una griglia di genitore si aspetta righe prima. Inoltre, flex-wrapcon un max-heightgarantiscano un problema simile come sopra, e sarebbe meno flessibile poiché richiederebbe un'altezza esplicito.

Supponendo che il seguente codice HTML, questo può essere fatto senza ulteriore scripting modello?

<div class=container>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
  <p class=item>Test</p>
</div>
È pubblicato 10/10/2019 alle 00:37
fonte dall'utente
In altre lingue...                            


2 risposte

voti
1

La risposta breve è no, questo non è possibile con column-fill, e non è possibile utilizzare qualsiasi cosa accanto ad esso sia. Ho avuto un presentimento.

Secondo le specifiche w3 , si aspettano questo risultato, e sembra la column-fillstruttura offre alcuna alternativa per farlo scorrere in modo diverso.

Come sottolineato da LGSon nei commenti, è possibile utilizzare flexbox invece . È possibile impostare il numero di colonne con flexbox, semplicemente utilizzando una larghezza percentuale su ogni elemento. La differenza principale è, flexboxdistribuisce gli elementi diverso rispetto column-fill, esattamente nel modo desiderato indicato in questa domanda.

*{margin: 0;}

.container {
  display: flex;
  flex-wrap: wrap;
}
.item {
  width: 25%;
}
<div class="container">
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
  <p class="item">Test</p>
</div>

Risposto il 10/10/2019 a 20:44
fonte dall'utente

voti
0

È possibile utilizzare questo codice

   
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
    <title>Hello, world!</title>
    <style type="text/css">
        body {
            margin: 0;
            padding: 0;
        }
        .main {
            -webkit-column-count: 4;
            -moz-column-count: 4;
            column-count: 4;
            height: auto;
            background-color: #eeeeee;
            padding: 15px;
        }        
        .item {
            -moz-column-fill: auto;
            column-fill: auto;
            background-color: #ffffff;
        }              
    </style>
</head>
<body>
    <div class="container">
        <div class="main">
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
            <p class="item">Test</p>
        </div>
    </div>
    <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</body>
</html>

Risposto il 10/10/2019 a 11:36
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more