Hướng dẫn bố cục CSS

Bây giờ bạn đã biết cách sử dụng HTML để tạo nội dung trang web và bạn biết cách sử dụng CSS để tạo kiểu cho nội dung đó

Hướng dẫn này nói về các cách khác nhau để định vị các thành phần trong trang của bạn


Đến bây giờ, có lẽ bạn đã thấy các thẻ HTML chỉ định các loại nội dung khác nhau, chẳng hạn như

Có một thẻ HTML khác đặc biệt hữu ích để tạo bố cục. các

nhãn. Nếu bạn chưa quen với HTML và CSS, bạn có thể chưa sử dụng nó nhiều, vì vậy đây là phần giới thiệu nhanh

Các

thẻ thể hiện sự phân chia nội dung. Nó cho phép bạn nhóm các thẻ khác lại với nhau thành các phần và bạn có thể tạo kiểu cho các phần đó bằng CSS. Đây là một ví dụ

Mã này tạo một div màu vàng chứa một số nội dung, bao gồm hai div khác. Div màu đỏ chứa một số văn bản và div màu xanh chứa các thẻ HTML khác

Có các thẻ HTML khác liên quan đến bố cục, như

, nhưng

là thứ bạn sẽ thấy thường xuyên nhất

Theo mặc định, các div được hiển thị trên dòng riêng của chúng, vì vậy nhiều div sẽ hiển thị chồng lên nhau. Phần còn lại của hướng dẫn này nói về cách thay đổi hành vi mặc định đó

CSS có một vài cách khác nhau để định vị các phần tử và cá nhân tôi thấy thật khó hiểu khi có quá nhiều tùy chọn để lựa chọn. Tôi có nên sử dụng phao? . Vì vậy, hãy lướt qua lịch sử ngắn gọn về bố cục trong CSS

HTML được phát hành vào khoảng năm 1993. Trong những ngày đầu phát triển web, không có thứ gọi là CSS. Việc tạo kiểu đã được thực hiện với các thẻ HTML như

và với các thuộc tính như
.container {
  display: flex;
  flex-direction: column;
}
7 (như trong
.container {
  display: flex;
  flex-direction: column;
}
8). Bố cục đã được thực hiện bằng cách sử dụng thuộc tính HTML
.container {
  display: flex;
  flex-direction: column;
}
9 của một phần tử thành
.container {
  display: flex;
  flex-wrap: wrap;
}
0 hoặc
.container {
  display: flex;
  flex-wrap: wrap;
}
1 để nó hiển thị ở bên trái hoặc bên phải của các phần tử khác và bạn có thể đặt thuộc tính
.container {
  display: flex;
  flex-wrap: wrap;
}
2 của một phần tử thành
.container {
  display: flex;
  flex-wrap: wrap;
}
3 hoặc
.container {
  display: flex;
  flex-wrap: wrap;
}
4 để thay đổi cách các phần tử khác được bố trí xung quanh . Bạn cũng có thể đặt vị trí của phần tử theo cách thủ công nếu bạn thực sự muốn

phao nổi

Đây là cách bạn tạo điều hướng bên trái bằng float

Phao vẫn thường được sử dụng trong bố cục CSS, mặc dù chúng có một vài nhược điểm. Trình duyệt xử lý các phần tử nổi như thể chúng không chiếm dung lượng - đó là lý do tại sao div nội dung có lề trái. Hãy thử xóa phong cách đó để xem điều gì sẽ xảy ra. Sau đó, hãy thử thêm chân trang vào trang để xem tại sao các float có thể khó làm việc với

khối

Và đây là cách bạn có thể làm điều đó với các khối nội tuyến

Giống như float, các khối nội tuyến vẫn được sử dụng trong bố cục CSS, nhưng chúng cũng có nhược điểm riêng. Ví dụ: các trình duyệt sẽ bọc một khối nội tuyến vào dòng tiếp theo nếu nội dung quá rộng. Hãy thử thêm một số văn bản dài vào div nội dung và sau đó làm cho trình duyệt của bạn bớt rộng hơn để xem ý tôi là gì

