Sự khác biệt giữa position: relative
và position: absolute
trong CSS là gì? Và khi nào bạn nên sử dụng?
Sự khác biệt giữa position: relative
và position: absolute
trong CSS là gì? Và khi nào bạn nên sử dụng?
Câu trả lời:
Định vị CSS tuyệt đối
position: absolute;
Định vị tuyệt đối là dễ hiểu nhất. Bạn bắt đầu với thuộc tính CSS position
:
position: absolute;
Điều này cho trình duyệt biết rằng bất cứ điều gì sẽ được định vị nên được loại bỏ khỏi luồng thông thường của tài liệu và sẽ được đặt ở một vị trí chính xác trên trang. Nó sẽ không ảnh hưởng đến cách các yếu tố trước nó hoặc sau nó trong HTML được định vị trên trang Web tuy nhiên nó sẽ chịu sự định vị của cha mẹ trừ khi bạn ghi đè lên nó.
Nếu bạn muốn định vị một phần tử 10 pixel từ đầu cửa sổ tài liệu, bạn sẽ sử dụng phần top
bù cho position
nó ở đó với absolute
định vị:
position: absolute;
top: 10px;
Phần tử này sau đó sẽ luôn hiển thị 10px
từ đầu trang bất kể nội dung nào đi qua, bên dưới hoặc bên trên phần tử (trực quan).
Bốn thuộc tính định vị là:
top
right
bottom
left
Để sử dụng chúng, bạn cần nghĩ về chúng như các thuộc tính bù. Nói cách khác, một yếu tố định vị right: 2px
không được di chuyển đúng 2px
. Phía bên phải của nó được bù từ phía bên phải của cửa sổ (hoặc vị trí của nó ghi đè lên cha mẹ) bằng 2px
. Điều tương tự cũng đúng với ba người kia.
Định vị tương đối
position: relative;
Định vị tương đối sử dụng bốn thuộc tính absolute
định vị giống như định vị. Nhưng thay vì dựa vào vị trí của phần tử trên cổng xem trình duyệt, nó bắt đầu từ vị trí của phần tử nếu nó vẫn ở trong luồng bình thường .
Ví dụ: nếu bạn có ba đoạn trên trang Web của mình và đoạn thứ ba có position: relative
kiểu được đặt trên đó, vị trí của nó sẽ được bù dựa trên vị trí hiện tại của nó - không phải từ các mặt ban đầu của cổng xem.
Đoạn 1.
Đoạn văn bản 2.
Đoạn 3. Trong ví dụ trên, đoạn thứ ba sẽ được định vị3em
từ phía bên trái của phần tử container, nhưng vẫn sẽ nằm dưới hai đoạn đầu tiên. Nó sẽ vẫn ở trong dòng chảy bình thường của tài liệu và chỉ được bù một chút. Nếu bạn thay đổi nó thành position: absolute;
, bất cứ điều gì theo sau nó sẽ hiển thị trên đầu trang, bởi vì nó sẽ không còn nằm trong luồng thông thường của tài liệu.
Ghi chú:
mặc định width
của một yếu tố được định vị tuyệt đối là chiều rộng của nội dung bên trong nó, không giống như một yếu tố được định vị tương đối trong đó mặc định width
là 100%
không gian mà nó có thể lấp đầy.
Bạn có thể có các yếu tố trùng lặp với các yếu tố được định vị tuyệt đối, trong khi bạn không thể thực hiện việc này với các yếu tố được định vị tương đối (nghĩa là không có sử dụng lề / định vị âm)
rất nhiều từ: tài nguyên này
Cả hai vị trí tuyệt đối của mối quan hệ và các khu vực khác nhau của người dùng đều thực sự tương đối, chỉ với các khung khác nhau. Định vị tuyệt đối của hoàng liên quan đến vị trí của một yếu tố kèm theo khác. Định vị tương đối của hoàng tử Vị trí liên quan đến vị trí mà phần tử sẽ có mà không có định vị.
Nó phụ thuộc vào nhu cầu và mục tiêu của bạn mà bạn sử dụng. Vị trí tương đối của hoàng tử phù hợp khi bạn muốn thay thế một phần tử từ vị trí mà nó có trong dòng các phần tử, ví dụ để làm cho một số ký tự xuất hiện ở vị trí siêu ký tự. Định vị tuyệt đối của hoàng tử phù hợp để đặt một phần tử trong một số hệ tọa độ được đặt bởi một phần tử khác, ví dụ như để overprint của một hình ảnh với một số văn bản.
Một cách đặc biệt, hãy sử dụng định vị của người thân có mối quan hệ trực tuyến, không có sự dịch chuyển (chỉ cài đặt position: relative
) để biến phần tử thành một khung tham chiếu, để bạn có thể sử dụng định vị tuyệt đối của LINE cho các phần tử bên trong nó (trong đánh dấu).
Relative positioning is relative to the position that the element itself would have without positioning
?? Phần tử không có định vị sẽ là "tĩnh" theo mặc định nhưng không tương đối
Một điều cần lưu ý là nếu bạn muốn một phần tử tuyệt đối được giới hạn trong một phần tử cha thì bạn cần đặt vị trí của phần tử cha thành tương đối. Điều đó sẽ giữ cho phần tử con có trong phần tử cha và nó sẽ không "tương đối" với toàn bộ cửa sổ.
Tôi đã viết một bài đăng trên blog đưa ra một ví dụ đơn giản tạo ra ảnh hưởng sau:
Nó có một div màu xanh lá cây được định vị tuyệt đối ở dưới cùng của div màu vàng cha.
1 http://blog.troygrosfield.com/2013/02/11/usiness-with-css-poseitions-creating-a-simple-proTHER-bar/
Vị trí tương đối:
Nếu bạn chỉ định vị trí: tương đối, thì bạn có thể sử dụng trên cùng hoặc dưới cùng, và trái hoặc phải để di chuyển phần tử tương đối đến nơi thường xảy ra trong tài liệu.
Vị trí tuyệt đối:
Khi bạn chỉ định vị trí: tuyệt đối, phần tử sẽ bị xóa khỏi tài liệu và được đặt chính xác nơi bạn bảo nó đi.
Dưới đây là một hướng dẫn tốt http://www.barelyfitz.com/screencast/html-training/css/poseitioning/ với cách sử dụng mẫu của cả hai vị trí tương ứng với định vị tuyệt đối và tương đối.
Tương đối: Liên quan đến vị trí hiện tại của nó, nhưng có thể được di chuyển. Hoặc Một yếu tố định vị ĐÁNG TIN CẬY được định vị so với ITSELF.
Tuyệt đối: Một phần tử được định vị của ABSOLUTE được định vị tương ứng với PHỤ HUYNH VỊ TRÍ TUYỆT VỜI NHẤT CỦA CNTT. nếu một cái có mặt, thì nó hoạt động như cố định ..... liên quan đến cửa sổ.
<div style="position:relative"> <!--2nd parent div-->
<div> <!--1st parent div-->
<div style="position:absolute;left:10px;....."> <!--Middle div-->
Md. Arif
</div>
</div>
</div>
Ở đây, div
vị trí cha mẹ thứ 2 là tương đối nên giữa div
sẽ thay đổi vị trí của nó đối với cha mẹ thứ 2 div
. Nếu div
vị trí cha mẹ thứ 1 sẽ tương đối thì Trung div
sẽ thay đổi vị trí của nó đối với cha mẹ thứ nhất div
. Chi tiết
Đặt một câu trả lời, như danh tiếng của tôi không đủ để bình luận. Nhưng đừng xem đây là một câu trả lời, chỉ là một thông tin bổ sung, như bản thân tôi, có một số vấn đề với cả chân trang và định vị.
Khi thiết lập trang, để chân trang của tôi luôn ở dưới cùng, với vị trí tuyệt đối và thùng chứa / trình bao chính với vị trí tương đối.
Sau đó, tôi đã tìm thấy một số vấn đề với nội dung văn bản của mình và một menu bên trong cùng một nội dung (phần trắng của trang giữa đầu trang và chân trang), khi đặt chúng thành tuyệt đối, chân trang không còn ở lại.
Postitioning là, như bạn nói một chủ đề phức tạp.
Giải pháp của tôi, đối với nội dung tôi muốn ở vị trí 'tuyệt đối' trong trang web của mình và không bị đẩy sang một bên, khi ví dụ mở menu thả xuống, là thực sự cung cấp cho nó bài đăng tương đối, và đặt nó xuống dưới 35em thực đơn. (35em là chiều cao của menu thả xuống của tôi, khi được mở rộng hoàn toàn)
Sau đó, Top: -35em, cho nội dung mà trước đó đã được đẩy sang một bên. Và sau đó thêm lề dưới: -35em. Bằng cách này, nội dung là "bên dưới" menu thả xuống của tôi, nhưng trực quan nó nằm cạnh menu thả xuống của tôi! Và khoảng trắng bên dưới xuống chân trang, chỉ có lề 10em, như trước khi bắt đầu chơi với cái này. Vì vậy, giải pháp của tôi cho vấn đề này là như thế này:
html, body {
margin:0;
padding:0;
height:100%;
}
h1 {
margin:0;
}
#webpage {
position:relative;
min-height:100%;
margin:0;
overflow:auto;
}
#header {
height:5em;
width:100%;
padding:0;
margin:0;
}
#text {
position:relative;
margin-bottom:-32em;
padding-top:2em;
padding-right:2em;
padding-bottom:10em;
background-repeat:no-repeat;
width:70%;
padding-left:auto;
margin-left:auto;
margin-right:auto;
right:10em;
float:right;
top:-32em;
}
#dropdown {
position:absolute;
left:0;
width:20%;
clear:both;
display:block;
position:relative;
top:1em;
height:35em;
}
#footer {
position:absolute;
width:100%;
right:0;
bottom:0;
height:5em;
margin:0;
margin-top:5em;
}
Tôi thấy câu hỏi của bạn được trả lời tốt, nhưng sau khi gặp nhiều rắc rối, tôi thấy đây là một giải pháp rất tốt và là cách để hiểu rõ hơn về cách định vị hoạt động .. Khi tôi đặt nội dung văn bản của mình, bên dưới trình đơn thả xuống của tôi, nó không ' t đẩy văn bản của tôi sang một bên. Nếu tôi thay đổi văn bản thành vị trí tuyệt đối, chân trang sẽ không giữ nguyên vị trí. Vì tôi có thể tin rằng đây là một vấn đề đối với nhiều người hơn tôi, tôi thêm điều này vào đây. Điều thực sự xảy ra, là tôi đặt văn bản, 35em, bên dưới phần thả xuống của tôi.
Sau đó, tôi trực quan đặt nó ngay bên cạnh nhau, với vị trí tương đối và trên cùng: -35em;, và buổi tối ra khỏi không gian rộng lớn bên dưới, với lề: -35em;
giá trị tiêu cực được đánh giá thấp đôi khi, chức năng rất tốt, khi một người hiểu các vị trí này tốt hơn!
Đương nhiên, vị trí cố định, cũng có vẻ logic cho chân trang của tôi, nhưng tôi thực sự muốn chân trang đi bên dưới khung nhìn, nếu văn bản hoặc nội dung, dài hơn khung nhìn. Và để ở dưới cùng, nếu có ít nội dung trên trang.
Thiết lập này đã sửa lỗi rất độc đáo và nhớ sử dụng 'em', không phải 'px' để bố trí trang linh hoạt / linh hoạt hơn! :)
(có thể có các giải pháp tốt hơn, nhưng điều này hiệu quả với tôi trên nhiều nền tảng, cũng như các thiết bị).
Tương đối so với tuyệt đối:
Hãy thảo luận về một kịch bản để giải thích sự khác biệt giữa tuyệt đối so với tương đối.
Bên trong phần tử cơ thể cho biết bạn có một phần tử tiêu đề có chiều cao là 95% của chế độ xem tức là 95vh. Trong thùng chứa này, bạn đặt một hình ảnh và giảm độ mờ xuống 0,5. Và bây giờ bạn muốn đặt một hình ảnh logo gần góc trên cùng bên trái. Tôi hy vọng bạn hiểu kịch bản. Vì vậy, bạn sẽ có một hình ảnh nhẹ hơn trong phần tiêu đề với logo ở trên cùng của nó ở vị trí được chỉ định.
Nhưng trước khi bắt đầu, tôi đã đặt lề và đệm thành 0 như thế này
*{
margin:0px;
padding:0px;
box-sizing: border-box;
}
Điều này đảm bảo không có lề mặc định và phần đệm được áp dụng cho các phần tử.
Vì vậy, bạn có thể đạt được yêu cầu của bạn theo hai cách.
Cách thứ nhất
trong css bạn viết
.logo{
float:left;
margin-top:40px;
margin-left:40px;
}
Nhưng bạn của tôi, đây là một thiết kế tồi khi đặt một hình ảnh mà bạn không cần thiết phải tiêu tốn quá nhiều không gian xung quanh bằng cách cho nó một chút lề khi không cần thiết. Tất cả bạn cần là đặt hình ảnh đến vị trí đó. Bạn quản lý nó bằng cách đệm nó với lề xung quanh. Lề đã chiếm không gian và đẩy nội dung của nó sâu hơn tạo ấn tượng rằng nó được định vị chính xác nơi bạn muốn. Hy vọng bạn hiểu vấn đề bằng cách làm việc xung quanh như thế này. Bạn đang chiếm nhiều không gian hơn mức cần thiết để chỉ đặt một hình ảnh tại vị trí mong muốn.
Bây giờ hãy thử một cách tiếp cận khác.
Cách thứ hai
bạn đặt thuộc tính vị trí của lớp tiêu đề thành tương đối như thế này
.header{
position: relative;
}
sau đó bạn đã thêm các thuộc tính sau vào lớp logo
.logo{
position:absolute;
top:40px;
left:40px
}
Có bạn đi. Bạn đặt hình ảnh ở cùng một nơi. Sẽ không có bất kỳ sự khác biệt rõ ràng nào trong việc định vị từ mắt thường giữa cách tiếp cận thứ nhất và cách tiếp cận thứ hai. Nhưng nếu bạn kiểm tra thành phần hình ảnh, bạn sẽ thấy rằng nó không chiếm thêm bất kỳ khoảng trống nào. Nó chiếm chính xác cùng một diện tích bằng chiều rộng và chiều cao của chính nó.
Vậy làm thế nào có thể như vậy? Tôi đã nói với lớp logo hình ảnh rằng bạn sẽ được đặt tương đối với lớp tiêu đề vì bạn là con của lớp này và tôi đặc biệt đề cập đến vị trí của nó là tương đối . Vì vậy, bất kỳ đứa trẻ nào của nó sẽ được đặt tương đối với góc trên cùng bên trái của nó. Và rằng vị trí của bạn cần phải được cố định bên trong phần tử cha này. vì vậy bạn được cho tuyệt đối. Và rằng bạn cần di chuyển một chút từ trên xuống và sang trái đến vị trí tôi muốn bạn trở thành. Do đó, bạn được cung cấp thuộc tính trên cùng và bên trái với giá trị 40px. Bằng cách này, bạn sẽ được đặt tương đối chỉ với cha mẹ của bạn. Vì vậy, nếu ngày mai tôi di chuyển cha mẹ của bạn lên hoặc xuống hoặc bất cứ nơi nào, bạn sẽ luôn luôn là 40px ở trên cùng và bên trái của góc trên cùng bên trái của cha mẹ bạn. Vì vậy, vị trí của bạn được cố định bên trong cha mẹ của bạn cho dù vị trí của bố mẹ bạn có cố định hay không trong tương lai (vì nó không tuyệt đối như bạn).
Vì vậy, sử dụng tương đối và tuyệt đối cho cha mẹ và con tương ứng. Thứ hai sử dụng nó khi bạn muốn chỉ đặt phần tử con tại một số vị trí bên trong phần tử cha. Không sử dụng chất độn như lề để đẩy nó một cách ép buộc. Cung cấp cho cha mẹ giá trị tương đối và con mà bạn muốn di chuyển, giá trị tuyệt đối. Chỉ định thuộc tính trên cùng, dưới cùng bên trái hoặc bên phải cho lớp con để đặt nó bên trong cha mẹ bất cứ nơi nào bạn muốn.
Cảm ơn.
Marco Pellicciotta: Vị trí của yếu tố bên trong một yếu tố khác có thể là tương đối hoặc tuyệt đối, về yếu tố bên trong nó.
Nếu bạn cần định vị phần tử trong chế độ xem cửa sổ trình duyệt, tốt nhất nên sử dụng vị trí: đã sửa