2010-02-23 40 views
6

Tôi đã suy nghĩ về các chế độ định vị CSS ngày hôm nay và nhận ra rằng tôi không bao giờ sử dụng position:relative cho bất kỳ điều gì khác ngoài việc làm cho position:absolute hoạt động trên các phần tử con.Vị trí là gì: tương đối hữu ích cho?

Tôi là một "nhà phát triển" nhiều hơn "nhà thiết kế", nhưng tôi đã thực hiện khá nhiều bố cục dựa trên CSS trong những năm qua. Tôi đã sử dụng bảng, float, lề (dương và âm), vị trí: tuyệt đối và thậm chí vị trí: cố định, nhưng tôi không nghĩ mình đã từng có dịp mà tôi đã sử dụng vị trí: tương đối để định vị thành phần.

Có một số kỹ thuật CSS-guru tuyệt vời dựa vào vị trí: tương đối (và được sử dụng trong các thiết kế trong thế giới thực) không? Tôi có bỏ lỡ không?

+0

Vâng, bạn đã đặt tên: offset 'position: absolute'. Đó là thực sự hữu ích. – zneak

+0

Đồng ý, nhưng tính hữu ích đó không thực sự liên quan đến chức năng thực tế của vị trí: tương đối. Do đó câu hỏi. :-P –

+0

Vâng, nó được xác định rõ ràng trong các tiêu chuẩn, và đó là cách duy nhất không phá hủy để làm điều đó, vì vậy tôi gọi nó là hữu ích và một chức năng thực tế. :) – zneak

Trả lời

6

Sẽ rất hữu ích nếu bạn muốn bù đắp phần tử mà không bị xung quanh với lề và hậu quả của nó đối với các yếu tố khác. Giả sử bạn muốn cố tình để một hình ảnh được đẩy ra khỏi mặt bên của một thùng chứa và (gần như) chồng lên nhau với một số nội dung trong một thùng chứa bên cạnh nó.

------------- ----- 
|   | | | 
| X -------| Y | 
|  | a || | 
|  -------| | 
------------- ----- 

container a là một phần của dòng chảy văn bản bình thường của X và bạn muốn giữ nó theo cách đó, bạn chỉ muốn nó thò ra bên một chút như là một tác gọn gàng. Nếu bạn làm điều đó với lợi nhuận, nó có thể nhận được thực sự lộn xộn và reflow một số nội dung khác của bạn.
Bằng cách sử dụng position: relative; left: 10px; bạn có thể nhận được hiệu ứng đó một cách dễ dàng mà không có các tác dụng phụ.

1

Tôi đã sử dụng nó nhiều hơn một lần để hiển thị những thứ như hình ảnh tiêu đề, một cái gì đó như:

<div id="header"> 
    <div id="logo"></div> 
<div> 

CSS:

#header { width: 1024px; margin: 0 auto; background: url(string.jpg); } 
#logo { position: relative; left: 40px; background: url(logo.jpg); } 

Trong trường hợp này phần đầu có sọc lớn tất cả các cách trên một hình nền, logo nằm trong sọc chỉ bù đắp một chút. Đơn giản hơn padding/margin trong một số trường hợp để thay đổi công cụ xung quanh một chút tôi nghĩ, có lẽ nó chỉ là ý kiến.

+0

Tôi không chắc chắn về "đơn giản hơn", vì nó yêu cầu 2 thuộc tính CSS thay vì một (tương ứng với 'lề trái: 40px'). Nếu có một số hậu quả khác của việc sử dụng vị trí: tương đối thì nó có thể đáng xem xét ... nhưng cho đến nay chúng trông giống hệt với tôi. –

+1

@Craig - Một trường hợp khác là tôi đã có một biểu tượng trên đầu trang mà cửa sổ bọc cho toàn bộ trang web do kiểu logo, do đó, thiết lập div là 'left: -20px;' cho ít vấn đề hơn lề âm, nhưng như tôi đã nói, có thể chỉ là một vấn đề của hương vị ... Tôi sử dụng nó hiếm khi tôi thừa nhận, nhưng nó tìm thấy nó là cách vào một bản định kiểu mỗi một lần trong một thời gian. –

+0

Nghe có vẻ như là một cách sử dụng tuyệt vời đối với tôi. –

1

Tôi chủ yếu sử dụng nó khi tôi muốn định vị một số phần tử tuyệt đối liên quan đến phần tử gốc của nó. Trong trường hợp đó, phần tử gốc cần được đặt thành position: relative. Đó là nơi nó được cho.

Hơn nữa, tôi cũng sử dụng nó ở đây và ở đó để khắc phục lỗi IE6/7/lỗi nhấp nháy trong các phần tử khối có hình nền.

6

Tôi đã sử dụng posotion: relative trong quá khứ cho phần tử vùng chứa, với các phần tử được định vị hoàn toàn bên trong nó (như bố cục cột ba cột). Ví dụ:

alt text http://www.freeimagehosting.net/uploads/2573654d07.png

tôi không cung cấp cho bất kỳ container bù đắp, nhưng đặt nó với position: relative cho phép tôi hoàn toàn vị trí của các cột liên quan đến thùng sơn. Nếu vùng chứa được đặt thành position: static, theo mặc định, các cột sẽ được định vị hoàn toàn tương ứng với chế độ xem trình duyệt, không phải vùng chứa.

+0

biểu đồ tuyệt vời đã giúp tôi trực quan hóa vấn đề của tôi ngay lập tức. cảm ơn. –

2

Tôi sử dụng position:relative; để các ký tự siêu âm vẫn có thể lên trên vertical-align: top; nhưng không cho phép chúng gây rối với phần đầu của các đoạn văn của tôi.

sup { 
    font-size: .7em; 
    vertical-align: top; 
    position: relative; 
    top: -.1em; 
} 
+0

Tôi nghĩ rằng sẽ có một lý do đánh máy để làm như vậy. –

Các vấn đề liên quan