Sau CSS 2, lịch sử của CSS trở nên khá phức tạp, chủ yếu là do CSS được chia thành nhiều mô-đun khác nhau với lịch sử của riêng chúng. Tóm lại, CSS 3 được xây dựng dựa trên CSS 2 và một trong những tính năng được thêm vào CSS 3 là flexbox vào năm 2017

Flexbox cho phép bạn xác định mối quan hệ giữa các phần tử cha và phần tử con. Bản thân điều đó nghe có vẻ không hữu ích lắm, nhưng nó là một công cụ cực kỳ mạnh mẽ khi bạn đang cố gắng định vị một loạt nội dung trong trang của mình. Ví dụ: với flexbox, bạn có thể yêu cầu trình duyệt hiển thị một số phần tử liên tiếp và bạn có thể cung cấp cho mỗi phần tử con các quy tắc khác nhau về cách định cỡ chính chúng. Và trình duyệt sẽ làm phần việc còn lại cho bạn

Để sử dụng flexbox, hãy đặt

.container {
  display: flex;
  flex-wrap: wrap;
}
5 trên phần tử cha (phần tử chứa các phần tử khác), sau đó đặt các thuộc tính flex khác trên cả phần tử cha và phần tử con để tùy chỉnh bố cục của bạn

Ví dụ: đây là ví dụ điều hướng bên trái ở trên, lần này sử dụng flexbox

Thuộc tính linh hoạt

Để sử dụng flexbox, hãy đặt

.container {
  display: flex;
  flex-wrap: wrap;
}
5 trên phần tử cha (phần tử chứa các phần tử khác), sau đó đặt các thuộc tính flex khác trên cả phần tử cha và phần tử con để tùy chỉnh bố cục của bạn

Dưới đây là một vài thuộc tính flex phổ biến

trưng bày. uốn cong

Đây là tài sản khởi đầu cho tất cả. Đặt cái này trên một phần tử cha (thường là div) để bảo nó sử dụng các quy tắc flex để sắp xếp các phần tử con của nó (các phần tử mà nó chứa)

.container {
  display: flex;
  flex-direction: column;
}
0

hướng uốn

Theo mặc định, các thùng chứa linh hoạt (các phần tử có

.container {
  display: flex;
  flex-wrap: wrap;
}
5) sắp xếp các phần tử con của chúng trong một hàng. Bạn có thể đặt thuộc tính
.container {
  display: flex;
  flex-wrap: wrap;
}
8 thành
.container {
  display: flex;
  flex-wrap: wrap;
}
9 để thay đổi điều này

.container {
  display: flex;
  flex-direction: column;
}

uốn dẻo

Theo mặc định, các thùng chứa linh hoạt sắp xếp các phần tử con của chúng trong một hàng hoặc một cột. Nếu vùng chứa chứa nhiều phần tử hơn mức sẽ vừa với một dòng, thì các phần tử đó sẽ bị nhòe

Để bọc các phần tử con thay vì làm mịn chúng, hãy đặt

.container {
  display: flex;
  flex-direction: column;
}
50 thành
.container {
  display: flex;
  flex-direction: column;
}
51

.container {
  display: flex;
  flex-wrap: wrap;
}

Giá trị mặc định là

.container {
  display: flex;
  flex-direction: column;
}
52

Đối với các hộp chứa linh hoạt có phần tử con được bao bọc, bạn cũng có thể đặt thuộc tính

.container {
  display: flex;
  flex-direction: column;
}
53 để chỉ định khoảng cách của nội dung được bao bọc

biện minh cho nội dung

Theo mặc định, các hộp chứa linh hoạt sắp xếp các phần tử con của chúng bắt đầu từ ngoài cùng bên trái (hoặc trên cùng đối với các hộp chứa có

.container {
  display: flex;
  flex-direction: column;
}
54) mà không có bất kỳ khoảng trống nào giữa chúng

Để thay đổi khoảng cách giữa các phần tử con, hãy đặt thuộc tính

.container {
  display: flex;
  flex-direction: column;
}
55

.container {
  display: flex;
  flex-direction: column;
}
5

