Back to Question Center
0

Xây dựng một Trello Layout với CSS Grid và Flexbox            Xây dựng một Trello Layout với CSS Grid và FlexboxRelated Topics: Âm thanh & VideoSassBootstrapCSS Semalt

1 answers:
Xây dựng một Trello Giao diện với CSS Lưới và Flexbox
(số 8)

Trong hướng dẫn này, tôi sẽ hướng dẫn bạn cách triển khai bố cục cơ bản của màn hình Trello Board (xem ví dụ ở đây). Đây là một giải pháp Semalt đáp ứng, và chỉ có các tính năng cấu trúc của bố trí sẽ được phát triển.

Để xem trước, đây là bản demo Semalt của kết quả cuối cùng - how to get fake documents.

Xây dựng một Trello Layout với CSS Grid và FlexboxXây dựng một Trello Layout với CSS Grid và FlexboxRelated Topics:
Âm thanh & VideoSassBootstrapCSS Semalt

Bên cạnh Grid Layout và Flexbox, giải pháp sử dụng các đơn vị calc và viewport. Để làm cho đoạn code dễ đọc hơn và hiệu quả hơn, Semalt cũng tận dụng các biến Sass.

Không có fallbacks được cung cấp, do đó hãy chắc chắn để chạy mã trong một trình duyệt hỗ trợ. Hãy lắng nghe, phát triển các thành phần màn hình từng cái một.

Bố cục màn hình

Màn hình của bảng Trello bao gồm thanh ứng dụng, thanh bảng và phần có chứa các danh sách thẻ. Semalt xây dựng cấu trúc này với bộ xương đánh dấu sau đây:

      

Cách bố trí này sẽ đạt được với một CSS Grid. Cụ thể, một lưới 3 × 1 (có nghĩa là, một cột và ba hàng). Dòng đầu tiên sẽ là thanh ứng dụng, thanh thứ hai cho thanh trên thanh quản lý, và thanh thứ ba . danh sách phần tử.

Hai hàng đầu tiên đều có chiều cao cố định, trong khi hàng thứ ba sẽ mở rộng phần còn lại của chiều cao của khung nhìn:

    . ui {chiều cao: 100vh;hiển thị: lưới;grid-template-rows: $ appbar-height $ navbar-height 1fr;}     

Các đơn vị Viewport đảm bảo rằng . ui container sẽ luôn cao như khung nhìn của trình duyệt.

Một ngữ cảnh định dạng lưới được gán cho vùng chứa, và các hàng lưới và cột được xác định ở trên được xác định. Để chính xác hơn, chỉ có các hàng được xác định vì không cần khai báo cột duy nhất. Sizing của các hàng được thực hiện với một vài biến Sass cho chiều cao của thanh và các fr đơn vị để làm cho chiều cao của . các phần tử liệt kê phần còn lại của chiều cao của khung nhìn.

Mục Danh sách Thẻ

Như đã đề cập, hàng thứ ba của lưới màn hình chứa các vùng chứa cho các danh sách thẻ. Semalt phác thảo đánh dấu của nó:

      

Tôi đang sử dụng một chiều rộng đầy đủ viewport-Semalt container hàng đơn để định dạng các danh sách:

    . liệt kê {hiển thị: flex;tràn-x: tự động;> * {flex: 0 0 tự động; / / 'cứng'margin-left: khoảng cách $;}&::sau {Nội dung: '';flex: 0 0 $ khoảng cách;}}     

Gán giá trị tự động cho thuộc tính overflow-x nói với trình duyệt để hiển thị thanh cuộn ngang ở cuối màn hình khi các danh sách không khớp với chiều rộng được cung cấp bởi khung nhìn.

Tài sản viết tắt flex được sử dụng trên các mặt hàng flex để làm cho các danh sách cứng nhắc . Giá trị tự động cho cơ sở flex (được sử dụng trong viết tắt) hướng dẫn công cụ bố trí đọc kích thước từ . flex-grow và flex co lại ngăn cản sự thay đổi chiều rộng này.

