Căn giữa trên một vạch định vị tuyệt đối


93
div#thing {
  position: absolute;
  top: 0px;
  z-index: 2;
  margin: 0 auto;
}

<div id="thing">
   <p>text text text with no fixed size, variable font</p>
</div>

Div ở trên cùng, nhưng tôi không thể căn giữa nó với <center>hoặc margin: 0 auto;

Câu trả lời:


152

Vấn đề của bạn có thể được giải quyết nếu bạn cung cấp divchiều rộng cố định, như sau:

div#thing {
    position: absolute;
    top: 0px;
    z-index: 2;
    width:400px;
    margin-left:-200px;
    left:50%;
}

1
Tôi không biết tại sao tôi không nghĩ đến điều đó, mặc dù chúng tôi sử dụng cùng một kỹ thuật để căn giữa theo chiều dọc ... Dù sao, cảm ơn bạn, bạn đã tiết kiệm cho tôi rất nhiều thời gian.
Aayush

1
những gì nếu người dùng đã theo chiều dọc cuộn xuống xuất hiện div trên đầu trang trong khi nó sẽ xuất hiện trên vùng hiển thị
PUG

Tôi đang hiển thị hình thu nhỏ của hình ảnh được phân chia lại động trong div lớp phủ của mình, vì vậy tôi không biết chiều rộng.
PUG

4
đây chỉ là một cách giải quyết, stackoverflow.com/questions/1776915/… dường như là giải pháp
PUG

1
Đây không phải là câu trả lời đúng. Loại phương tiện khác nhau sẽ không hỗ trợ đoạn mã này.
Sushan

97
div#thing
{
    position: absolute;
    width:400px;
    right: 0;
    left: 0;
    margin: auto;
}

3
Cái này hoạt động ra sao? Bạn có thể vui lòng cung cấp lý do tại sao câu trả lời của bạn là hợp lệ?
afuzzyllama 10/12/12

1
Tôi thực sự thích phương pháp này hơn những phương pháp khác 99% thời gian, bạn không phải xử lý phần đệm, đường viền, v.v. Tôi chưa bao giờ thấy cách này thất bại, lần sau hãy cung cấp một ví dụ nếu nó không thành công cho bạn.
Dan

1
Điều thú vị về giải pháp này là nó cũng hoạt động với phần trăm, chỉ không chắc liệu nó có tương thích với nhiều trình duyệt hay không
maljukan 02/02

1
Chà. Tôi đã không mong đợi này để làm việc nhưng nó làm việc cho tôi như một say mê
Awais Umar

4
Tôi đồng ý rằng đây phải là câu trả lời chính xác, biên độ -200px hét lên với tôi.
Mani5556

36

Tôi biết mình đến bữa tiệc muộn, nhưng tôi nghĩ rằng tôi sẽ cung cấp câu trả lời ở đây cho những người cần định vị theo chiều ngang của một mục tuyệt đối, khi bạn không biết chiều rộng chính xác của nó.

Thử cái này:

// Horizontal example.
div#thing {
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

Kỹ thuật tương tự cũng có thể được áp dụng, khi bạn có thể cần căn chỉnh theo chiều dọc, chỉ cần điều chỉnh các thuộc tính như sau:

// Vertical example.
div#thing {
  position: absolute;
  top: 50%;
  transform: translateY(-50%);
}

1
Chà! Điều này thật tuyệt! Bạn có thể giải thích nó hoạt động như thế nào? Chỉnh sửa: Đã thực hiện một số cuộc săn lùng và có vẻ như bên trái: 50% di chuyển vị trí bên trái của div đến trung tâm, vị trí này không thực sự là trung tâm. Nhưng sự thay đổi translateX nó trở lại 50% chiều rộng của nội dung
Aziz Javed

2
Vị trí tuyệt đối sẽ định vị từ trên cùng bên trái của một mục. Sử dụng dịch sẽ chuyển nó thành số lượng tương ứng với kích thước của nó.
Michael Giovanni Pumo

3
Michael, chỉ muốn bạn biết, bạn đã không đến muộn để bắt đầu bữa tiệc ... và cho những người không biết: biến đổi: dịch (-50%, -50%); làm cả định tâm dọc và ngang với 1 dòng
Marvel Moe

4

Để căn giữa nó theo cả chiều dọc và chiều ngang, hãy làm như sau:

div#thing {
   position: absolute;
   left: 50%;
   top: 50%;
   transform: translate(-50%, -50%);
}

0

Nếu bạn cần có chiều rộng tương đối (tính theo phần trăm), bạn có thể bọc div của mình ở vị trí tuyệt đối:

div#wrapper {
    position: absolute;
    width: 100%;
    text-align: center;
}

Hãy nhớ rằng để định vị tuyệt đối một phần tử, phần tử mẹ phải được định vị tương đối.


0

Tôi đã gặp vấn đề tương tự và hạn chế của tôi là tôi không thể có chiều rộng được xác định trước. Nếu phần tử của bạn không có chiều rộng cố định, hãy thử điều này

div#thing 
{ 
  position: absolute; 
  top: 0px; 
  z-index: 2; 
  left:0;
  right:0;
 }

div#thing-body
{
  text-align:center;
}

sau đó sửa đổi html của bạn để trông giống như thế này

<div id="thing">
 <div id="thing-child">
  <p>text text text with no fixed size, variable font</p>
 </div>
</div>

0

Hoặc bạn có thể sử dụng các đơn vị tương đối, ví dụ:

#thing {
    position: absolute;
    width: 50vw;
    right: 25vw;
}

0

.contentBlock {
    width: {define width}
    width: 400px;
    position: absolute;
    left: 0;
    right: 0;
    margin-left: auto;
    margin-right: auto;
 
}


-22

Đúng:

div#thing { text-align:center; }

5
Điều này sẽ căn chỉnh các nội dung trong một div. Nó sẽ không căn chỉnh div ở giữa trang. Nó cũng sẽ không căn chỉnh một div được định vị tuyệt đối theo bất kỳ cách nào khác với nội dung bên trong nó là một phần của luồng tài liệu.
CarterMan
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.