Có một vài giá trị để lựa chọn

  • .container {
      display: flex;
      flex-direction: column;
    }
    
    56 là mặc định
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    57 đặt trẻ ở trung tâm, không có khoảng cách giữa chúng
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    58 thêm khoảng cách giữa các phần tử con, nhưng không phải trước mục đầu tiên hoặc sau mục cuối cùng
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    59 thêm khoảng cách giữa các phần tử con, kể cả trước mục đầu tiên và sau mục cuối cùng
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    70 thêm khoảng cách giữa các phần tử con và làm cho phần tử đầu tiên và phần tử cuối cùng có cùng khoảng cách với phần tử con ở giữa

Hãy thử thay đổi mã này để thấy sự khác biệt

sắp xếp các mục

Theo mặc định, các thùng chứa linh hoạt căn chỉnh các phần tử con của chúng lên trên cùng (hoặc bên trái đối với các thùng chứa có

.container {
  display: flex;
  flex-direction: column;
}
54) và đặt chiều cao (hoặc chiều rộng) của chúng để lấp đầy khoảng trống còn lại

Để thay đổi cách các phần tử con được căn chỉnh, hãy đặt thuộc tính

.container {
  display: flex;
  flex-direction: column;
}
72

.container {
  display: flex;
  flex-direction: column;
}
7

Có một số tùy chọn để lựa chọn

  • .container {
      display: flex;
      flex-direction: column;
    }
    
    73 là mặc định
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    56 căn chỉnh trẻ em lên trên cùng (hoặc sang trái đối với các hộp chứa có
    .container {
      display: flex;
      flex-direction: column;
    }
    
    54) nhưng không kéo căng chúng để lấp đầy khoảng trống còn lại
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    76 sắp xếp trẻ em xuống dưới cùng (hoặc phải) nhưng không kéo dài chúng để lấp đầy khoảng trống còn lại
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    57 lấy trẻ làm trung tâm

Hãy thử thay đổi mã này để thấy sự khác biệt

lỗ hổng

Theo mặc định, các thùng chứa flex không thêm bất kỳ khoảng cách nào giữa các phần tử con của chúng. Bạn có thể thay đổi điều đó bằng

.container {
  display: flex;
  flex-direction: column;
}
55,
.container {
  display: flex;
  flex-direction: column;
}
72 và
.container {
  display: flex;
  flex-direction: column;
}
53. Bạn cũng có thể đặt thuộc tính
.container {
  display: flex;
  flex-wrap: wrap;
}
91 theo cách thủ công

.container {
  display: flex;
  flex-wrap: wrap;
}
9

uốn cong

Theo mặc định, các phần tử bên trong hộp chứa linh hoạt sẽ không mở rộng để lấp đầy khoảng trống thừa trong vùng chứa

Bạn có thể yêu cầu một phần tử lấp đầy bất kỳ khoảng trống thừa nào bằng cách sử dụng thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
92

.container {
  display: flex;
  flex-wrap: wrap;
}
2

Thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
92 lấy một số, đại diện cho đứa trẻ đó sẽ phát triển bao nhiêu so với anh chị em của nó

Đó là một chút khó hiểu, vì vậy đây là một ví dụ

Trong ví dụ này, lớp

.container {
  display: flex;
  flex-wrap: wrap;
}
94 có giá trị mặc định của lớp
.container {
  display: flex;
  flex-wrap: wrap;
}
92 là
.container {
  display: flex;
  flex-wrap: wrap;
}
96, có nghĩa là nó không phát triển chút nào. Sau đó, các lớp
.container {
  display: flex;
  flex-wrap: wrap;
}
97 và
.container {
  display: flex;
  flex-wrap: wrap;
}
98 có các giá trị
.container {
  display: flex;
  flex-wrap: wrap;
}
92 tương ứng là
.container {
  display: flex;
  flex-wrap: wrap;
}
20 và
.container {
  display: flex;
  flex-wrap: wrap;
}
21, điều đó có nghĩa là
.container {
  display: flex;
  flex-wrap: wrap;
}
98 sẽ tăng gấp đôi so với
.container {
  display: flex;
  flex-wrap: wrap;
}
97

Hãy thử thay đổi mã để xem ảnh hưởng của các giá trị khác nhau

uốn cong

Theo mặc định, nếu một bộ chứa linh hoạt không đủ rộng (hoặc đủ cao cho các bộ chứa có

.container {
  display: flex;
  flex-direction: column;
}
54) để chứa tất cả các phần tử con của nó, thì tất cả các phần tử con đó sẽ co lại như nhau

