2013-05-26 37 views
124

Trong ví dụ bên dưới, #logo được đặt ở vị trí hoàn toàn và tôi cần nó nằm ở giữa theo chiều ngang trong phạm vi #header. Thông thường, tôi sẽ làm một margin:0 auto cho các yếu tố tương đối vị trí nhưng tôi bị kẹt ở đây. Ai đó có thể chỉ cho tôi cách?Làm cách nào để xoay ngang phần tử vị trí tuyệt đối nằm ngang trong div chiều rộng 100%?

JS Fiddle: http://jsfiddle.net/DeTJH/

HTML

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

CSS

#header { 
    background:black; 
    height:50px; 
    width:100%; 
} 

#logo { 
    background:red; 
    height:50px; 
    position:absolute; 
    width:50px 
} 
+0

Câu hỏi hay ... những gì từng xảy ra để căn chỉnh: trung tâm;) ... không thử điều đó vì nó không hoạt động;) – craig1231

+1

Xin chào, bạn có nhận ra rằng với CSS như vậy, bạn đang định vị logo trong cửa sổ, không phải trong tiêu đề? –

+0

@Desi margin tự động hoạt động, bạn cần phải sử dụng nó đúng cách xem ví dụ của tôi –

Trả lời

247

Nếu bạn muốn sắp xếp trung tâm trên thuộc tính rời.
Điều tương tự đối với căn chỉnh trên cùng, bạn có thể sử dụng lề trên: (chiều rộng/2 của div của bạn), khái niệm này giống với thuộc tính bên trái.
Điều quan trọng là đặt phần tử tiêu đề thành vị trí: tương đối.
thử điều này:

#logo { 
    background:red; 
    height:50px; 
    position:absolute; 
    width:50px; 
    left:50%; 
    margin-left:-25px; 
} 

DEMO

Nếu bạn muốn không sử dụng tính toán bạn có thể làm điều này:

#logo { 
    background:red; 
    width:50px; 
    height:50px; 
    position:absolute; 
    left: 0; 
    right: 0; 
    margin: 0 auto; 
} 

DEMO2

+3

Tôi tiếp tục đến cho câu trả lời này một lần trong một thời gian từ google. : D –

104

Bạn sẽ phải gán cả leftright thuộc tính 0 giá trị cho margin: auto để căn giữa logo.

Vì vậy, trong trường hợp này:

#logo { 
    background:red; 
    height:50px; 
    position:absolute; 
    width:50px; 
    left: 0; 
    right: 0; 
    margin: 0 auto; 
} 

Bạn cũng có thể muốn đặt position: relative cho #header.

Điều này làm việc vì, thiết lập leftright về 0 sẽ kéo theo chiều ngang phần tử được định vị hoàn toàn. Bây giờ ma thuật xảy ra khi margin được đặt thành auto. margin chiếm hết không gian thừa (bằng nhau ở mỗi bên) để lại nội dung theo chỉ định width. Điều này dẫn đến nội dung trở thành căn giữa.

+7

Tôi thích điều này tốt hơn nhiều so với bù đắp với một lợi nhuận vì nó hoạt động với độ rộng động. – davidmdem

+0

Bạn có thể giải thích, tại sao nó hoạt động? –

+7

Đặt 'left' và' right' thành 0 sẽ kéo theo chiều ngang phần tử được định vị hoàn toàn theo chiều ngang. Bây giờ phép thuật xảy ra khi 'margin' được đặt thành' auto'. 'margin' chiếm tất cả khoảng trống thừa (bằng nhau ở mỗi bên) để lại nội dung cho nó được chỉ định' chiều rộng'. Điều này dẫn đến nội dung trở thành căn giữa. – Arjun

4

Theo kinh nghiệm của tôi, cách tốt nhất là right:0;, left:0;margin:0 auto. Bằng cách này nếu div là rộng thì bạn không bị cản trở bởi left: 50%; mà sẽ bù đắp div của bạn mà kết quả trong việc thêm lợi nhuận tiêu cực vv

DEMO http://jsfiddle.net/kevinPHPkevin/DeTJH/4/

#logo { 
    background:red; 
    height:50px; 
    position:absolute; 
    width:50px; 
    margin:0 auto; 
    right:0; 
    left:0; 
} 
+0

Vâng, tôi nói như vậy một lúc nào đó trở lại đây http://stackoverflow.com/a/16758185/1571437: D – Arjun

+0

cảm ơn, tôi thích nhiều phương pháp này bởi vì cho phép bạn có động kích cỡ trên mặt hàng, liên quan! – Alexis

4

đây là phương pháp thực hành tốt nhất để tập trung một div như vị trí tuyệt đối

DEMO FIDDLE

mã -

#header { 
background:black; 
height:90px; 
width:100%; 
position:relative; // you forgot this, this is very important 
} 

#logo { 
background:red; 
height:50px; 
position:absolute; 
width:50px; 
margin: auto; // margin auto works just you need to put top left bottom right as 0 
top:0; 
bottom:0; 
left:0; 
right:0; 
} 
12

Được mất tích việc sử dụng calc trong câu trả lời, đó là một giải pháp sạch hơn.

#logo { 
    position: absolute; 
    left: calc(50% - 25px); 
    height: 50px; 
    width: 50px; 
    background: red; 
} 

jsFiddle

trình trong hầu hết các trình duyệt hiện đại: http://caniuse.com/calc

Có lẽ vẫn còn quá sớm để sử dụng nó mà không có một dự phòng, nhưng tôi nghĩ có lẽ dành cho du khách trong tương lai nó sẽ là hữu ích.

+0

Tôi nghĩ rằng công thức trong hàm Clac, dường như hoạt động giống như lề trái: -50px; –

+1

Khác biệt sai: bạn phải trừ HALF chiều rộng của phần tử ... Trong trường hợp này left: calc (50% - 25px); –

+0

Bạn nói đúng. Cảm ơn! Nó được cập nhật ngay bây giờ. – pzin

1

của nó dễ dàng, chỉ cần quấn nó trong một hộp tương đối như sau:

<div class="relative"> 
<div class="absolute">LOGO</div> 
</div> 

Hộp tương đối có margin: 0 Auto; và, quan trọng, chiều rộng ...

+0

Chà, điều này thật tuyệt! Không thể tin rằng có rất nhiều cách để đạt được định tâm một div vị trí tuyệt đối, nhưng điều này chắc chắn là tốt hơn sau đó thiết lập lề tiêu cực và làm việc với bất kỳ chiều rộng là tốt! – YemSalat

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