Chính xác thì cái gì là cần thiết cho lề lề: 0 auto; làm việc?


205

Tôi biết rằng cài đặt margin: 0 auto;trên một phần tử được sử dụng để căn giữa nó (trái-phải). Tuy nhiên, tôi biết rằng phần tử và cha mẹ của nó phải đáp ứng các tiêu chí nhất định để lề tự động hoạt động và dường như tôi không bao giờ có thể làm được điều kỳ diệu.

Vì vậy, câu hỏi của tôi rất đơn giản: những thuộc tính CSS nào phải được đặt trên một phần tử và phần tử mẹ của nó để tập trung margin: 0 auto;vào bên trái con?


điều này dường như không bao giờ hoạt động đúng với tôi trong IE ... vì vậy tôi cũng tò mò về điều này.
mở

5
@Mark: IE sẽ xử lý margin: 0 auto;chính xác chỉ trong chế độ tiêu chuẩn, do đó bạn cần một loại tài liệu (như thể trước đây không cần thiết).
BoltClock

Câu trả lời:


292

Off đỉnh đầu của tôi:

  1. Phần tử phải ở cấp độ khối, ví dụ display: blockhoặcdisplay: table
  2. Phần tử không được nổi
  3. Phần tử không được có vị trí cố định hoặc tuyệt đối 1

Ra khỏi đầu người khác:

  1. Phần tử phải có widthkhông phải là auto2

Lưu ý rằng tất cả các điều kiện này phải đúng với phần tử được căn giữa để nó hoạt động.


1 Có một ngoại lệ cho điều này: nếu yếu tố cố định hoặc vị trí tuyệt đối của bạn có left: 0; right: 0, sẽ tập trung vào lề tự động .

2 Về mặt kỹ thuật, margin: 0 autokhông hoạt động với chiều rộng tự động, nhưng chiều rộng tự động được ưu tiên hơn so với lề tự động và kết quả là lề tự động bị loại bỏ, do đó dường như chúng "không hoạt động".


7
Hai câu trả lời 'Tắt đầu tôi': o
Russell Dias

4
thêm chiều rộng cố định và bạn đã có câu trả lời hoàn hảo
meo

1
Chỉ trích! Mọi người khác trả lời trong khi tôi đang mã hóa! Ngoài đỉnh đầu tôi cũng ...: O
Kyle

Tôi nhớ ol startthuộc tính (và không thể rút ra trong Markdown) :(
BoltClock

1
@Triynko: Cả câu hỏi và câu trả lời của tôi đều không nói gì về các thuộc tính trình bày HTML (câu hỏi thậm chí không được gắn thẻ [html]!), Vì vậy tôi không chắc chính xác bạn đang gọi bull là gì. Dù sao, trong khi mọi phần tử có thể được nhắm mục tiêu bằng CSS đều có thể có các thuộc tính chiều rộng và chiều cao CSS, không phải tất cả các phần tử HTML đều có thể có các thuộc tính trình bày tương ứng, và lý do đơn giản là nó không có ý nghĩa gì đối với chúng Các yếu tố HTML.
BoltClock

19

Ra khỏi đỉnh đầu của tôi, nó cần a width. Bạn cần chỉ định chiều rộng của container bạn đang định tâm (không phải chiều rộng cha).


16
Mọi thứ đang diễn ra trên đỉnh đầu của chúng tôi!
BoltClock

8

Quy tắc hoàn chỉnh cho CSS:

  1. ( display: blockwidthkhông tự động) HOẶCdisplay: table
  2. float: none
  3. position: relative

3

Ra khỏi đỉnh đầu của tôi, nếu phần tử không phải là một phần tử khối - hãy làm cho nó như vậy.

và sau đó cho nó một chiều rộng.


2

Nó cũng sẽ hoạt động với display: table - một thuộc tính hiển thị hữu ích trong trường hợp này vì nó không yêu cầu đặt chiều rộng. (Tôi biết bài đăng này đã 5 tuổi, nhưng nó vẫn phù hợp với người qua đường;)


2

Nằm trên đỉnh đầu con mèo của tôi, đảm bảo rằng divbạn đang cố gắng tập trung vào không được đặt thành width: 100%.

Nếu đúng như vậy, thì các quy tắc đặt ra trên div con là điều quan trọng.


1

Vui lòng xem ví dụ nhanh này Tôi đã tạo jsFiddle . Hopefull thật dễ hiểu. Bạn có thể sử dụng wrapperdiv với chiều rộng của trang để căn giữa. Lý do bạn phải đặt ra widthlà để trình duyệt biết bạn sẽ không bố trí lỏng.


1

Đây là gợi ý của tôi:

First: 
      1. Add display: block or table
      2. Add position: relative
      3. Add width:(percentage also works fine)
Second: 
      if above trick not works then you have to add float:none;

0

Có lẽ thật thú vị khi bạn không phải chỉ định chiều rộng cho một <button>phần tử để làm cho nó hoạt động - chỉ cần đảm bảo rằng nó có display:block: http://jsfiddle.net/muhuyttr/


-1

Đối với bất cứ ai chỉ là bây giờ đánh câu hỏi này, và không có khả năng sửa chữa margin: 0 auto, cái gì ở đây của tôi phát hiện ra bạn có thể thấy hữu ích: một tableyếu tố không có chiều rộng quy định phải có display: tablekhông display: block để cho margin: autođể làm việc. Điều này có thể rõ ràng với một số người, vì sự kết hợp của display: blockwidthgiá trị mặc định sẽ đưa ra một bảng mở rộng để điền vào vùng chứa của nó, nhưng nếu bạn muốn bảng lấy chiều rộng "tự nhiên" được căn giữa, bạn cầndisplay: table


Điều đó không đúng. (Mặc dù nếu bạn chỉ đưa ra display: blockthì nó sẽ không đáp ứng điều kiện 4 của câu trả lời được chấp nhận)
Quentin

@Quentin cảm ơn vì đã ngẩng cao đầu. Trong trường hợp của tôi, tôi không muốn bảng lấp đầy không gian ngang (dường như sẽ che khuất toàn bộ cuộc thảo luận về margin: 0 auto) và tôi cũng không thể chỉ định chiều rộng của bảng, vì nội dung của nó có thể có chiều rộng khác nhau. Trong trường hợp này, giải pháp duy nhất hoạt động (nghĩa là hiển thị bảng theo cách thông thường nhưng tập trung vào nó) không có quy tắc về chiều rộng display: tablemargin: 0 auto
samson
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.