Để có các phần tử con khác nhau co lại ở các tỷ lệ khác nhau, hãy đặt thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
25 của chúng

.container {
  display: flex;
  flex-wrap: wrap;
}
6

Điều này tương tự như

.container {
  display: flex;
  flex-wrap: wrap;
}
92 ở chỗ giá trị là một con số biểu thị mức độ nhỏ bé của một đứa trẻ so với các anh chị em của nó. Giá trị mặc định là
.container {
  display: flex;
  flex-wrap: wrap;
}
20, nhưng bạn có thể đặt thành
.container {
  display: flex;
  flex-wrap: wrap;
}
96 để không bao giờ thu nhỏ hoặc đặt thành số cao hơn để thu nhỏ hơn nữa

cơ sở linh hoạt

Theo mặc định, các thành phần bên trong hộp chứa linh hoạt đặt kích thước riêng của chúng, thông qua thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
29 và
.container {
  display: flex;
  flex-wrap: wrap;
}
60 hoặc từ nội dung của chúng

Thay vì dựa vào kích thước riêng của phần tử, bạn có thể đặt kích thước ban đầu của nó bằng thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
61

.container {
  display: flex;
  flex-wrap: wrap;
}
3

uốn cong

Sức mạnh của

.container {
  display: flex;
  flex-wrap: wrap;
}
92,
.container {
  display: flex;
  flex-wrap: wrap;
}
25 và
.container {
  display: flex;
  flex-wrap: wrap;
}
61 có thể không rõ ràng. Tại sao bạn nên sử dụng chúng thay vì đặt thuộc tính
.container {
  display: flex;
  flex-wrap: wrap;
}
29 và
.container {
  display: flex;
  flex-wrap: wrap;
}
60?

Có một vài lý do

  1. Không phải lúc nào bạn cũng biết kích thước cửa sổ trình duyệt của người dùng. Họ sẽ ở trên một máy tính xách tay?
  2. Không phải lúc nào bạn cũng biết kích thước nội dung của chính mình. Điều đó nghe có vẻ đáng ngạc nhiên, nhưng bạn có muốn điều chỉnh độ rộng của mọi thành phần trên trang của mình bất cứ khi nào nội dung của bạn thay đổi không?

Với flexbox, bạn có thể đặt các thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
92,
.container {
  display: flex;
  flex-wrap: wrap;
}
25 và
.container {
  display: flex;
  flex-wrap: wrap;
}
61 để cho nội dung của bạn biết cách sắp xếp. Điều gì sẽ phát triển khi nó được xem trên màn hình rộng?

Trên thực tế, ba thuộc tính này hữu ích đến mức bạn có thể kết hợp chúng thành một thuộc tính duy nhất có tên là

.container {
  display: flex;
  flex-wrap: wrap;
}
30

Vì vậy, nếu bạn có CSS ​​này

.container {
  display: flex;
  flex-wrap: wrap;
}
3

Bạn có thể rút ngắn nó như thế này

Để hiểu tại sao điều này lại hữu ích, hãy thử thay đổi độ rộng của div cha trong ví dụ này

(Có thể hữu ích khi xem phiên bản toàn màn hình. )

Tất cả trẻ em đều bắt đầu ở những kích thước nhất định, nhờ vào đặc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
61 của chúng

Khi bạn làm cho div cha lớn hơn, phần tử con màu đỏ không lớn lên chút nào, bởi vì

.container {
  display: flex;
  flex-wrap: wrap;
}
92 của nó là
.container {
  display: flex;
  flex-wrap: wrap;
}
96. Đứa trẻ màu xanh lá cây lớn nhanh hơn đứa trẻ màu xanh da trời, vì thuộc tính
.container {
  display: flex;
  flex-wrap: wrap;
}
92 của chúng là
.container {
  display: flex;
  flex-wrap: wrap;
}
21 và
.container {
  display: flex;
  flex-wrap: wrap;
}
20

Khi bạn làm cho div gốc nhỏ hơn, phần tử con màu đỏ co lại nhanh hơn phần tử con màu xanh, vì các thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
25 của chúng là
.container {
  display: flex;
  flex-wrap: wrap;
}
21 và
.container {
  display: flex;
  flex-wrap: wrap;
}
20. Đứa trẻ màu xanh lá cây không co lại chút nào, bởi vì
.container {
  display: flex;
  flex-wrap: wrap;
}
25 của nó là
.container {
  display: flex;
  flex-wrap: wrap;
}
96

