Định vị phần tử Css3. CSS - Các phần tử khối định vị
Phần tử khối trong HTML là phần tử theo mặc định chiếm toàn bộ chiều rộng của phần tử gốc của nó. Phần tử cha có thể là phần tử khối khác hoặc cửa sổ trình duyệt. Bạn có thể đặt chiều rộng và chiều cao của phần tử khối bằng thuộc tính CSS. Các phần tử khối định vị là quá trình định vị chúng trong cửa sổ trình duyệt và liên quan đến chúng bằng cách sử dụng các thuộc tính CSS location , left , top , right và Bottom . Thuộc tính vị trí CSS được thiết kế để đặt một trong bốn loại định vị có sẵn: tĩnh (mặc định), tuyệt đối, cố định và tương đối. Các thuộc tính CSS còn lại, cụ thể là left , top , right và Bottom , được sử dụng để đặt khoảng cách tương ứng với các cạnh trái, trên, phải và dưới của phần tử cha. Ngoài ra, khi thiết lập một số thuộc tính nhất định, các phần tử khối có thể chồng lên nhau và tính năng này cũng có thể được sử dụng trên các trang web.
Định vị mặc định (tĩnh)
Nếu bạn không chỉ định vị trí cho một phần tử khối hoặc chỉ định static , điều này giống nhau thì các phần tử khối sẽ được sắp xếp theo thứ tự. Hơn nữa, khối tiếp theo (ví dụ: màu đỏ) nằm trên một dòng mới. Ngoài ra, vị trí này không bị ảnh hưởng bởi việc đặt khoảng cách left , top , right và Bottom .
Định vị tuyệt đối (absolute)
Với định vị tuyệt đối, vị trí của một phần tử được chỉ định tương ứng với các cạnh của cửa sổ trình duyệt bằng cách sử dụng khoảng cách được chỉ định bởi các thuộc tính left , top , right và Bottom . Nếu bạn chỉ định khoảng cách trái và phải cùng một lúc và chúng xung đột với nhau thì ưu tiên sẽ được dành cho left , điều tương tự cũng xảy ra với top và Bottom , trong đó khoảng cách top được ưu tiên. Định vị tuyệt đối thường được sử dụng kết hợp với định vị tương đối cho mục đích thiết kế, khi cần đặt các phần tử khác nhau tương đối với nhau; nó cũng có thể được sử dụng để tạo menu thả xuống, bố cục trang web, v.v.
Định vị cố định
Định vị cố định khác với các loại định vị khác và không di chuyển cùng với nội dung khi bạn cuộn trang. Các phần tử khối có vị trí cố định được neo bằng cách sử dụng các thuộc tính left , top , right và Bottom vào các cạnh của cửa sổ trình duyệt. Định vị cố định được sử dụng để tạo giao diện khung (cửa sổ trình duyệt được chia thành nhiều khu vực), menu cố định, chân trang cố định và các khối “vĩnh viễn” (danh sách các liên kết, nút xã hội, v.v.).
Định vị tương đối
Vị trí tương đối được chỉ định bằng cách chỉ định khoảng cách left , top , right và Bottom so với vị trí hiện tại của nó.
Tuy nhiên, vị trí khối này cũng có thể được tạo bằng thuộc tính lề.
Định vị tương đối không thú vị khi sử dụng riêng nó, nó chủ yếu được sử dụng cùng với định vị tuyệt đối.
Hãy xem xét các lựa chọn:
Một trong những điều tốt nhất về CSS là các kiểu cho chúng ta khả năng định vị nội dung và các thành phần trên một trang theo hầu hết mọi cách có thể tưởng tượng được. Điều này bổ sung cấu trúc cho thiết kế của chúng tôi và giúp làm cho nội dung trở nên trực quan hơn.
Có một số loại định vị khác nhau trong CSS, mỗi loại này có phạm vi riêng. Trong chương này, chúng ta sẽ xem xét một số trường hợp sử dụng khác nhau—tạo bố cục có thể sử dụng lại và định vị các phần tử dùng một lần duy nhất—và mô tả một số phương pháp để thực hiện điều đó.
Định vị qua float
Một cách để định vị các phần tử trên một trang là thông qua thuộc tính float. Thuộc tính này khá linh hoạt và có thể được sử dụng theo nhiều cách khác nhau.
Về cơ bản, thuộc tính float lấy một phần tử, xóa nó khỏi luồng thông thường của trang và đặt nó ở bên trái hoặc bên phải phần tử cha của nó. Tất cả các phần tử khác trên trang sẽ bao quanh phần tử đó. Ví dụ: các đoạn văn sẽ bao quanh một hình ảnh nếu phần tử thuộc tính float được thiết lập.
Khi thuộc tính float được áp dụng cho nhiều phần tử cùng một lúc, nó có thể tạo bố cục với các phần tử nổi cạnh hoặc đối diện nhau, như được hiển thị trong bố cục nhiều cột.
Thuộc tính float nhận một số giá trị, hai giá trị phổ biến nhất là left và right, cho phép phần tử nổi sang bên trái hoặc bên phải phần tử mẹ của nó.
Hình ảnh ( float: left; )
nổi trong thực tế
Hãy tạo bố cục trang chung với tiêu đề ở trên cùng, hai cột ở giữa và chân trang ở dưới cùng. Tốt nhất, trang này nên được đánh dấu bằng các phần tử
,
,
......
Trình diễn bố cục không có float
Dưới đây là các yếu tố Và
Phần ( float: left; ) sang một bên ( float: right; )
Để tham khảo, các phần tử nổi được định vị dọc theo cạnh của phần tử cha. Nếu không có phần tử cha, phần tử nổi sẽ được định vị dọc theo mép trang.
Khi chúng tôi đặt một phần tử ở chế độ nổi, chúng tôi sẽ xóa phần tử đó khỏi luồng thông thường của tài liệu HTML. Điều này khiến chiều rộng mặc định của phần tử đó trở thành chiều rộng của nội dung của nó. Đôi khi, chẳng hạn như khi chúng tôi tạo cột cho bố cục có thể sử dụng lại, hành vi này là không mong muốn. Điều này có thể được khắc phục bằng cách thêm thuộc tính chiều rộng với giá trị cố định cho mỗi cột. Ngoài ra, để ngăn các phần tử nổi chạm vào nhau khiến nội dung của phần tử này nằm cạnh phần tử khác, chúng ta có thể sử dụng thuộc tính lề để đặt khoảng cách giữa các phần tử.
Dưới đây, chúng tôi mở rộng khối mã trước đó bằng cách thêm lề và chiều rộng cho mỗi cột để định hình kết quả mong muốn tốt hơn.
Phần ( float: left; lề: 0 1,5%; chiều rộng: 63%; ) sang một bên ( float: right; lề: 0 1,5%; chiều rộng: 30%; )
Bản demo bố cục với float
float có thể thay đổi giá trị hiển thị của phần tử
Đối với phần tử nổi, điều quan trọng là phải hiểu rằng phần tử đó bị xóa khỏi luồng bình thường của trang và giá trị hiển thị mặc định của phần tử có thể thay đổi. Thuộc tính float dựa vào giá trị hiển thị của phần tử được đặt thành khối và có thể thay đổi giá trị hiển thị mặc định của phần tử nếu nó chưa được hiển thị dưới dạng phần tử khối.
Ví dụ: một phần tử có phần hiển thị được chỉ định là inline , chẳng hạn như inline , bỏ qua mọi thuộc tính chiều cao hoặc chiều rộng. Tuy nhiên, nếu bạn chỉ định phần tử nổi cho phần tử nội tuyến, giá trị hiển thị sẽ thay đổi thành khối và khi đó phần tử có thể đã có thuộc tính chiều cao hoặc chiều rộng.
Khi thả nổi một phần tử, chúng ta cần cẩn thận về việc nó ảnh hưởng như thế nào đến giá trị của thuộc tính display.
Đối với hai cột, bạn có thể đặt float, một cột ở bên trái và cột kia ở bên phải, nhưng đối với nhiều cột, chúng ta sẽ phải thay đổi cách tiếp cận của mình. Ví dụ: giả sử chúng tôi muốn có một hàng gồm ba cột giữa các phần tử của chúng tôi Và
......
...
...
Để sắp xếp ba yếu tố này trong một hàng ba cột, chúng ta phải đặt float cho tất cả các phần tử như bên trái. Chúng ta cũng cần điều chỉnh độ rộng có tính đến các cột bổ sung và đặt chúng cạnh nhau.
Ở đây chúng ta có ba cột, tất cả đều có chiều rộng và giá trị lề bằng nhau và float được đặt thành left .
Trình diễn bố cục ba cột với float
Xóa và thả nổi nội dung
Thuộc tính float ban đầu được thiết kế để cho phép nội dung di chuyển xung quanh hình ảnh. Một hình ảnh có thể được tạo nổi và tất cả nội dung xung quanh hình ảnh đó sẽ chảy xung quanh nó một cách tự nhiên. Mặc dù điều này rất hiệu quả đối với hình ảnh, nhưng thuộc tính float không thực sự được sử dụng cho mục đích bố cục và định vị, do đó có một số cạm bẫy.
Một trong những cạm bẫy này là đôi khi kiểu thích hợp không xuất hiện trên phần tử liền kề hoặc là phần tử cha của phần tử nổi. Khi một phần tử được đặt ở chế độ nổi, nó sẽ bị xóa khỏi luồng bình thường của trang và do đó, kiểu của các phần tử xung quanh phần tử nổi đó có thể bị ảnh hưởng tiêu cực.
Thông thường các giá trị của thuộc tính lề và phần đệm được diễn giải không chính xác, khiến chúng bị trộn vào phần tử nổi. Các tài sản khác cũng có thể bị ảnh hưởng.
Một lỗi khác là đôi khi nội dung không mong muốn bắt đầu bao quanh phần tử float. Việc xóa một phần tử khỏi luồng tài liệu cho phép tất cả các phần tử xung quanh phần tử nổi bỏ qua nó và chiếm bất kỳ khoảng trống nào có sẵn xung quanh phần tử nổi, điều này thường không mong muốn.
Trong ví dụ về hai cột trước, sau khi chúng ta thêm dấu phẩy vào các phần tử Và
Trình diễn bố cục mà không cần xóa float
Để ngăn nội dung bao quanh các phần tử nổi, chúng ta cần xóa phần nổi và đưa trang trở lại luồng bình thường. Chúng ta sẽ xem cách xóa các float và sau đó xem nội dung của chúng.
Xóa phao
Việc xóa float xảy ra bằng cách sử dụng thuộc tính clear, thuộc tính này nhận một số giá trị khác nhau: các giá trị được sử dụng phổ biến nhất là left , right và cả hai .
Div ( xóa: trái; )
Giá trị bên trái xóa các float bên trái, trong khi giá trị bên phải xóa các float bên phải. Tuy nhiên, giá trị cả hai sẽ xóa các float bên trái và bên phải và thường là lựa chọn lý tưởng nhất.
Quay lại ví dụ trước của chúng ta, nếu chúng ta sử dụng thuộc tính clear với giá trị là cả hai trên một phần tử
Chân trang ( xóa: cả hai; )
Trình diễn bố cục với tính năng xóa nổi
Nội dung nổi
Thay vì xóa float , một tùy chọn khác là đặt nội dung thành float . Kết quả sẽ khá giống nhau, nhưng nội dung nổi thực sự đảm bảo rằng tất cả các kiểu của chúng ta sẽ hiển thị đúng.
Để đặt nội dung float, các phần tử float phải nằm bên trong phần tử cha, nó sẽ hoạt động như một thùng chứa, khiến luồng tài liệu hoàn toàn bình thường bên ngoài nó. Kiểu dáng cho phần tử gốc này được thể hiện bằng một lớp nhóm, như được hiển thị ở đây:
Không có nhiều thứ diễn ra ở đây, nhưng về cơ bản tất cả những gì CSS thực hiện là xóa tất cả các phần tử nổi bên trong phần tử nhóm và đưa tài liệu về quy trình bình thường.
Cụ thể hơn, các phần tử giả ::trước và ::after, như được thảo luận trong Bài 4, tạo động các phần tử bên trên và bên dưới một phần tử có lớp group . Các phần tử này không bao gồm bất kỳ nội dung nào và được hiển thị dưới dạng phần tử bảng, tương tự như phần tử khối. Phần tử được tạo động sau phần tử nhóm sẽ xóa phần float bên trong phần tử nhóm, giống như clear đã làm trước đó. Cuối cùng, phần tử nhóm cũng xóa mọi số float có thể xuất hiện trước nó trong trường hợp có float có giá trị left hoặc right . Ngoài ra còn có một thủ thuật nhỏ giúp các trình duyệt cũ hoạt động tốt hơn.
Ở đây có nhiều mã hơn là chỉ lệnh clear: cả hai, nhưng nó có thể khá hữu ích.
Xem xét bố cục trang hai cột của chúng tôi, chúng tôi có thể gói gọn Và
...
...
Phần Group::trước, .group::after ( content: ""; display: table; ) .group::after ( clear: cả hai; ) .group ( clear: cả hai; *zoom: 1; ) phần ( float: left ; lề: 0 1,5%; chiều rộng: 63%; ) sang một bên ( float: right; lề: 0 1,5%; chiều rộng: 30%; )
Trình diễn bố cục với nội dung nổi
Kỹ thuật được trình bày ở đây được gọi là "clearfix" và thường thấy trên các trang web khác với tên lớp clearfix hoặc cf. Chúng tôi chọn sử dụng nhóm tên lớp vì nó đại diện cho một nhóm thành phần và thể hiện nội dung tốt hơn.
Khi các phần tử được đặt ở chế độ nổi, điều quan trọng là phải theo dõi cách chúng ảnh hưởng đến luồng trang và đảm bảo rằng luồng trang được đặt lại thông qua việc xóa hoặc thông qua nội dung nổi như dự định. Mặt khác, việc theo dõi các float có thể gây ra nhiều vấn đề đau đầu, đặc biệt là trên các trang chứa nhiều hàng, mỗi hàng có nhiều cột.
Trên thực tế
Hãy quay lại trang Styles Conference và thử thêm phần nổi vào một số nội dung.
Trước tiên, trước khi áp dụng float cho bất kỳ phần tử nào, hãy cung cấp nội dung cho các phần tử float đó bằng cách thêm Clearfix vào CSS của chúng ta. Trong tệp main.css, ngay bên dưới kiểu lưới của chúng tôi, chúng tôi sẽ thêm Clearfix dưới tên lớp nhóm, giống như trước đây. /* ==================================================== ====== Clearfix ======= ============================================================================================================= / .group::trước, .group::after ( content: " "; display: table; ) .group::after ( clear: cả hai; ) .group ( clear: cả hai; *zoom: 1; )
Bây giờ chúng ta có thể sử dụng float, hãy định nghĩa nó cho phần chính
phần tử bên trong ở bên trái và để phần nội dung còn lại trong tiêu đề chuyển sang bên phải.
Để làm điều này, hãy thêm lớp logo vào phần tử
. Tiếp theo, bên trong CSS, chúng tôi sẽ thêm phần tạo kiểu mới cho tiêu đề chính. Trong phần này chúng ta sẽ chọn phần tử
/* ========================================= Tiêu đề chính ====== ====================================== */ .logo ( float: left; )
Trong khi chúng ta ở đây, hãy thêm một chút chi tiết vào logo của chúng ta. Hãy bắt đầu bằng cách đặt phần tử hoặc ngắt dòng giữa các từ “Styles” và “Conference” để buộc văn bản logo của chúng tôi xuất hiện trên hai dòng.
Trong CSS, chúng tôi sẽ thêm một đường viền dọc theo phần trên cùng của logo và một số phần đệm dọc để logo có thể “thở” tự do.
được sắp xếp hợp lý, chúng tôi muốn đặt nội dung ở chế độ nổi . Phụ huynh trực tiếp cho
là một phần tử vì vậy chúng ta sẽ thêm một lớp nhóm vào nó. Điều này sẽ áp dụng các kiểu Clearfix mà chúng tôi đã đặt trước đó cho nó.
...
Yếu tố có hình dạng, vì vậy chúng ta hãy nhìn vào phần tử
Khác với phần tử tuy nhiên, chúng ta sẽ không áp dụng lớp này trực tiếp cho phần tử nổi. Lần này chúng ta sẽ thêm một lớp vào phần tử mẹ của phần tử float và sử dụng bộ chọn CSS duy nhất để chọn phần tử rồi đặt cho nó một float .
Hãy bắt đầu bằng cách thêm lớp chân trang chính vào phần tử
Bây giờ lớp chân trang chính đã được đặt trên phần tử
Để kiểm tra - ở đây chúng tôi chọn phần tử , phải nằm bên trong một phần tử có giá trị thuộc tính lớp là chân trang chính, chẳng hạn như phần tử của chúng tôi
Cuối cùng, chúng ta sẽ thêm một chút đệm vào phần trên và phần dưới của phần tử.
Chân trang chính ( đệm-dưới: 44px; đệm-top: 44px; )
Có tính đến tất cả những thay đổi này trong các yếu tố Và
Cơm. 5,01. Sử dụng nhiều phần tử float Và
Định vị thông qua khối nội tuyến
Ngoài việc sử dụng float, một cách khác để chúng ta có thể định vị nội dung là sử dụng thuộc tính display kết hợp với giá trị inline-block. Phương pháp khối nội tuyến, như chúng ta sẽ thảo luận sau, chủ yếu hữu ích cho việc bố trí các trang hoặc đặt các thành phần trong một dòng cạnh nhau.
Hãy nhớ lại rằng giá trị inline-block cho thuộc tính display hiển thị các phần tử trong một dòng và cho phép chúng đảm nhận tất cả các thuộc tính của mô hình hộp, bao gồm chiều cao, chiều rộng, phần đệm, đường viền và lề. Việc sử dụng khối nội tuyến cho phép chúng ta tận dụng tối đa mô hình khối mà không phải lo lắng về việc loại bỏ bất kỳ số float nào.
khối nội tuyến trong thực tế
Chúng ta hãy xem lại ví dụ ba cột của chúng tôi ngay từ đầu. Chúng ta sẽ bắt đầu bằng cách lưu HTML của mình như thế này:
......
...
...
Bây giờ thay vì float cho ba phần tử của chúng ta chúng tôi sẽ thay đổi giá trị hiển thị của chúng thành inline-block , giữ nguyên các thuộc tính lề và chiều rộng như trước đây. Kết quả là CSS của chúng ta sẽ trông như thế này:
Thật không may, chỉ mã này là không đủ để thực hiện thủ thuật và phần tử cuối cùng được đẩy sang một dòng mới. Hãy nhớ rằng, vì các phần tử khối nội tuyến xuất hiện trên một dòng cạnh nhau nên chúng bao gồm một khoảng trắng duy nhất giữa chúng. Khi kích thước của từng khoảng trắng riêng lẻ được thêm vào giá trị chiều rộng và lề ngang của tất cả các phần tử trong một hàng, chiều rộng tổng thể sẽ trở nên quá lớn, đẩy phần tử cuối cùng ra ngoài sang một dòng mới. Để hiển thị tất cả các mục trên một dòng, bạn nên xóa khoảng trắng giữa mỗi dòng
.
Trình diễn các phần tử khối nội tuyến có dấu cách
Xóa khoảng trắng giữa các phần tử khối nội tuyến
Có một số phương pháp để loại bỏ khoảng trắng giữa các phần tử khối nội tuyến và một số phương pháp phức tạp hơn các phương pháp khác. Chúng ta sẽ tập trung vào hai phương pháp đơn giản nhất, cả hai đều xảy ra trong HTML.
Giải pháp đầu tiên là đặt từng thẻ phần tử mở đầu mới trên cùng dòng với thẻ đóng của phần tử trước đó . Thay vì sử dụng một dòng mới cho mỗi phần tử, chúng ta bắt đầu các phần tử trên cùng một dòng. HTML của chúng tôi có thể trông như thế này:
...
...
...
...
Viết các phần tử khối nội tuyến theo cách này đảm bảo rằng không có khoảng cách giữa các phần tử như vậy trong HTML. Do đó, khoảng trống sẽ không xuất hiện khi trang được hiển thị.
Trình diễn các phần tử khối nội tuyến không có khoảng trắng
Một phương pháp khác để loại bỏ khoảng trắng giữa các phần tử khối nội tuyến là mở nhận xét HTML ngay sau thẻ đóng của phần tử. Sau đó đóng bình luận ngay trước thẻ mở của phần tử tiếp theo. Điều này cho phép các phần tử khối nội tuyến bắt đầu và kết thúc trên các dòng riêng biệt trong HTML và sẽ "nhận xét" bất kỳ khoảng trống tiềm ẩn nào giữa các phần tử. Mã kết quả sẽ trông như thế này:
...
...
...
...
Không có tùy chọn nào trong số này là hoàn hảo, nhưng chúng rất hữu ích. Tôi có xu hướng thích sử dụng nhận xét để tổ chức tốt hơn, nhưng lựa chọn nào là hoàn toàn tùy thuộc vào bạn.
Tạo bố cục có thể sử dụng lại
Khi xây dựng một trang web, tốt nhất bạn nên viết các kiểu mô-đun có thể được sử dụng lại ở nơi khác và các bố cục có thể sử dụng lại nằm ở đầu danh sách mã có thể sử dụng lại. Bố cục có thể được tạo bằng cách sử dụng phần tử float hoặc khối nội tuyến, nhưng cách nào hoạt động tốt nhất và tại sao?
Câu hỏi liệu các phần tử khối nổi hay khối nội tuyến tốt hơn cho cấu trúc trang vẫn còn là vấn đề tranh luận. Cách tiếp cận của tôi là sử dụng các phần tử khối nội tuyến để tạo bố cục lưới hoặc trang, sau đó sử dụng phần nổi khi tôi muốn nội dung chảy xung quanh phần tử (đó là những gì phần nổi được thiết kế khi làm việc với hình ảnh). Nói chung, tôi cũng thấy các phần tử khối nội tuyến dễ làm việc hơn.
Tuy nhiên, hãy sử dụng những gì phù hợp nhất với bạn. Nếu bạn quen thuộc với cách tiếp cận này hơn cách tiếp cận khác thì hãy sử dụng nó.
Có các thông số CSS mới đang được phát triển - cụ thể là thuộc tính flex và lưới - sẽ giúp bạn quyết định cách bố trí trang của mình tốt nhất. Hãy để mắt đến những phương pháp này khi chúng bắt đầu xuất hiện.
Trên thực tế
Với sự hiểu biết chắc chắn về các bố cục có thể tái sử dụng, đã đến lúc triển khai một bố cục trên trang web Hội nghị Phong cách của chúng tôi.
Đối với trang web Styles Conference, chúng tôi sẽ tạo bố cục ba cột bằng cách sử dụng các phần tử khối nội tuyến. Chúng ta sẽ làm điều này để có được ba cột có cùng chiều rộng hoặc hai cột có tổng chiều rộng chia cho chúng là 2/3 cho một và 1/3 cho cột kia.
Đầu tiên, chúng ta sẽ tạo các lớp xác định chiều rộng của các cột này. Chúng ta sẽ gọi hai lớp này là col-1-3 cho một phần ba và col-2-3 cho hai phần ba. Trong phần Lưới của tệp main.css của chúng ta, hãy tiếp tục và xác định các lớp này cũng như độ rộng tương ứng của chúng.
Chúng tôi muốn cả hai cột xuất hiện dưới dạng phần tử khối nội tuyến. Chúng ta cũng cần đảm bảo rằng căn chỉnh theo chiều dọc của chúng được đặt ở đầu mỗi cột.
Hãy tạo hai bộ chọn mới chia sẻ display và Vertical-align .
Hãy xem lại CSS. Chúng tôi đã tạo hai bộ chọn lớp col-1-3 và col-2-3 cách nhau bằng dấu phẩy. Dấu phẩy ở cuối bộ chọn đầu tiên có nghĩa là bộ chọn khác theo sau nó. Sau bộ chọn thứ hai có một dấu ngoặc nhọn mở, cho biết mô tả kiểu bắt đầu. Bằng cách sử dụng dấu phẩy để phân tách các bộ chọn, chúng ta có thể liên kết một kiểu với nhiều bộ chọn cùng một lúc.
Chúng tôi muốn đặt một khoảng trống giữa các cột để giúp chia nhỏ nội dung. Điều này có thể được thực hiện bằng cách thêm phần đệm ngang vào mỗi cột.
Tuy nhiên, điều này hoạt động tốt khi hai cột được đặt cạnh nhau, chiều rộng của khoảng cách giữa chúng sẽ rộng gấp đôi khoảng cách từ mép ngoài. Để cân bằng điều này, chúng tôi sẽ đặt tất cả các cột của mình vào một lưới và thêm phần đệm tương tự vào đó.
Hãy sử dụng lớp lưới để xác định lưới của chúng ta, sau đó cung cấp phần đệm ngang tương tự cho các lớp lưới, col-1-3 và col-2-3. Với dấu phẩy một lần nữa ngăn cách các bộ chọn, CSS của chúng tôi trông như thế này:
Khi đặt phần đệm ngang, chúng ta cần phải cẩn thận. Hãy nhớ rằng, trong bài học trước chúng ta đã tạo một vùng chứa với lớp container để căn giữa tất cả nội dung của chúng ta trên trang với chiều rộng 960 pixel. Hiện tại, nếu chúng ta đặt một phần tử lưới bên trong một phần tử vùng chứa, phần đệm ngang của chúng sẽ thu gọn lại với nhau và các cột của chúng ta sẽ không xuất hiện tỷ lệ thuận với chiều rộng của phần còn lại của trang.
Chúng tôi sẽ thực hiện việc này bằng cách chia bộ quy tắc vùng chứa cũ thành các phần sau:
Vùng chứa, .grid ( lề: 0 tự động; chiều rộng: 960px; ) .container ( đệm-trái: 30px; đệm-phải: 30px; )
Bây giờ, bất kỳ phần tử nào có lớp chứa hoặc lớp lưới sẽ rộng 960 pixel và nằm ở giữa trang. Ngoài ra, chúng tôi đã giữ lại khoảng đệm ngang hiện có cho bất kỳ phần tử nào có lớp vùng chứa bằng cách di chuyển nó sang một bộ quy tắc mới, riêng biệt.
Được rồi, tất cả phần khó khăn của việc thiết lập lưới đã hoàn tất. Bây giờ là lúc làm việc với HTML của chúng ta và xem các lớp này hoạt động như thế nào.
Chúng ta sẽ bắt đầu với các đoạn giới thiệu trên trang chủ, trong tệp index.html, được căn chỉnh thành ba cột. Hiện tại các đoạn giới thiệu được bao bọc trong phần tử với lớp container. Chúng tôi muốn thay đổi lớp chứa thành lưới để có thể bắt đầu đặt các cột bên trong.
...
...
...
...
Và cuối cùng, vì mỗi cột của chúng ta là một thành phần khối nội tuyến nên chúng ta cần đảm bảo rằng chúng ta loại bỏ mọi khoảng trắng giữa chúng. Để làm điều này, chúng tôi sẽ sử dụng nhận xét và thêm một số tài liệu vào từng phần để tổ chức mã của chúng tôi tốt hơn.
...
...
...
Để kiểm tra, chúng tôi đã để lại nhận xét ở dòng 3 xác định phần “Loa” theo sau nó. Cuối dòng 7, chúng ta mở chú thích ngay sau thẻ đóng. Bên trong nhận xét này, ở dòng 9, chúng tôi xác định phần sau "Lịch trình". Sau đó đóng comment ở đầu dòng 11, ngay trước thẻ mở . Cấu trúc nhận xét tương tự xuất hiện ở dòng 13 đến 17 giữa hai phần tử , ngay trước phần Địa điểm. Nói chung, chúng tôi đã nhận xét mọi khoảng trắng tiềm ẩn giữa các cột, đồng thời sử dụng các nhận xét tương tự để xác định các phần của chúng tôi.
Bây giờ chúng tôi có lưới ba cột có thể tái sử dụng, hỗ trợ các bố cục khác nhau, sử dụng độ rộng cột 1/3 và 2/3. Trang chủ của chúng tôi hiện có ba cột, ngăn cách tất cả các đoạn giới thiệu.
Cơm. 5.02. Trang chủ Styles Conference hiện có bố cục ba cột
Demo và mã nguồn
Dưới đây bạn có thể xem trang web Styles Conference ở trạng thái hiện tại cũng như tải xuống mã nguồn hiện tại của trang web.
Định vị phần tử độc đáo
Sớm hay muộn mọi người đều muốn định vị chính xác một phần tử, nhưng các phần tử float hoặc inline-block không cho phép thực hiện thủ thuật như vậy. Các phần tử nổi loại bỏ một phần tử khỏi luồng của trang thường tạo ra các kết quả không mong muốn vì các phần tử xung quanh bao quanh phần tử nổi. Các phần tử khối nội tuyến, trừ khi chúng ta đang tạo cột, có thể khá khó khăn khi định vị chính xác. Đối với những tình huống như thế này, chúng ta có thể sử dụng thuộc tính vị trí kết hợp với thuộc tính offset của khối.
Thuộc tính vị trí xác định cách phần tử được định vị trên trang và liệu nó có được hiển thị trong luồng tài liệu thông thường hay không. Nó được sử dụng cùng với các thuộc tính offset của khối top , right , Bottom và left , xác định chính xác vị trí phần tử sẽ được định vị bằng cách di chuyển phần tử theo các hướng khác nhau.
Theo mặc định, giá trị vị trí của mỗi phần tử được đặt thành static, nghĩa là phần tử tồn tại trong luồng thông thường của tài liệu và không lấy bất kỳ thuộc tính nào để định vị nó. Giá trị tĩnh thường được ghi đè bằng giá trị tương đối hoặc tuyệt đối mà chúng ta sẽ xem xét tiếp theo.
Định vị tương đối
Đặt thuộc tính vị trí thành tương đối cho phép các phần tử xuất hiện trong luồng bình thường của trang, dành không gian cho phần tử như dự định và ngăn các phần tử khác chảy xung quanh nó. Tuy nhiên, nó cũng cho phép bạn sửa đổi vị trí của một phần tử bằng cách sử dụng thuộc tính offset. Ví dụ: hãy xem xét HTML và CSS sau:
...
...
...
Div ( chiều cao: 100px; chiều rộng: 100px; ) .offset ( trái: 20px; vị trí: tương đối; trên cùng: 20px; )
Trình diễn định vị tương đối
Ở đây cho phần tử thứ hai
với lớp offset, giá trị vị trí được đặt thành tương đối, cũng như hai thuộc tính offset - left và top. Điều này duy trì vị trí ban đầu của phần tử và các phần tử khác không được phép di chuyển vào khu vực đó. Ngoài ra, thuộc tính offset di chuyển phần tử bằng cách đẩy phần tử đó 20 pixel từ bên trái và 20 pixel từ đầu vị trí ban đầu.
Đối với các phần tử được định vị tương đối, điều quan trọng cần biết là các thuộc tính offset của khối xác định vị trí phần tử sẽ được di chuyển, dựa trên vị trí ban đầu của nó. Vì vậy, thuộc tính bên trái có giá trị 20 pixel thực sự đẩy phần tử sang bên phải 20 pixel. Thuộc tính top có giá trị 20px sẽ đẩy phần tử xuống 20px.
Khi chúng ta định vị một phần tử bằng cách sử dụng thuộc tính offset, phần tử đó sẽ chồng lên phần tử bên dưới nó, thay vì đẩy nó xuống giống như các thuộc tính lề hoặc phần đệm.
Định vị tuyệt đối
Giá trị tuyệt đối cho thuộc tính vị trí khác với giá trị tương đối ở chỗ phần tử được định vị tuyệt đối không xuất hiện trong luồng thông thường của tài liệu và không gian và vị trí ban đầu của phần tử được định vị tuyệt đối không được bảo lưu.
Ngoài ra, các phần tử được định vị tuyệt đối sẽ di chuyển so với phần tử gốc được định vị tương đối gần nhất của chúng. Nếu cha mẹ được định vị tương đối không tồn tại thì phần tử được định vị tuyệt đối sẽ được định vị tương ứng với phần tử
. Đây là một thông tin nhỏ; chúng ta hãy xem nó hoạt động như thế nào bên trong một số mã:
...
Phần ( vị trí: tương đối; ) div ( vị trí: tuyệt đối; bên phải: 20px; trên cùng: 20px; )
Trình diễn định vị tuyệt đối
Trong ví dụ này phần tử được định vị tương đối, nhưng không bao gồm bất kỳ thuộc tính offset nào. Vì vậy, vị trí của nó không thay đổi. Yếu tố
với lớp offset bao gồm giá trị vị trí là tuyệt đối. Vì phần tử là phần tử cha có vị trí tương đối gần nhất với
, thì phần tử
sẽ được định vị tương ứng với phần tử
.
Đối với các phần tử được định vị tương đối, các thuộc tính offset xác định phần tử sẽ được di chuyển theo hướng nào so với chính nó. Đối với các phần tử được định vị tuyệt đối, các thuộc tính offset xác định hướng mà phần tử sẽ được di chuyển so với phần tử cha có vị trí tương đối gần nhất của nó.
Là kết quả của các thuộc tính bên phải và trên cùng, phần tử
sẽ xuất hiện 20 pixel từ bên phải và 20 pixel từ trên cùng bên trong
.
Vì phần tử
được định vị tuyệt đối, nó không được định vị trong luồng bình thường của trang và sẽ chồng lên bất kỳ phần tử nào xung quanh nó. Hơn nữa, vị trí xuất phát
không được lưu và các phần tử khác có thể chiếm chỗ này. Nói chung, hầu hết việc định vị có thể xảy ra mà không cần sử dụng các thuộc tính vị trí và thuộc tính offset, nhưng trong một số trường hợp, chúng có thể cực kỳ hữu ích.
Bản tóm tắt
Học cách định vị nội dung trong HTML và CSS là một bước tiến lớn để thành thạo các ngôn ngữ này. Thêm vào đó là mô hình khối và chúng tôi đang trên đường trở thành nhà phát triển giao diện người dùng.
Định vị là một trong những khái niệm quan trọng trong cách bố trí khối. Một khi bạn hiểu nó, nhiều điều sẽ trở nên rõ ràng với bạn và bố cục sẽ biến từ pháp sư thành một quá trình có ý nghĩa. Vì vậy, bài viết này sẽ tập trung vào các thuộc tính CSS. chức vụ Và trôi nổi.
1. vị trí: tĩnh
Theo mặc định, tất cả các thành phần trên trang đều có vị trí tĩnh (vị trí: tĩnh), có nghĩa là thành phần đó không được định vị và xuất hiện trong tài liệu ở vị trí thông thường, nghĩa là theo thứ tự giống như trong đánh dấu HTML.
Không cần phải gán cụ thể thuộc tính này cho bất kỳ phần tử nào, trừ khi bạn cần thay đổi vị trí đã đặt trước đó thành mặc định.
#content(vị trí: tĩnh; )
2.vị trí:tương đối
Định vị tương đối (vị trí: tương đối) cho phép bạn sử dụng các thuộc tính trên cùng, dưới cùng, bên trái và bên phải để định vị một phần tử so với vị trí nó sẽ xuất hiện nếu được đặt ở vị trí bình thường.
Hãy di chuyển #content xuống 20 pixel và 40 pixel sang trái:
#content(vị trí: tương đối; trên cùng: 20px; trái: -40px; )
Lưu ý rằng hiện tại có khoảng trống nơi lẽ ra khối #content của chúng tôi sẽ có. Tiếp theo khối #content, khối #footer không di chuyển xuống vì #content vẫn chiếm vị trí của nó trong tài liệu mặc dù chúng ta đã di chuyển nó.
Ở giai đoạn này, có vẻ như việc định vị tương đối không hữu ích lắm, nhưng đừng vội kết luận, phần sau của bài viết bạn sẽ tìm hiểu xem nó có thể được sử dụng để làm gì.
3. vị trí: tuyệt đối
Với định vị tuyệt đối (vị trí: tuyệt đối), phần tử sẽ bị xóa khỏi tài liệu và xuất hiện ở nơi bạn yêu cầu.
Ví dụ: hãy di chuyển khối #div-1a đến góc trên bên phải của trang:
#div-1a ( vị trí: tuyệt đối; trên cùng: 0; phải: 0; chiều rộng: 200px; )
Lưu ý rằng lần này, vì khối #div-1a đã bị xóa khỏi tài liệu nên các phần tử còn lại trên trang được định vị khác: #div-1b, #div-1c và #footer đã được di chuyển lên trên, thay cho khối đã bị xóa . Và khối #div-1a nằm chính xác ở góc trên bên phải của trang.
Bằng cách này, chúng ta có thể định vị bất kỳ phần tử nào có liên quan đến trang, nhưng điều này là chưa đủ. Trên thực tế, chúng ta cần định vị #div-1a so với khối #content gốc. Và tại thời điểm này, định vị tương đối lại phát huy tác dụng.
4. vị trí: cố định
Định vị cố định (vị trí: cố định) là một phần phụ của định vị tuyệt đối. Điểm khác biệt duy nhất của nó là nó luôn nằm trong vùng hiển thị của màn hình và không di chuyển khi cuộn trang. Về mặt này, nó hơi giống một hình nền cố định.
#div-1a ( vị trí: cố định; trên cùng: 0; phải: 0; chiều rộng: 200px; )
Trong IE có vị trí: cố định, không phải mọi thứ đều suôn sẻ như chúng ta mong muốn, nhưng nó vẫn tồn tại nhiều cách bỏ qua những hạn chế này.
5. vị trí:tương đối + vị trí:tuyệt đối
Bằng cách gán vị trí tương đối cho khối #content (vị trí: tương đối), chúng ta có thể định vị bất kỳ phần tử con nào so với ranh giới của nó. Hãy đặt khối #div-1a ở góc trên cùng bên phải của khối #content.
#content ( vị trí: tương đối; ) #div-1a ( vị trí: tuyệt đối; trên cùng:0; phải:0; chiều rộng:200px; )
6. Hai cột
Được trang bị kiến thức từ các bước trước, bạn có thể thử tạo hai cột bằng cách sử dụng vị trí tương đối và tuyệt đối.
#content ( vị trí: tương đối; ) #div-1a ( vị trí: tuyệt đối; top:0; phải:0; chiều rộng:200px; ) #div-1b ( vị trí: tuyệt đối; top:0; left:0; width:200px ; )
Một trong những lợi thế của việc định vị tuyệt đối là khả năng đặt các phần tử theo bất kỳ thứ tự nào, bất kể chúng được định vị như thế nào trong đánh dấu. Trong ví dụ trên, khối #div-1b được đặt trước khối #div-1a.
Và bây giờ bạn sẽ có một câu hỏi: “Các phần tử còn lại trong ví dụ của chúng ta đã đi đâu?” Họ trốn dưới những khối được đặt hoàn hảo. May mắn thay, có một cách để khắc phục điều này.
7. Hai cột có chiều cao cố định
Một giải pháp là cung cấp chiều cao cố định cho vùng chứa các cột.
Giải pháp này không phù hợp lắm vì chúng ta không bao giờ biết trước kích thước văn bản sẽ nằm trong các cột và phông chữ nào sẽ được sử dụng.
8. Phao
Đối với các cột có chiều cao thay đổi, việc định vị tuyệt đối không phải là một tùy chọn, vì vậy hãy xem xét một tùy chọn khác.
Bằng cách gán một float cho khối, chúng ta đẩy nó sang cạnh phải (hoặc trái) càng xa càng tốt và văn bản theo sau khối sẽ chảy xung quanh nó. Kỹ thuật này thường được sử dụng cho hình ảnh, nhưng chúng ta sẽ sử dụng nó cho một nhiệm vụ phức tạp hơn vì đây là công cụ duy nhất mà chúng ta có thể sử dụng.
#div-1a ( float:left; width:200px; )
9. Loa “nổi”
Nếu chúng ta gán float: left cho khối đầu tiên rồi float: left cho khối thứ hai, mỗi khối sẽ được đẩy sang cạnh trái và chúng ta sẽ có hai cột, với chiều cao thay đổi.
Nhưng bây giờ chúng tôi gặp phải một vấn đề khác - các cột vượt ra ngoài vùng chứa chính, do đó phá vỡ toàn bộ bố cục. Đây là vấn đề phổ biến nhất đối với những người mới bắt đầu thiết kế bố cục, mặc dù nó có thể được giải quyết khá đơn giản.
10. Làm sạch phao
Làm sạch phao có thể được thực hiện theo hai cách. Nếu có một khối khác sau các cột, chỉ cần gán clear: cả hai cho nó là đủ.
Ngày nay, chỉ những kỹ thuật định vị cơ bản và những ví dụ đơn giản nhất mới được xem xét. Ngoài ra, để giúp những người mới bắt đầu thiết kế bố cục, tôi luôn giới thiệu một loạt bài viết của Ivan Sagalayev, bài viết này đã từng giúp tôi rất nhiều.
Vị trí bất thường!
Quyết định yếu tố nào sẽ hiển thị ở phía trước!
Các yếu tố có thể chồng lên nhau!
Định vị
Thuộc tính định vị CSS cho phép bạn định vị một phần tử. Họ cũng có thể định vị một phần tử phía sau phần tử khác và chỉ định điều gì sẽ xảy ra khi nội dung của phần tử đó quá lớn.
Các phần tử có thể được định vị bằng các thuộc tính trên, dưới, trái và phải. Tuy nhiên, các thuộc tính này sẽ không hoạt động trừ khi thuộc tính vị trí được đặt. Chúng cũng hoạt động khác nhau tùy thuộc vào phương pháp định vị.
Có bốn phương pháp định vị khác nhau.
Định vị tĩnh
Các phần tử HTML được định vị tĩnh theo mặc định. Phần tử được định vị tĩnh luôn được định vị theo luồng phần tử tiêu chuẩn trên trang.
Các phần tử được định vị tĩnh không bị ảnh hưởng bởi các thuộc tính trên, dưới, trái và phải.
Định vị cố định
Phần tử có vị trí cố định được định vị tương ứng với cửa sổ trình duyệt.
Nó sẽ không di chuyển ngay cả khi cửa sổ được cuộn:
Bình luận: IE7 và IE8 chỉ hỗ trợ giá trị cố định nếu loại tài liệu!DOCTYPE được chỉ định.
Các phần tử cố định được loại bỏ khỏi luồng thông thường. Tài liệu và các phần tử khác hoạt động như thể phần tử cố định không tồn tại.
Các phần tử cố định có thể chồng lên các phần tử khác.
Định vị tương đối
Một phần tử có vị trí tương đối được định vị so với vị trí bình thường của nó.
Các phần tử được định vị tương đối thường được sử dụng làm nơi chứa các phần tử được định vị tuyệt đối.
Định vị tuyệt đối
Phần tử được định vị tuyệt đối được định vị tương ứng với phần tử cha đầu tiên được định vị không phải ở vị trí tĩnh. Nếu không tìm thấy phần tử nào như vậy thì phần tử cha được coi là :
Các phần tử được định vị tuyệt đối sẽ bị xóa khỏi luồng phần tử tiêu chuẩn. Tài liệu và các phần tử khác hoạt động như thể phần tử được định vị tuyệt đối không tồn tại.
Các phần tử được định vị tuyệt đối có thể chồng lên các phần tử khác.
Các phần tử chồng chéo
Khi các phần tử nằm ngoài luồng tiêu chuẩn, chúng có thể chồng lên các phần tử khác.
Thuộc tính z-index chỉ định thứ tự dọc của một phần tử (phần tử nào sẽ được đặt ở phía trước hoặc phía sau các phần tử khác).
Một phần tử có thể có thứ tự dọc dương hoặc âm:
Phần tử có thứ tự dọc lớn hơn luôn ở phía trước phần tử có thứ tự dọc nhỏ hơn.
Bình luận: Nếu hai phần tử được định vị trùng nhau và không có thứ tự dọc nào được chỉ định thì phần tử nằm sau trong mã HTML sẽ được hiển thị ở trên cùng.
Thêm ví dụ
Thiết lập hình dạng của phần tử Ví dụ này minh họa cách xác định hình dạng của một phần tử. Phần tử được cắt bớt thành hình dạng này và sau đó được hiển thị.
Cách hiển thị phần tử bị tràn bằng cách cuộn Ví dụ này minh họa cách đặt thuộc tính tràn để tạo thanh cuộn khi nội dung của phần tử quá lớn để vừa với khu vực được chỉ định.
Cách buộc trình duyệt tự động xử lý tràn Ví dụ này minh họa cách buộc trình duyệt tự động xử lý lỗi tràn.
Thay đổi con trỏ Ví dụ này minh họa cách thay đổi con trỏ.
Tất cả thuộc tính định vị CSS
Số trong cột "CSS" cho biết thuộc tính được xác định trong phiên bản CSS nào (CSS1 hoặc CSS2).
Tài sản
Sự miêu tả
Giá trị
CSS
Trong HTML, tất cả các phần tử có thể được chia thành khối và nội tuyến. Các phần tử khối thường được biểu diễn dưới dạng các vùng hình chữ nhật với một lượng thông tin nhất định. Với sự giúp đỡ của họ, lưới trang được xây dựng. Các phần tử như vậy chiếm toàn bộ không gian có sẵn về chiều rộng và thường có dấu ngắt dòng trước và sau chúng. Các khối có thể được thụt lề, kích thước ngang và dọc.
Đặc điểm của các phần tử khối
Thẻ chặn bao gồm các thẻ làm nổi bật một lượng lớn thông tin văn bản: