Làm cách nào để căn giữa div tuyệt đối theo chiều ngang bằng CSS?


177

Tôi là một div và muốn nó được đặt ở giữa theo chiều ngang - mặc dù tôi cho nó margin:0 auto;không phải là trung tâm ...

.container {
    position: absolute;
    top: 15px;
    z-index: 2;
    width:40%;
    max-width: 960px;
    min-width: 600px;
    height: 60px;
    overflow: hidden;
    background: #fff; 
    margin:0 auto;
}


@LoganMzz không phải vì câu hỏi này có chiều rộng được biết đến.
Davbog

Câu trả lời:


408

Bạn cần phải thiết lập left: 0right: 0.

Điều này xác định khoảng cách để bù các cạnh biên từ các cạnh của cửa sổ.

Giống như 'trên cùng', nhưng chỉ định khoảng cách cạnh phải của hộp được bù với [trái / phải] của cạnh [phải / trái] của khối chứa hộp.

Nguồn: http://www.w3.org/TR/CSS2/visuren.html#poseition-props

Lưu ý: Phần tử phải có chiều rộng nhỏ hơn cửa sổ nếu không nó sẽ chiếm toàn bộ chiều rộng của cửa sổ.

Nếu bạn có thể sử dụng truy vấn phương tiện để chỉ định lề tối thiểu , sau đó chuyển sang autokích thước màn hình lớn hơn.


.container {
  left:0;
  right:0;

  margin-left: auto;
  margin-right: auto;

  position: absolute;
  width: 40%;

  outline: 1px solid black;
  background: white;
}
<div class="container">
  Donec ullamcorper nulla non metus auctor fringilla.
  Maecenas faucibus mollis interdum.
  Sed posuere consectetur est at lobortis.
  Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor.
  Sed posuere consectetur est at lobortis.
</div>


38
Lưu ý: widthlà phải!
Ijas Ameenudeen

2
Vâng. Điều này đúng ... sử dụng "text-align: centre;" và "trái: 0; phải: 0;" sẽ cho phép bạn định vị tuyệt đối một div trong khi giữ nó ở giữa theo chiều ngang.
Sterling Bourne

3
@AlexG Tôi vừa tải fiddle trong IE11 và nó hoạt động. Bạn có thể làm rõ?
Brian Webster

1
@AlexG nó hoạt động trong IE11, tuy nhiên nó sẽ không hoạt động nếu bạn không khai báo chiều rộng . Tôi đã từng gặp vấn đề tương tự. Bạn phải sử dụng chiều rộng như trong ví dụ.
Panama Jack

1
cũng cần thiết margin: autođể nó hoạt động trong trường hợp của chúng tôi
Crashalot

124

Điều này không hoạt động trong IE8 nhưng có thể là một lựa chọn để xem xét. Nó chủ yếu hữu ích nếu bạn không muốn chỉ định chiều rộng.

.element
{
  position: absolute;
  left: 50%;
  transform: translateX(-50%);
}

Điều đó có thể sẽ phụ thuộc vào yêu cầu của dự án của anh ấy.
Kris Selbekk

3
Tại thời điểm này, vẫn cần phải có một quy tắc với tiền tố -webkit- để nó hoạt động trong Safari.
Shikkediel

Thật không may, bằng cách nào đó, nó cũng áp dụng tính minh bạch của div xung quanh cho văn bản bên trong ..
dnl.re

1
Đây chắc chắn là câu trả lời. Đối với tôi, có chiều rộng được thiết lập cụ thể là tuyệt đối không đi.
Mike

14

Mặc dù câu trả lời trên là chính xác nhưng để đơn giản cho người mới, tất cả những gì bạn cần làm là đặt lề, trái và phải. đoạn mã sau sẽ làm điều đó với điều kiện là chiều rộng được đặtvị trí là tuyệt đối:

margin: 0 auto;
left: 0;
right: 0;

Bản giới thiệu:

.centeredBox {
    margin: 0 auto;
    left: 0;
    right: 0;
   
   
   /** Position should be absolute */
    position: absolute;
    /** And box must have a width, any width */
    width: 40%;
    background: #faebd7;
   
   }
<div class="centeredBox">Centered Box</div>


1
Điều này hoạt động hoàn hảo cho hình ảnh tuyệt đối trong một hàng cột bootstrap
ZachNag

5

Hộp linh hoạt? Bạn có thể sử dụng flexbox.

.box {
  display: -ms-flexbox;
  display: -webkit-flex;
  display: flex;
  
  -webkit-justify-content: center;
  justify-content: center;

}

.box div {
  border:1px solid grey;
  flex: 0 1 auto;
  align-self: auto;
  background: grey;
}
<div class="box">
  <div class="A">I'm horizontally centered.</div>
</div>


Điều này thực sự làm việc đẹp cho trường hợp độc đáo của tôi. left: 0; right: 0;mở rộng đến 100%, không phải là một tùy chọn vì phần tử con có màu nền và left: 50%; transform: translateY(-50%);không hoạt động vì điều đó hạn chế chiều rộng của trẻ đến 50%. Đây là giải pháp duy nhất bảo tồn kích thước linh hoạt của trẻ (chỉ giới hạn ở hỗ trợ trình duyệt). Cảm ơn!
Ben Dyer

3
.centerDiv {
    position: absolute;
    left: 0;
    right: 0;
    margin: 0 auto;
    text-align:center;
}


0

Dưới đây là một liên kết xin vui lòng sử dụng này để làm cho div ở trung tâm nếu vị trí là tuyệt đối.

HTML:

<div class="bar"></div>

CSS:

.bar{
  width:200px;
  border-top:4px solid red;
  position:absolute;
  margin-left:auto;
  margin-right:auto;
  left:0;
  right:0;
}

Ví dụ jsfiddle


-1

Bạn không thể sử dụng margin:auto;trên position:absolute;các phần tử, chỉ cần xóa nó nếu bạn không cần nó, tuy nhiên, nếu có, bạn có thể sử dụng left:30%;((100% -40%) / 2) và truy vấn phương tiện cho các giá trị tối đa và tối thiểu:

.container {
    position: absolute;
    top: 15px;
    left: 30%;
    z-index: 2;
    width:40%;
    height: 60px;
    overflow: hidden;
    background: #fff;
}

@media all and (min-width:960px) {

    .container {
        left: 50%;
        margin-left:-480px;
        width: 960px;
    }

}

@media all and (max-width:600px) {

    .container {
        left: 50%;
        margin-left:-300px;
        width: 600px;
    }

}
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.