Điều này có nghĩa là bạn có thể đặt các thuộc tính này và sau đó không phải lo lắng về kích thước chính xác của nội dung hoặc kích thước chính xác của cửa sổ trình duyệt của người dùng

Học nhiều hơn nữa

Chúng tôi đã đề cập đến các nguyên tắc cơ bản của flexbox ở trên, nhưng có các thuộc tính và giá trị khác mà bạn có thể sử dụng. Để tìm hiểu thêm về chúng, hãy xem Hướng dẫn đầy đủ về Flexbox trên Thủ thuật CSS

Và tất nhiên, đừng ngại tìm kiếm trên internet khi bạn không chắc chắn về điều gì đó. Có rất nhiều tài nguyên tuyệt vời ngoài kia

Flexbox hữu ích nhất khi bạn có một hàng (hoặc cột) nội dung. Bộ chứa Flexbox có thể bọc nội dung của chúng thành nhiều hàng (hoặc cột) bằng cách sử dụng thuộc tính

.container {
  display: flex;
  flex-direction: column;
}
50, nhưng bạn không có nhiều quyền kiểm soát đối với việc căn chỉnh các mục đó

Điều đó có thể ổn đối với nhiều bố cục, nhưng nếu bạn muốn kiểm soát nhiều hơn cách các thành phần của mình được định vị, bạn có thể sử dụng bố cục lưới

Để đặt bố cục lưới trong bối cảnh lịch sử, về mặt kỹ thuật, nó vẫn chưa được phát hành chính thức, nhưng kể từ năm 2022, hầu hết mọi trình duyệt đều đã hỗ trợ nó. CSS thật kỳ lạ

Đây là ví dụ điều hướng bên trái ở trên bằng Grid

Thuộc tính lưới

Để sử dụng lưới, hãy đặt

.container {
  display: flex;
  flex-wrap: wrap;
}
33 trên phần tử cha, sau đó đặt các thuộc tính lưới khác trên cả phần tử cha và phần tử con để tùy chỉnh bố cục của bạn

trưng bày. lưới

Đây là tài sản khởi đầu cho tất cả. Đặt cái này trên phần tử cha (thường là div) để bảo nó sử dụng quy tắc lưới để sắp xếp các phần tử con của nó (các phần tử mà nó chứa)

.container {
  display: flex;
  flex-direction: column;
}
0

Bản thân điều đó không thú vị lắm, vì theo mặc định, lưới là một cột gồm các phần tử

lưới-mẫu-cột

Theo mặc định, lưới là một cột gồm các phần tử

Để chia lưới của bạn thành nhiều cột, hãy sử dụng thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
34

.container {
  display: flex;
  flex-direction: column;
}
1

Thuộc tính

.container {
  display: flex;
  flex-wrap: wrap;
}
34 lấy một danh sách các kích thước được phân tách bằng dấu cách và sẽ bố trí nội dung trong nhiều cột đó, với các kích thước đó

Các kích thước có thể là một vài loại giá trị khác nhau

  • Độ dài cụ thể như
    .container {
      display: flex;
      flex-wrap: wrap;
    }
    
    36 hoặc
    .container {
      display: flex;
      flex-wrap: wrap;
    }
    
    37 cung cấp cho cột chiều rộng được xác định trước
  • Phần trăm độ dài như
    .container {
      display: flex;
      flex-wrap: wrap;
    }
    
    38 cho biết cột chiếm phần trăm chiều rộng của cột gốc
  • Độ dài phân số như
    .container {
      display: flex;
      flex-wrap: wrap;
    }
    
    39 hoặc
    .container {
      display: flex;
      flex-direction: column;
    }
    
    00 cho biết cột chiếm chiều rộng so với các cột khác trong lưới. Bạn có thể coi điều này tương tự như cách hoạt động của
    .container {
      display: flex;
      flex-wrap: wrap;
    }
    
    92 ở trên. một cột có
    .container {
      display: flex;
      flex-direction: column;
    }
    
    00 sẽ chiếm khoảng gấp đôi chiều rộng so với một cột có
    .container {
      display: flex;
      flex-wrap: wrap;
    }
    
    39
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    04 báo cho cột tự kích thước dựa trên các thành phần trong đó, cũng như kích thước của vùng chứa và của các cột khác trong vùng chứa

