Kolumna może CSS-fill być wykorzystane podczas rozdawania konkretnych kolumn?

głosy
1

Byłem niedawno próbuje użyć fajną niewykorzystane właściwość column-fill: balancegdy zauważyłem coś nieco dziwne. Niektóre kolumny ja dystrybuowane w ten sposób wyglądała naprawdę dziwne, ponieważ z ostatnich elementów wahaczami wzdłużnymi. Spodziewałem się czegoś takiego:

Test test test test

Test test test test

Test Test

Ale zamiast tego dostałem wynik takiego:

Test test test test

Test test test

Test test test

Z punktu widzenia projektanta, który nie będzie latać ... Wziąłem spojrzeć na spec w3 i zauważyłem oczekują ten wynik, ale nie oferują rozwiązania. To sprawia, że myślę, że chyba nie sposób jawnie użyć column-filldo osiągnięcia tego celu, ale zastanawiam się, czy istnieje jakiś ciekawy css sztuczka mogę użyć do osiągnięcia tego celu, albo obok column-filllub z gridlub flexboxzamiast.

Pamiętaj : są 4 kolumny z 3 rzędach, a nie 3 rzędy z 4 kolumn każdy. Znam tylko jeden rodzic siatki oczekiwałby wiersze pierwszy. Również flex-wrapz max-heightmiałoby podobny problem jak wyżej, i byłoby mniej elastyczne, ponieważ wymagałoby to wyraźny wzrost.

Zakładając następujący kod HTML, można to zrobić bez dodatkowych szablonów skryptów?

<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>
Utwórz 10/10/2019 o 00:37
źródło użytkownik
W innych językach...                            


2 odpowiedzi

głosy
1

Krótka odpowiedź brzmi: nie, to nie jest możliwe column-fill, i nie można używać niczego obok niego albo. Miałem przeczucie.

Według specyfikacji w3 , oczekują ten wynik, i wydaje się, że column-fillnieruchomość nie oferuje alternatywę, aby płynąć inaczej.

Jak podkreślił LGSon w komentarzach, można użyć flexbox zamiast . Można ustawić liczbę kolumn ze flexboxpo prostu za pomocą szerokość procentową na każdej pozycji. Kluczową różnicą jest to, flexboxdystrybuuje elementy inaczej niż column-fill, dokładnie w pożądany sposób określony w tej kwestii.

*{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>

Odpowiedział 10/10/2019 o 20:44
źródło użytkownik

głosy
0

Można użyć tego kodu

   
<!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>

Odpowiedział 10/10/2019 o 11:36
źródło użytkownik

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