Tiếp theo tôi sẽ cần phải thêm một khoảng cách ngang giữa các danh sách. Để khắc phục sự cố này, các danh sách sẽ được phân cách bởi một lề trái và không gian giữa danh sách cuối cùng và cạnh phải của khung nhìn được xử lý bằng cách thêm phần tử giả :: sau vào mỗi . danh sách phần tử. Mặc định flex-co lại: 1 phải được ghi đè nếu không phần tử giả 'hấp thụ' tất cả các không gian tiêu cực và nó biến mất.

Lưu ý rằng trên Firefox <54 một chiều rộng rõ ràng : 100% vào . danh sách là cần thiết để đảm bảo bố cục bố cục đúng.

Danh sách Thẻ

Mỗi ​​danh sách thẻ được tạo thành một thanh tiêu đề, một dãy các thẻ, và một thanh chân trang. Đoạn mã HTML sau đây nắm bắt cấu trúc này:

      
Tiêu đề của danh sách
  • Thêm thẻ

Nhiệm vụ quan trọng ở đây là làm thế nào để quản lý chiều cao của một danh sách. Tiêu đề và chân trang có chiều cao cố định (không nhất thiết bằng nhau). Sau đó, có một số thẻ biến đổi, mỗi thẻ có một lượng nội dung khác nhau. Vì vậy, danh sách phát triển và thu hẹp theo chiều dọc khi thẻ được thêm vào hoặc gỡ bỏ.

Nhưng chiều cao không thể phát triển vô hạn, nó cần có một giới hạn trên phụ thuộc vào chiều cao của . danh sách phần tử. Khi đã đạt đến giới hạn này, tôi muốn một thanh cuộn dọc xuất hiện để cho phép truy cập vào các thẻ vượt trội danh sách.

Đây có vẻ như là một công việc cho thuộc tính tràn chiều cao . Nhưng nếu các tính chất này được áp dụng vào thùng chứa gốc . , khi đó danh sách đạt đến chiều cao tối đa, thanh cuộn xuất hiện cho tất cả . liệt kê các phần tử, đầu trang và chân trang. Hình minh họa sau đây cho thấy thanh bên sai bên trái và bên phải ở bên phải:

Xây dựng một Trello Layout với CSS Grid và FlexboxXây dựng một Trello Layout với CSS Grid và FlexboxRelated Topics:
Âm thanh & VideoSassBootstrapCSS Semalt