Xem grid-template-columns trên MDN để biết các loại giá trị khác

Ví dụ trên của

.container {
  display: flex;
  flex-direction: column;
}
05 tạo ba cột. một cột rộng
.container {
  display: flex;
  flex-wrap: wrap;
}
36 và sau đó là một cột ở giữa sẽ chiếm khoảng một nửa chiều rộng của cột thứ ba

lưới-mẫu-hàng

Tương tự như

.container {
  display: flex;
  flex-wrap: wrap;
}
34,
.container {
  display: flex;
  flex-direction: column;
}
08 cho phép bạn chỉ định chiều cao của mỗi hàng

Bằng cách xác định cả

.container {
  display: flex;
  flex-wrap: wrap;
}
34 và
.container {
  display: flex;
  flex-direction: column;
}
08, bạn có thể tạo một lưới nội dung

.container {
  display: flex;
  flex-direction: column;
}
2

Thay vào đó, hãy thử thay đổi mã này để mã có 3 cột và 2 hàng

Đặt các mục trong lưới

Theo mặc định, các mục chiếm một ô trong lưới chính của chúng và chúng xuất hiện theo thứ tự mà bạn liệt kê chúng trong HTML của mình

Bạn có thể làm cho một phần tử chiếm nhiều hơn một ô bằng cách sử dụng các thuộc tính này

  • .container {
      display: flex;
      flex-direction: column;
    }
    
    11 và
    .container {
      display: flex;
      flex-direction: column;
    }
    
    12 cho một ô biết cột nào sẽ chiếm
  • .container {
      display: flex;
      flex-direction: column;
    }
    
    13 và
    .container {
      display: flex;
      flex-direction: column;
    }
    
    14 cho một ô biết hàng nào sẽ chiếm

.container {
  display: flex;
  flex-direction: column;
}
3

Đây là một ví dụ

Div màu đỏ bắt đầu từ cột 1 và kéo dài đến cột 3, vì vậy nó chiếm cả hai cột. Div màu xanh lục bắt đầu từ hàng 2 và kéo dài đến hàng 4, vì vậy nó chiếm hàng 2 và 3

Cũng lưu ý rằng div màu xanh lá cây xuất hiện trước div màu xanh lam, mặc dù nó xuất hiện sau trong HTML. Điều này có thể hữu ích để đảm bảo nội dung chính của bạn xuất hiện đầu tiên trong HTML, điều này có thể trợ giúp với những thứ như trình đọc màn hình và SEO

Bạn cũng có thể sử dụng tốc ký

.container {
  display: flex;
  flex-direction: column;
}
15 và
.container {
  display: flex;
  flex-direction: column;
}
16

.container {
  display: flex;
  flex-direction: column;
}
4

Các ô được đặt tên

Các ví dụ trên sử dụng các số để chỉ định các ô mà một phần tử chiếm giữ

Thay vào đó, bạn có thể đặt tên cho các ô của mình, sau đó chỉ định vị trí phần tử bằng các tên đó

Trước tiên, hãy thêm tên vào các hàng và cột vùng chứa của bạn bằng cách sử dụng dấu ngoặc vuông

.container {
  display: flex;
  flex-direction: column;
}
17

.container {
  display: flex;
  flex-direction: column;
}
5

Bạn đang thực sự đặt tên cho các dòng giữa các ô. Đây là CSS giống như trên, ngoại trừ bây giờ một số dòng giữa các ô có tên

Sau đó, sử dụng các tên đó để đặt các phần tử con của bạn

.container {
  display: flex;
  flex-direction: column;
}
6

Đây là mã đầy đủ

Thuộc tính lưới khác

Lưới có nhiều thuộc tính khác và các phím tắt để viết ít dòng mã hơn. Thay vì cố gắng liệt kê tất cả chúng ở đây, tôi khuyến khích bạn đọc qua Hướng dẫn đầy đủ về lưới trên thủ thuật CSS, Bố cục lưới CSS trên W3Schools và Bố cục lưới CSS trên MDN

