2011-09-29 48 views
45

Tôi có một phần tử có chiều rộng không xác định ban đầu, cụ thể là phương trình MathJax do người dùng cung cấp. Tôi có phần tử được đặt làm khối nội tuyến để đảm bảo rằng chiều rộng của phần tử phù hợp với nội dung của nó và do đó nó có chiều rộng được xác định. Tuy nhiên, điều này ngăn cản các phương pháp tập trung truyền thống. Đó là, sau đây không làm việc:Có thể căn giữa phần tử khối nội tuyến và nếu có, làm thế nào?

.equationElement 
{ 
    display: inline-block; 
    margin-left: auto; 
    margin-right: auto; 
} 

Và giải pháp không thể là:

.equationElement 
{ 
    display: block; 
    width: 100px; 
    margin-left: auto; 
    margin-right: auto; 
} 

Bởi vì tôi không có ý tưởng gì chiều rộng thực sự cần được trước và nếu người dùng nhấp vào phương trình, Tôi cần toàn bộ phương trình được đánh dấu, vì vậy tôi không thể thiết lập chiều rộng là 0. Có ai có một giải pháp để tập trung phương trình này?

+0

bằng cách này, đăng ký dường như Brok vi với Chrome trên trang đó. Không có gì xảy ra nếu tôi nhấp vào nút Đăng ký, có và không có JavaScript. – phihag

+0

Hấp dẫn! Tôi đang sử dụng Chrome và nó hoạt động tốt cho tôi. Bạn đang sử dụng loại tài khoản nào? Google, Facebook, Twitter? –

+1

myopenid. Tôi 100% nó sẽ không hoạt động trong google chrome nếu JavaScript bị tắt. Nút này thậm chí không có biểu mẫu và cũng không phải là nút gửi. – phihag

Trả lời

92

Chỉ cần đặt text-align: center; trên vùng chứa.

Here's a demo.

+0

Đây là một ý tưởng tuyệt vời và nó hoạt động nếu tôi đặt 'display: block' nhưng sau đó phần tử chiếm chiều rộng của vùng chứa hoặc tôi phải đặt chiều rộng theo cách thủ công nhưng tôi không biết chiều rộng sẽ là bao nhiêu . Nó không hoạt động nếu phần tử được đặt là 'inline-block'. Lý do tại sao nó cần phải là 'inline-block' là do chiều rộng của nó là động với nội dung của nó. Cảm ơn cho ý tưởng tuyệt vời mặc dù. Nếu bạn có thể thay đổi nó sao cho nó hoạt động cho 'inline-block' sẽ hoàn hảo. –

+1

@Vivek Viswanathan Bạn có thể giải thích lý do tại sao "Nó không hoạt động nếu phần tử được đặt là inline-block"? Đã thêm [link] (http://phihag.de/2011/so/inline-block-center.html) vào trang demo. – phihag

+1

Điều đó dường như hoạt động vì 'text-align: center' được đặt trên phần tử cha. Tuy nhiên, tôi không thể làm điều đó trong mã của tôi vì phần tử 'inline-block' có các anh chị em không thể làm trung tâm được. Cảm ơn một lần nữa vì sự giúp đỡ của bạn về điều này. –

19

Một cách khác để làm điều này (chỉ hoạt động cho các phần tử khối cũng):

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

Giải thích: trái: 50% sẽ xác định vị trí các yếu tố bắt đầu từ trung tâm của chứa phụ huynh, do đó bạn muốn kéo nó trở lại bằng một nửa chiều rộng của nó với biến đổi: translateX (-50%)

Lưu ý1: Đảm bảo đặt vị trí của cha mẹ thành vị trí: tương đối; nếu phụ huynh là hoàn toàn vị trí đặt một chiều rộng 100% và chiều cao, 0 padding và div lề bên trong nó và cung cấp cho nó position: relative

Note2: Cũng có thể được sửa đổi cho dọc trung với

top:50%; 
transform: translateY(-50%); 
+0

cái này thật tuyệt vời! – metahamza

+4

Bạn không cần định vị 'tuyệt đối' và có thể sử dụng' lề: 50%; ' – Kevin

+1

Bạn không cần tuyệt đối, nhưng trái/phải sẽ không hoạt động nếu vị trí là 'tĩnh' (vị trí mặc định'). Nếu 'tuyệt đối' không phải là một nhu cầu cụ thể, bạn nên sử dụng' relative' –

2

Một chút muộn, nhưng tương tự như câu trả lời Ivek, bạn có thể tránh sử dụng tờ khai position bằng cách sử dụng margin-left hơn left, vì vậy:

margin-left: 50%; transform: translateX(-50%);

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