]> BookStack Code Mirror - bookstack/commitdiff
Updated grid view to use CSS grid and flexbox
authorDan Brown <redacted>
Sun, 11 Feb 2018 11:36:51 +0000 (11:36 +0000)
committerDan Brown <redacted>
Sun, 11 Feb 2018 11:36:51 +0000 (11:36 +0000)
Provides a cleaner height-matched design.
Closes #701

app/Http/Controllers/BookController.php
resources/assets/sass/_grid.scss
resources/assets/sass/_lists.scss
resources/views/books/grid-item.blade.php
resources/views/books/index.blade.php

index decdfda49afe13182a7f6053917354af7225eb61..2c3946239cac3981e4abffab0fe5ae14b4ce2de9 100644 (file)
@@ -36,7 +36,7 @@ class BookController extends Controller
      */
     public function index()
     {
-        $books = $this->entityRepo->getAllPaginated('book', 20);
+        $books = $this->entityRepo->getAllPaginated('book', 18);
         $recents = $this->signedIn ? $this->entityRepo->getRecentlyViewed('book', 4, 0) : false;
         $popular = $this->entityRepo->getPopular('book', 4, 0);
         $new = $this->entityRepo->getRecentlyCreated('book', 4, 0);
index c145f4280969d74b2362487f2219e3e2f246ef4f..880c619d1308d2f8d0a7fbd917b28e8413879534 100644 (file)
@@ -175,6 +175,43 @@ div[class^="col-"] img {
   margin-right: -$-m;
 }
 
+.grid {
+  display: grid;
+  grid-column-gap: $-l;
+  grid-row-gap: $-l;
+  &.third {
+    grid-template-columns: 1fr 1fr 1fr;
+  }
+}
+
+.grid-card {
+  display: flex;
+  flex-direction: column;
+  border: 1px solid #ddd;
+  min-width: 100px;
+  .grid-card-content {
+    flex: 1;
+  }
+  .grid-card-content, .grid-card-footer {
+    padding: $-l;
+  }
+  .grid-card-content + .grid-card-footer {
+    padding-top: 0;
+  }
+}
+
+@include smaller-than($m) {
+  .grid.third {
+    grid-template-columns: 1fr 1fr;
+  }
+}
+
+@include smaller-than($s) {
+  .grid.third {
+    grid-template-columns: 1fr;
+  }
+}
+
 .float {
   float: left;
   &.right {
@@ -195,14 +232,6 @@ div[class^="col-"] img {
   display: inline-block;
 }
 
-@include larger-than(991px) {
-  .row.auto-clear .col-md-4:nth-child(3n+1){clear:left;}
-}
-
-@include smaller-than(992px) {
-  .row.auto-clear .col-xs-6:nth-child(2n+1){clear:left;}
-}
-
 .col-xs-1, .col-sm-1, .col-md-1, .col-lg-1, .col-xs-2, .col-sm-2, .col-md-2, .col-lg-2, .col-xs-3, .col-sm-3, .col-md-3, .col-lg-3, .col-xs-4, .col-sm-4, .col-md-4, .col-lg-4, .col-xs-5, .col-sm-5, .col-md-5, .col-lg-5, .col-xs-6, .col-sm-6, .col-md-6, .col-lg-6, .col-xs-7, .col-sm-7, .col-md-7, .col-lg-7, .col-xs-8, .col-sm-8, .col-md-8, .col-lg-8, .col-xs-9, .col-sm-9, .col-md-9, .col-lg-9, .col-xs-10, .col-sm-10, .col-md-10, .col-lg-10, .col-xs-11, .col-sm-11, .col-md-11, .col-lg-11, .col-xs-12, .col-sm-12, .col-md-12, .col-lg-12 {
   position: relative;
   min-height: 1px;
index 0496d794e4523d6c68657048b0b51f266326eaa8..604334415495d6d123452bdb0da1468bac0f82bd 100644 (file)
@@ -382,13 +382,15 @@ ul.pagination {
   position: relative;
   overflow: hidden;
   background: #F2F2F2;
-  border: 1px solid #ddd;
-  border-bottom: 0;
+  a {
+    display: block;
+  }
   img {
     display: block;
+    width: 100%;
     max-width: 100%;
     height: auto;
-    transition: all .5s ease;
+    transition: all .5s ease-in-out;
   }
   img:hover {
     transform: scale(1.15);
@@ -396,31 +398,33 @@ ul.pagination {
   }
 }
 
-.book-grid-content {
-  padding: 30px;
-  border: 1px solid #ddd;
+.book-grid-item .grid-card-content {
   border-top: 0;
   border-bottom-width: 2px;
   h2 {
+    width: 100%;
     font-size: 1.5em;
     margin: 0 0 10px;
   }
   h2 a {
     display: block;
+    width: 100%;
     line-height: 1.2;
     color: #009688;;
     text-decoration: none;
+    white-space: pre-wrap; /* css-3 */
+    word-wrap: break-word; /* Internet Explorer 5.5+ */
   }
   p {
     font-size: .85em;
-    margin: 0 0 10px;
+    margin: 0;
     line-height: 1.6em;
   }
+}
+
+.book-grid-item .grid-card-footer {
   p.small {
     font-size: .8em;
+    margin: 0;
   }
 }
-
-.book-grid-item {
-  margin-bottom : 20px;
-}
index cb2b447b07178a1df7e51b803a64d4540ac9a988..bb1914b908f9b3402b004cd2a6f0cd59d6b7f048 100644 (file)
@@ -1,18 +1,18 @@
-<div class="col-xs-12 col-sm-4 col-md-4 col-lg-4 book-grid-item"  data-entity-type="book" data-entity-id="{{$book->id}}">
+<div class="book-grid-item grid-card"  data-entity-type="book" data-entity-id="{{$book->id}}">
     <div class="featured-image-container">
         <a href="{{$book->getUrl()}}" title="{{$book->name}}">
-            <img width="1600" height="900" src="{{$book->getBookCover()}}" alt="{{$book->name}}">
+            <img src="{{$book->getBookCover()}}" alt="{{$book->name}}">
         </a>
     </div>
-    <div class="book-grid-content">
-        <h2><a href="{{$book->getUrl()}}" title="{{$book->name}}" > {{$book->getShortName(35)}} </a></h2>
+    <div class="grid-card-content">
+        <h2><a href="{{$book->getUrl()}}" title="{{$book->name}}">{{$book->getShortName(35)}}</a></h2>
         @if(isset($book->searchSnippet))
             <p >{!! $book->searchSnippet !!}</p>
         @else
             <p >{{ $book->getExcerpt(130) }}</p>
         @endif
-        <div >
-            <span>@include('partials.entity-meta', ['entity' => $book])</span>
-        </div>
+    </div>
+    <div class="grid-card-footer">
+        <span>@include('partials.entity-meta', ['entity' => $book])</span>
     </div>
 </div>
\ No newline at end of file
index 2ab819327fe58b1bbfecf5caf93b7f65ed6cb9f7..0d8a5fad96aa51d92b8f75ceb8b87ef2cf0dab1b 100644 (file)
                 @endforeach
                 {!! $books->render() !!}
             @else
-             <div class="row auto-clear">
+                 <div class="grid third">
                     @foreach($books as $key => $book)
                             @include('books/grid-item', ['book' => $book])
                     @endforeach
-                <div class="col-xs-12">
+                 </div>
+                <div>
                     {!! $books->render() !!}
                 </div>
-             </div>
             @endif
         @else
             <p class="text-muted">{{ trans('entities.books_empty') }}</p>
Morty Proxy This is a proxified and sanitized view of the page, visit original site.