Quan trọng hơn, tôi khuyến khích bạn dùng thử. Nếu bạn muốn thử nghiệm với bố cục dạng lưới (hoặc flexbox, hoặc bất kỳ thứ gì thực sự) thì điều tốt nhất bạn có thể làm là tạo một tệp sơ bộ hoặc một dự án CodePen và dùng thử. Làm cho thứ gì đó hoạt động và sau đó xem liệu có cách nào khác để viết mã của bạn không

Một bố cục cụ thể phổ biến đến mức họ đã đặt cho nó một cái tên. chén Thánh

Bố cục chén thánh là một trang web có tiêu đề, thanh bên trái, khu vực nội dung chính, thanh bên phải và chân trang. Bạn có thể kể tên một số trang web sử dụng bố cục này

Dưới đây là một vài ví dụ về cách bố trí chén thánh

sử dụng flexbox

Sử dụng lưới

Nếu bạn muốn thử thách và nếu bạn muốn hiểu điều gì làm cho flexbox và grid trở nên phổ biến, hãy thử triển khai bố cục chén thánh chỉ sử dụng float hoặc blocks

Tôi đã liệt kê một vài cách tiếp cận để tạo bố cục ở trên, nhưng bạn không cần phải chọn chỉ một. Trên thực tế, hầu hết các trang web sử dụng kết hợp tất cả những điều trên

Ví dụ: bạn có thể sử dụng lưới để tạo bố cục ngoài cùng của mình để đặt tiêu đề, thanh bên, nội dung chính và chân trang. Tiêu đề của bạn có thể sử dụng flexbox để tạo một hàng liên kết điều hướng. Nội dung chính có thể chứa các hình ảnh được di chuyển sang trái hoặc phải

Hãy thử nghĩ về từng phần trên trang của bạn dưới dạng bố cục riêng, sau đó sử dụng bất kỳ công cụ nào có ý nghĩa nhất cho phần cụ thể đó

Đảm bảo trang web của bạn hoạt động trên màn hình của mọi người là một phần quan trọng của bố cục và thiết kế, kể từ những ngày đầu của HTML

Nhưng điều này thậm chí còn trở nên khó khăn hơn vào cuối những năm 2000 và đầu những năm 2010, khi điện thoại di động trở nên phổ biến hơn để duyệt web. Làm cách nào để bạn đảm bảo rằng trang web của mình hiển thị tốt trên một chiếc điện thoại di động nhỏ, màn hình rộng và mọi thứ ở giữa?

Một cách phổ biến để nghĩ về nó là thiết kế đáp ứng. Thiết kế đáp ứng là ý tưởng rằng trang web của bạn sẽ phản ứng với những thay đổi về kích thước màn hình. Có thể trang của bạn chỉ hiển thị nội dung chính trên thiết bị màn hình hẹp, nhưng thêm thanh bên trái trên thiết bị cỡ trung bình và chia nội dung thành nhiều cột trên thiết bị màn hình rộng

Đây là một ví dụ

Thiết kế ưu tiên thiết bị di động và cải tiến liên tục

Thiết kế đáp ứng có nghĩa là bạn hiển thị một bố cục khác trên các kích thước màn hình khác nhau. Bạn có thể coi điều này là ẩn các phần của trang web trên màn hình nhỏ hơn, nhưng một cách khác để nghĩ về điều này là màn hình nhỏ hơn chứa tất cả nội dung cần thiết và màn hình lớn hơn hiển thị nội dung "bổ sung" không bắt buộc

Bắt đầu thiết kế của bạn bằng cách suy nghĩ về màn hình nhỏ được gọi là thiết kế ưu tiên thiết bị di động và suy nghĩ về việc thêm các tính năng bổ sung cho màn hình rộng hơn được gọi là cải tiến liên tục

Đây là một từ thông dụng nhỏ, nhưng tôi thấy chúng hữu ích trong việc suy nghĩ về cách thiết kế bố cục của trang web

Bạn có thể đọc thêm về thiết kế đáp ứng tại Thiết kế đáp ứng - MDN và Thiết kế web đáp ứng - Wikipedia