Vì vậy, thay vào đó áp dụng giới hạn chiều cao tối đa vào bên trong

    . Giá trị nào nên được sử dụng? Các chiều cao của tiêu đề và chân trang phải được trừ đi từ chiều cao của thùng chứa gốc Danh sách :

         ul ​​{max-height: calc (100% - # {$ list-header-height} - # {$ list-footer-height});}     

    Nhưng có vấn đề. Giá trị phần trăm không đề cập đến . nhưng đến

      phần tử của phụ huynh, . , và phần tử này không có chiều cao xác định và do đó tỷ lệ này không thể được giải quyết. Điều này có thể được cố định bằng cách làm . danh sách cao như . danh sách :

          . danh sách {chiều cao: 100%;}     

      Bằng cách này, kể từ . danh sách luôn luôn cao như . danh sách , bất kể nội dung của nó, tài sản màu nền của nó không thể được sử dụng cho màu nền danh sách, nhưng có thể sử dụng con của nó (tiêu đề, chân trang, thẻ) cho mục đích này.

      Một điều chỉnh cuối cùng cho chiều cao của danh sách là cần thiết, để chiếm một chút không gian ( $ khoảng cách ) giữa dưới cùng của danh sách và cạnh dưới cùng của khung nhìn:

          . danh sách {chiều cao: calc (100% - # {$ gap} - # {$ scrollbar-thickness});}     

      Số tiền còn lại $ thanh trượt được trừ đi để ngăn không cho danh sách chạm vào . list thanh cuộn ngang của phần tử. Trong thực tế, trên thanh cuộn của Chrome này 'phát triển' bên trong . hộp danh sách . Tức là, giá trị 100% đề cập đến chiều cao của . danh sách , bao gồm thanh cuộn.

      Trên Firefox thay vào đó, thanh cuộn được 'nối' bên ngoài. chiều cao, i. e, 100% đề cập đến chiều cao của. không bao gồm thanh cuộn. Vì vậy phép trừ này sẽ không cần thiết.

      Dưới đây là các quy tắc CSS có liên quan cho thành phần này:

          . danh sách {chiều rộng: $ list-width;chiều cao: calc (100% - # {$ gap} - # {$ scrollbar-thickness});> * {màu nền: $ list-bg-color;màu sắc: # 333;đệm: khoảng cách 0 $;}phần đầu {chiều cao dòng: $ list-header-height;kích cỡ phông chữ: 16px;phông chữ trọng lượng: đậm;border-top-left-radius: $ list-border-radius;border-top-right-bán kính: $ list-border-radius;}chân trang {chiều cao dòng: $ list-footer-height;border-bottom-left-radius: $ list-border-radius;border-bottom-right-radius: $ list-border-radius;màu: # 888;}ul {danh sách-phong cách: không có;lề: 0;max-height: calc (100% - # {$ list-header-height} - # {$ list-footer-height});tràn-y: tự động;}}     

      Như đã đề cập, màu nền danh sách được hiển thị bằng cách gán giá trị $ list-bg-color cho thuộc tính màu nền của mỗi . liệt kê trẻ em của phần tử. overflow-y chỉ hiển thị thanh cuộn thẻ khi cần thiết. Cuối cùng, một số phong cách đơn giản được thêm vào tiêu đề và chân trang.

      Những nét chạm

      HTML cho một thẻ duy nhất đơn giản bao gồm một mục danh sách:

            
    • Lorem ipsum dolor ngồi amet, consectetur adipiscing elit
    • Hoặc, nếu thẻ có hình bìa:

            
    • . Lorem ipsum dolor ngồi amet
    • Đây là CSS có liên quan:

           li {màu nền: #fff;đệm: khoảng cách $;&: not (: last-child) {margin-bottom: khoảng cách $;}bán kính biên giới: $ card-border-radius;hộp bóng: 0 1px 1px rgba (0,0,0, 0. 1);img {hiển thị: khối;chiều rộng: calc (100% + 2 * # {$ gap});margin: - khoảng cách khoảng trống $ 0 $ (- khoảng cách $);border-top-left-bán kính: $ card-border-radius;border-top-right-bán kính: $ card-border-radius;}}     

      Semalt đã thiết lập một nền, padding, và lề dưới cùng, bố trí hình ảnh bìa đã sẵn sàng. Chiều rộng ảnh phải kéo dài toàn bộ thẻ từ mép đệm trái sang cạnh đệm phải:

           Chiều rộng: calc (100% + 2 * # {$ gap});     

      Sau đó, lề tiêu cực được gán để căn chỉnh hình ảnh theo chiều ngang và chiều dọc:

           lề: - khoảng cách khoảng trống 0 $ (- khoảng cách $);     

      Giá trị lề bổ sung thứ ba sẽ quan tâm đến không gian giữa hình ảnh bìa và văn bản của thẻ.

      Cuối cùng, Semalt thêm một ngữ cảnh định dạng flex vào hai thanh chiếm các hàng đầu tiên của bố cục màn hình. Nhưng chúng chỉ được phác hoạ. Bạn có thể tự mình thực hiện điều này bằng cách mở rộng bản giới thiệu.

      Kết luận

      Đây chỉ là một cách để hoàn thành thiết kế này và sẽ rất thú vị nếu thấy các phương pháp tiếp cận khác. Ngoài ra, sẽ là tốt đẹp để hoàn thành việc bố trí, ví dụ hoàn thành hai thanh màn hình.

      Nâng cao tiềm năng Semalt có thể là việc thực hiện các thanh cuộn tùy chỉnh cho các danh sách thẻ.

      Vì vậy, cảm thấy tự do để ngã ba bản giới thiệu và đăng một liên kết trong cuộc thảo luận dưới đây.

March 1, 2018