CSS kết xuất bên ngoài cha mẹ
Bây giờ là lúc chuyển sự chú ý của bạn sang cặp giá trị thuộc tính thứ hai của 8— 9 và 0. Cặp giá trị đầu tiên— 1 và 2—có liên quan chặt chẽ với nhau và chúng tôi đã xem xét những giá trị đó rất chi tiết trong bài viết trướcCác phần tử được định vị tuyệt đối được xóa hoàn toàn khỏi luồng tài liệu. Điều đó có nghĩa là chúng hoàn toàn không có tác dụng đối với phần tử gốc của chúng hoặc đối với các phần tử xuất hiện sau chúng trong mã nguồn. Do đó, một phần tử được định vị tuyệt đối sẽ chồng lên nội dung khác trừ khi bạn thực hiện hành động để ngăn chặn điều đó. Tất nhiên, đôi khi, sự trùng lặp này chính xác là những gì bạn mong muốn, nhưng bạn nên biết về nó để đảm bảo rằng bạn có được bố cục như ý muốn Định vị cố định thực chất chỉ là một dạng chuyên biệt của định vị tuyệt đối; Trong bài viết này, chúng ta sẽ thấy một số ví dụ thực tế về việc sử dụng cả định vị 9 và 0, xem xét một số yêu cầu hỗ trợ của trình duyệt và khám phá khái niệm về chỉ mục zTuy nhiên, trước tất cả những điều đó, chúng ta hãy đề cập đến một khái niệm tiên quyết cần thiết—chứa các khối chứa các khốiMột khái niệm thiết yếu khi nói đến định vị tuyệt đối là khối chứa. hộp khối mà vị trí và kích thước của hộp được định vị tuyệt đối có liên quan đến. Đối với các hộp tĩnh và các hộp được định vị tương đối, khối chứa là tổ tiên cấp khối gần nhất—nói cách khác là phần tử cha. Tuy nhiên, đối với các yếu tố được định vị tuyệt đối thì phức tạp hơn một chút. Trong trường hợp này, khối chứa là tổ tiên được định vị gần nhất. Theo “được định vị”, chúng tôi muốn nói đến một phần tử có thuộc tính 8 được đặt thành 2, 9 hoặc 0—nói cách khác, bất kỳ thứ gì ngoại trừ các phần tử tĩnh thông thườngVì vậy, bằng cách đặt 9 cho một phần tử, bạn biến nó thành khối chứa cho bất kỳ phần tử con nào được định vị tuyệt đối (các phần tử con), cho dù chúng xuất hiện ngay bên dưới phần tử được định vị tương đối trong cấu trúc phân cấp hay xa hơn nữa trong cấu trúc phân cấpNếu một phần tử được định vị tuyệt đối không có tổ tiên được định vị, thì khối chứa được gọi là “khối chứa ban đầu”, trong thực tế tương đương với phần tử 0. Nếu bạn đang xem trang web trên màn hình, điều này có nghĩa là cửa sổ trình duyệt; Các phần tử có vị trí cố định khác với điều này một chút—chúng luôn có khối chứa ban đầu làm khối chứa của chúng Vì vậy, hãy tóm tắt điều này trong một tập hợp các bước đơn giản—để tìm khối chứa cho một phần tử có 1 , đây là việc bạn cần làm
Định vị tuyệt đốiĐịnh vị cố định là một dạng đặc biệt của định vị tuyệt đối, vì vậy chúng ta sẽ nghiên cứu về định vị đó sau và tập trung vào trường hợp tổng quát hơn ở đây. Trừ khi có quy định khác, khi tôi sử dụng thuật ngữ “có vị trí tuyệt đối” từ giờ đến cuối bài viết, tôi sẽ đề cập đến cả những yếu tố có 8 và yếu tố có 1Chỉ định vị tríVới vị trí tương đối, bạn đã học được rằng các thuộc tính 0, 1, 2 và 3 có thể được sử dụng để xác định vị trí của hộp. Bạn sử dụng các thuộc tính giống nhau để xác định vị trí của một hộp được định vị tuyệt đối, nhưng cách bạn sử dụng chúng hoàn toàn khác nhauĐối với phần tử được định vị tương đối, bốn thuộc tính chỉ định khoảng cách tương đối để dịch chuyển hộp được tạo. Hãy nhớ rằng trong trường hợp định vị tương đối, chúng bổ sung cho nhau, do đó, 4 và 5 có nghĩa giống nhau và việc chỉ định cả 0 và 2 (hoặc 3 và 1) cho cùng một phần tử là không có ý nghĩa, bởi vì một trong các giá trị sẽ là Những điểm này không đúng trong trường hợp định vị tuyệt đối. Ở đây, cả bốn thuộc tính có thể được sử dụng đồng thời, để xác định khoảng cách từ mỗi cạnh của phần tử được định vị đến cạnh tương ứng của khối chứa. Bạn cũng có thể chỉ định vị trí của một trong các góc của hộp được định vị tuyệt đối—giả sử bằng cách sử dụng 0 và 3—và sau đó chỉ định kích thước của hộp bằng cách sử dụng 2 và 3 (hoặc chỉ cần sử dụng no 2 và 3 nếu bạn muốn Microsoft Internet Explorer phiên bản 6 trở lên không hỗ trợ phương pháp chỉ định cả bốn cạnh, nhưng chúng hỗ trợ phương pháp chỉ định một góc cộng với kích thước
Điều cần nhớ ở đây là các giá trị bạn đặt cho các thuộc tính 0, 1, 2 và 3 chỉ định khoảng cách từ các cạnh của phần tử đến các cạnh khối chứa tương ứng của chúng. Nó không giống như trong một hệ tọa độ nơi mỗi giá trị tương ứng với một điểm gốc. Chẳng hạn, 0 có nghĩa là cạnh phải của hộp được định vị tuyệt đối sẽ cách cạnh phải của khối chứa 2emĐiều cực kỳ quan trọng là phải biết khối chứa của bạn là gì khi bạn đang sử dụng định vị tuyệt đối. Đó là lý do tại sao việc đặt 9 trên khối chứa của bạn rất hữu ích, ngay cả khi bạn không thực sự thay đổi vị trí của hộp. Nó cho phép bạn tạo một phần tử thành khối chứa cho các phần tử con được định vị tuyệt đối của nó—nó cho phép bạn kiểm soátHãy thử một ví dụ để xem nó hoạt động như thế nào
Có hai điều thú vị xảy ra ở đây Trước hết, việc đặt 2 ở vị trí tuyệt đối đã loại bỏ hoàn toàn nó khỏi luồng tài liệu. Điều đó có nghĩa là cha mẹ của nó, 3, hiện không có con nào thuộc dòng chảy bình thường, do đó, chiều cao của nó giảm xuống bằng không. Cái trông giống như đường màu đỏ dày 2px thực ra là đường viền 1px xung quanh một phần tử có chiều cao bằng 0—bạn đang nhìn thấy đường viền trên và dưới không có gì ở giữaĐiều thú vị thứ hai là hộp được định vị tuyệt đối không di chuyển. Giá trị mặc định cho các thuộc tính 0, 1, 2 và 3 là 5, có nghĩa là hộp được định vị tuyệt đối sẽ xuất hiện chính xác ở vị trí của nó nếu nó không được định vị. Tuy nhiên, vì nó bị xóa khỏi luồng nên nó sẽ chồng lên bất kỳ phần tử nào trong luồng thông thường đi theo nó. Điều này thực sự rất hữu ích—bạn có thể dựa vào điều này nếu bạn chỉ muốn di chuyển hộp đã tạo theo một chiều. Chẳng hạn, trong menu thả xuống do CSS điều khiển, các ngăn “thả xuống” có thể được định vị tuyệt đối chỉ với thuộc tính 0 được chỉ định. Sau đó, chúng sẽ xuất hiện ở tọa độ dự kiến dọc theo trục X (giống như gốc của chúng), một cách tự động
Chỉ định kích thướcCác phần tử được định vị tuyệt đối sẽ co lại để phù hợp với nội dung của chúng trừ khi bạn chỉ định kích thước của chúng. Bạn có thể chỉ định chiều rộng bằng cách đặt thuộc tính 3 và 1 hoặc bằng cách đặt thuộc tính 2. Bạn có thể chỉ định chiều cao bằng cách đặt thuộc tính 0 và 2 hoặc bằng cách đặt thuộc tính 3Bất kỳ thuộc tính nào trong số sáu thuộc tính này đều có thể được chỉ định dưới dạng phần trăm. Tỷ lệ phần trăm, theo bản chất của chúng, so với một cái gì đó khác. Trong trường hợp này, chúng có liên quan đến kích thước của khối chứa Đối với phần tử được định vị tuyệt đối, giá trị phần trăm cho các thuộc tính 3, 1 và 2 tương ứng với chiều rộng của khối chứa. Giá trị phần trăm cho các thuộc tính 0, 2 và 3 có liên quan đến chiều cao của khối chứaInternet Explorer 6 trở lên, cũng như Opera 8 trở lên, đã hiểu sai điều này và thay vào đó đã sử dụng kích thước của khối chính. Hãy thử nghiệm với một ví dụ khác để xem điều đó có thể tạo ra sự khác biệt lớn như thế nào
Thứ nguyên thứ ba—z-indexViệc coi một trang web là hai chiều là điều tự nhiên. Công nghệ chưa phát triển đủ xa để màn hình 3D trở nên phổ biến, vì vậy chúng ta phải bằng lòng với chiều rộng và chiều cao cũng như hiệu ứng 3D giả. Nhưng kết xuất CSS thực sự xảy ra trong không gian ba chiều. Điều đó không có nghĩa là bạn có thể làm cho một phần tử lơ lửng phía trước màn hình—chưa—nhưng bạn có thể thực hiện một số việc hữu ích khác với các phần tử được định vị Hai trục chính trong một trang web là trục X ngang và trục Y dọc. Điểm gốc của hệ tọa độ này nằm ở góc trên bên trái của khung nhìn, tức là nơi cả hai giá trị X và Y đều bằng 0. Nhưng cũng có một trục Z, mà chúng ta có thể tưởng tượng là chạy vuông góc với bề mặt màn hình (hoặc với giấy, khi in). Các giá trị Z cao hơn biểu thị vị trí “phía trước” các giá trị Z thấp hơn. Các giá trị Z cũng có thể âm, cho biết vị trí “đằng sau” một điểm quy chiếu nào đó (Tôi sẽ giải thích điểm quy chiếu này sau một phút) Trước khi chúng tôi tiếp tục, hãy lưu ý rằng đây là một trong những chủ đề phức tạp nhất trong CSS, vì vậy đừng nản lòng nếu bạn không hiểu nó trong lần đọc đầu tiên Các phần tử được định vị (bao gồm cả các phần tử được định vị tương đối) được hiển thị trong một thứ được gọi là bối cảnh xếp chồng. Các phần tử trong ngữ cảnh xếp chồng có cùng điểm tham chiếu dọc theo trục Z. Tôi sẽ giải thích thêm về điều này dưới đây. Bạn có thể thay đổi vị trí Z (còn gọi là mức ngăn xếp) của một phần tử được định vị bằng cách sử dụng thuộc tính 10. Giá trị có thể là một số nguyên (có thể là số âm) hoặc một trong các từ khóa 5 hoặc 12. Giá trị mặc định là 5, có nghĩa là phần tử có cùng mức ngăn xếp với phần tử gốc của nóBạn nên lưu ý rằng bạn chỉ có thể chỉ định vị trí chỉ mục dọc theo trục Z. Bạn không thể làm cho một phần tử xuất hiện 19 pixel phía sau hoặc 5 cm phía trước phần tử khác. Hãy nghĩ về nó giống như một cỗ bài. bạn có thể xếp chồng các quân bài và quyết định rằng quân át bích phải nằm trên ba quân kim cương—mỗi quân bài có cấp độ xếp hoặc chỉ số Z Nếu bạn chỉ định 10 là số nguyên dương, bạn chỉ định cho nó một cấp độ ngăn xếp “đứng trước” các phần tử khác trong cùng ngữ cảnh xếp chồng có cấp độ ngăn xếp thấp hơn. Một 10 của 0 (không) có nghĩa giống như 5, nhưng có một sự khác biệt mà tôi sẽ quay lại sau một phút nữa. Giá trị số nguyên âm cho 10 chỉ định cấp độ ngăn xếp “đằng sau” cấp độ ngăn xếp của cha mẹKhi hai phần tử trong cùng ngữ cảnh xếp chồng có cùng cấp độ ngăn xếp, phần tử xuất hiện sau trong mã nguồn sẽ xuất hiện trên phần tử anh chị em trước đó của nó Trên thực tế, có thể có không ít hơn bảy lớp trong một ngữ cảnh xếp chồng và bất kỳ số lượng phần tử nào trong các lớp đó, nhưng đừng lo—bạn sẽ không phải xử lý bảy lớp trong một ngữ cảnh xếp chồng. Thứ tự hiển thị các phần tử (tất cả các phần tử, không chỉ các phần tử được định vị) trong một bối cảnh xếp chồng, từ sau ra trước như sau
Các mục được đánh dấu là các phần tử có cấp độ ngăn xếp mà chúng ta có thể thay đổi bằng cách sử dụng thuộc tính 10Toàn bộ điều này có thể khá khó tưởng tượng, vì vậy hãy làm một số thí nghiệm thực tế để minh họa chỉ số Z
Bối cảnh xếp chồng cục bộPhần còn lại của phần này thảo luận về ngữ cảnh xếp chồng cục bộ. Đây có lẽ không phải là điều bạn sẽ gặp phải trong công việc thiết kế bình thường của mình trừ khi bạn cố gắng thực hiện một số điều thực sự nâng cao với định vị tuyệt đối, nhưng tôi nghĩ tôi nên đưa nó vào cho đầy đủ. Bạn có thể chọn bỏ qua điều này nếu bạn muốn Mọi phần tử có 10 được chỉ định làm số nguyên sẽ thiết lập ngữ cảnh xếp chồng mới, “cục bộ”, trong đó chính phần tử đó có cấp độ ngăn xếp 0. Đây là sự khác biệt mà tôi đã đề cập trước đây giữa 27 và 28. Cái trước không thiết lập bối cảnh xếp chồng mới, nhưng cái sau thì cóKhi một phần tử thiết lập ngữ cảnh xếp chồng cục bộ, các mức xếp chồng của phần tử con được định vị của nó chỉ áp dụng trong ngữ cảnh cục bộ này. Những con cháu này có thể được xếp chồng lên nhau đối với nhau và đối với cha mẹ của chúng, nhưng không phải đối với anh chị em của cha mẹ. Nó giống như cha mẹ tạo ra một cái “lồng” xung quanh con cháu của nó, để chúng không thể trốn thoát khỏi nó. Con cháu có thể di chuyển lên xuống trong lồng này, nhưng không thể ra khỏi lồng. Cha mẹ và con cháu của nó sẽ tạo thành một đơn vị không thể chia cắt trong bối cảnh xếp chồng bao quanh cha mẹ Hãy tưởng tượng bạn đang phân loại giấy tờ của mình trước khi giao nó cho kế toán, người sẽ thực hiện các khoản thuế của bạn. Bạn có các báo cáo chi phí, biên lai, xác nhận đơn đặt hàng, v.v., và bạn xếp giấy này lên giấy khác—để giúp công việc kế toán của bạn dễ dàng hơn, bạn nhét các loại giấy tờ thuộc vào nhau vào các phong bì khác nhau Bối cảnh xếp chồng cục bộ tương tự như một phong bì như vậy. Nó giữ các phần tử liên quan với nhau và ngăn không cho các phần tử khác chèn vào giữa chúng. Bạn có thể sắp xếp nội dung bên trong mỗi phong bì theo ý muốn, nhưng thứ tự sắp xếp đó chỉ áp dụng trong phong bì đó và không ảnh hưởng đến toàn bộ chồng giấy. Ngăn xếp của bạn hiện chứa hỗn hợp các tờ giấy rời (các phần tử có cấp độ ngăn xếp 5) và phong bì (các phần tử có cấp độ ngăn xếp số nguyên). Các phong bì có mức chồng dương nằm trên cùng của các tờ giấy rời, trong khi các phong bì có mức chồng âm xuất hiện ở dưới cùng của đốngMỗi khi bạn gán một giá trị số nguyên cho thuộc tính 10 cho một phần tử, bạn sẽ tạo một “phong bì” chứa phần tử đó và phần tử con của nóHãy xem cách hoạt động của các ngữ cảnh xếp chồng cục bộ đó. Nó có thể trông khó hiểu, nhưng nó thực sự không khác nhiều so với những gì bạn đã thấy. Nếu bạn làm theo các ví dụ, bạn sẽ có thể cảm nhận được mọi thứ hoạt động như thế nào
Bối rối chưa?
Hình 1. Minh họa các bối cảnh xếp chồng khác nhau Các phần tử xuất hiện bên trong “2” sẽ luôn xuất hiện trước tất cả các phần tử bên trong "1". Sau đó, trong mỗi bối cảnh xếp chồng, các phần tử có số chỉ mục z cao hơn sẽ xuất hiện trước các phần tử có số chỉ mục z nhỏ. Nếu hai phần tử có cùng số chỉ mục z, phần tử xuất hiện sau trong đánh dấu sẽ xuất hiện trước Phần này có lẽ khá khó hiểu, đặc biệt nếu bạn là người mới sử dụng CSS. Vấn đề là bạn cần biết bối cảnh xếp chồng của mình nếu bạn đang cố thay đổi mức xếp chồng của các phần tử khác nhau. Nếu một phần tử thuộc ngữ cảnh xếp chồng cục bộ, bạn chỉ có thể thay đổi vị trí của nó dọc theo trục Z trong ngữ cảnh cục bộ đó. Một phần tử trong một ngữ cảnh xếp chồng cục bộ không thể trượt vào giữa hai phần tử trong một ngữ cảnh xếp chồng cục bộ khác Tin tốt là rất có thể bạn sẽ không bao giờ gặp phải những vấn đề này. Các thay đổi trong 10 không phổ biến lắm trong các bố cục tốt và nếu chúng xảy ra thì đó thường là trong một bối cảnh xếp chồngđịnh vị cố địnhMột phần tử với 8 được cố định đối với chế độ xem. Nó vẫn ở nguyên vị trí của nó, ngay cả khi tài liệu được cuộn. Đối với 43, một phần tử cố định sẽ được lặp lại trên mỗi trang inLưu ý rằng Internet Explorer phiên bản 6 trở lên hoàn toàn không hỗ trợ định vị cố định. Nếu bạn sử dụng một trong những trình duyệt đó, bạn sẽ không thể xem kết quả của các ví dụ trong phần này Trong khi vị trí và kích thước của phần tử có 1 có liên quan đến khối chứa nó, thì vị trí và kích thước của phần tử có 8 luôn có liên quan đến khối chứa ban đầu. Đây thường là khung nhìn. cửa sổ trình duyệt hoặc hộp trang của tờ báo. Để chứng minh điều này, trong ví dụ bên dưới, bạn sẽ cố định một trong các thành phần của mình. Bạn sẽ làm cho cái còn lại rất cao để tạo thanh cuộn, giúp bạn dễ dàng nhìn thấy hiệu ứng mà nó mang lại
Phần kết luậnCác phần tử được định vị tuyệt đối được xóa hoàn toàn khỏi luồng tài liệu. Chúng sẽ chồng lên nội dung khác trừ khi bạn nhường chỗ cho chúng. Nếu tất cả các phần tử con của vùng chứa được định vị tuyệt đối, chiều cao của phần tử cha sẽ thu gọn về 0. Các phần tử được định vị tuyệt đối được định vị đối với một khối chứa, đó là tổ tiên được định vị gần nhất. Nếu không có tổ tiên được định vị, khung nhìn sẽ là khối chứa Các thành phần có vị trí cố định được cố định đối với khung nhìn—khung nhìn luôn là khối chứa chúng. Chúng luôn xuất hiện ở cùng một vị trí bên trong cửa sổ trình duyệt khi được xem trên màn hình; . Vị trí của mỗi cạnh của một phần tử được định vị tuyệt đối có thể được chỉ định bằng các thuộc tính 0, 1, 2 và 3. Giá trị của mỗi thuộc tính xác định khoảng cách của cạnh đó đến cạnh tương ứng của khối chứa phần tửTất cả các phần tử được định vị được hiển thị ở một cấp độ ngăn xếp nhất định trong bối cảnh xếp chồng. Bạn có thể thay đổi cấp độ ngăn xếp của phần tử được định vị bằng cách sử dụng thuộc tính 10. Khi 10 được chỉ định làm giá trị số nguyên, phần tử sẽ thiết lập ngữ cảnh xếp chồng cục bộ cho phần tử con của nó
Làm cách nào để ghi đè phần đệm gốc trong CSS?Bạn chỉ cần thêm lề âm cho phần tử con khớp với phần đệm của phần tử gốc . Không cần đặt chiều rộng, thay đổi kích thước hộp hoặc sử dụng định vị tuyệt đối.
Làm thế nào một div con có thể phù hợp với div cha?Nếu bạn muốn các div con vừa với kích thước gốc, bạn nên đặt một lề ít nhất bằng kích thước của đường viền con trên các div con ( child. margin >= child. bordersize ).
Sự khác biệt giữa vị trí cố định và tuyệt đối là gì?Các phần tử được định vị tuyệt đối được định vị đối với một khối chứa, đó là tổ tiên được định vị gần nhất. Nếu không có tổ tiên được định vị, khung nhìn sẽ là khối chứa. Các thành phần có vị trí cố định được cố định đối với khung nhìn—khung nhìn luôn là khối chứa chúng
Tại sao chỉ số Z của tôi không hoạt động?Bạn đặt chỉ mục z trên phần tử tĩnh
. |