Để hiển thị bố cục khác tùy thuộc vào kích thước màn hình, bạn có thể sử dụng tính năng CSS có tên là truy vấn phương tiện

Truy vấn phương tiện sử dụng từ khóa

.container {
  display: flex;
  flex-direction: column;
}
18, sau đó là loại phương tiện (bạn có thể muốn
.container {
  display: flex;
  flex-direction: column;
}
19, nhưng bạn cũng có thể tùy chỉnh giao diện trang web của mình được in ra bằng
.container {
  display: flex;
  flex-direction: column;
}
20), sau đó là tính năng phương tiện cho phép bạn thiết lập quy tắc cho các loại hiển thị khác nhau. Sau đó, bên trong dấu ngoặc nhọn
.container {
  display: flex;
  flex-direction: column;
}
21, bạn đặt bất kỳ quy tắc nào bạn muốn áp dụng cho truy vấn của mình. Đây là một ví dụ

(Có thể hữu ích khi xem phiên bản toàn màn hình. )

Theo mặc định, lớp

.container {
  display: flex;
  flex-direction: column;
}
22 có đường viền mỏng, liền màu đen và nền màu lục lam. Nhưng trên màn hình rộng hơn 700 pixel, lớp
.container {
  display: flex;
  flex-direction: column;
}
22 sẽ có nền vôi. Bởi vì chúng tôi không thay đổi đường viền trên màn hình rộng nên nó duy trì mặc định màu đen đặc mỏng

Đây là một ví dụ phức tạp hơn hiển thị nội dung trong một cột theo mặc định và trong bố cục chén thánh trên các thiết bị rộng hơn 600 pixel

(Có thể hữu ích khi xem phiên bản toàn màn hình. )

Ví dụ này cũng ẩn hoàn toàn thanh bên trái trên thiết bị di động

Xem hướng dẫn dành cho người mới bắt đầu về truy vấn phương tiện trên MDN và CSS @media Rule trên W3Schools để biết thêm thông tin

Khi bạn đang tạo và gỡ lỗi bố cục trong CSS, người bạn tốt nhất của bạn là các công cụ dành cho nhà phát triển của trình duyệt. Họ có thể giúp bạn hiểu lý do tại sao mọi thứ đang thẳng hàng theo một cách nhất định hoặc một vài pixel không gian thừa đó đến từ đâu

Bạn thậm chí có thể sử dụng chế độ thiết bị để xem trang web của mình trông như thế nào trên các thiết bị khác nhau. Điều này dễ dàng hơn nhiều so với việc liên tục thay đổi kích thước cửa sổ của bạn

Làm cách nào để tạo bố cục CSS?

Tải xuống các tệp hướng dẫn tại đây (mở trong tab mới) (và lưu chúng trong bộ nhớ đám mây an toàn). .
Bắt đầu. Mở tệp 'lưới1. .
Kiểm tra CSS cho lưới. .
Xác định vị trí lưới. .
Sử dụng mẫu lưới. .
Xác định mẫu. .
Liên kết mẫu với lớp. .
Làm cho nó đáp ứng. .
Làm việc trên một bố cục thực tế

Bố cục nào là tốt nhất trong CSS?

Bố cục CSS tốt nhất cho trang web của bạn .
Nguyên chất. css. .
Bố cục CSS Masonry thuần túy với Flexbox. .
Mở rộng bố cục cột. .
Bố cục toàn màn hình với các cột. .
Bố cục CSS Masonry thuần túy. .
Ví dụ bố cục trang tĩnh. .
Bố cục trang sản phẩm với Flexbox. .
Bố cục CSS3 đẹp

Kỹ thuật bố cục CSS là gì?

Các kỹ thuật bố cục trang CSS cho phép chúng tôi lấy các thành phần có trong trang web và kiểm soát vị trí của chúng so với các yếu tố sau. vị trí mặc định của chúng trong luồng bố cục bình thường, các thành phần khác xung quanh chúng, vùng chứa chính của chúng và cửa sổ/khung nhìn chính

Bố cục trang web CSS là gì?

Bố cục lưới CSS là hệ thống bố cục hai chiều dành cho web . Nó cho phép bạn sắp xếp nội dung theo hàng và cột, đồng thời có nhiều tính năng giúp việc xây dựng các bố cục phức tạp trở nên đơn giản.