Làm thế nào để căn chỉnh phần tử được định vị tuyệt đối vào trung tâm?


103

Tôi đang cố gắng chồng hai canvas lại với nhau và biến nó thành canvas hai lớp.

Tôi đã thấy một ví dụ ở đây:

<div style="position: relative;">
 <canvas id="layer1" width="100" height="100" 
   style="position: absolute; left: 0; top: 0; z-index: 0;"></canvas>
 <canvas id="layer2" width="100" height="100" 
   style="position: absolute; left: 0; top: 0; z-index: 1;"></canvas>
</div>

Nhưng tôi muốn đặt cả hai căn chỉnh canvas ở giữa màn hình. Nếu tôi đặt giá trị leftlà một hằng số, trong khi tôi thay đổi hướng của màn hình (khi tôi đang thực hiện aps trên iPad), canvas sẽ không ở giữa màn hình như cách nó hoạt động

<div align="center">

Ai có thể giúp tôi không?

Câu trả lời:


222

Nếu bạn đặt cả lề trái và phải thành 0, và lề trái và phải thành tự động, bạn có thể căn giữa một phần tử được định vị hoàn toàn.

position:absolute;
left:0;
right:0;
margin-left:auto;
margin-right:auto;

Bạn không cần cung cấp cho phần tử chiều rộng?
Gabriel Florit,

1
Tôi không nghĩ nó cần thiết trong trường hợp này.
Andrew

Chỉ cần cố gắng này và nó hoạt động, nó sẽ được đánh dấu là câu trả lời đúng
R Reveley

Bạn có thể sử dụng thay đổi các giá trị bên trái hoặc bên phải để di chuyển đối tượng ra khỏi trung tâm, cố định. Sử dụng left: 80px;sẽ di chuyển đối tượng 40px (!) Sang bên phải của tâm.
SPRBRN

4
Lưu ý: Chỉ hoạt động nếu phần tử được tạo kiểu có chiều rộng cho trước. (px hoặc%)
Johnny Wong

94

Nếu bạn muốn căn giữa một phần tử mà không biết chiều rộng và chiều cao của nó, hãy làm như sau:

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);

Thí dụ:

*{
  margin:0;
  padding:0;
}
section{
  background:red;
  height: 100vh;
  width: 100vw;
}
div{  
  width: 80vw;
  height: 80vh;
  background: white;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<section>
  <div>
    <h1>Popup</h1>
  </div>
</section>


16

Bạn đã thử sử dụng chưa ?:

left:50%;
top:50%;
margin-left:-[half the width] /* As pointed out on the comments by Chetan Sastry */

Không chắc liệu nó có hoạt động hay không, nhưng rất đáng để thử ...

Chỉnh sửa nhỏ : Đã thêm phần lề bên trái, như đã chỉ ra trên các nhận xét của Chetan ...


Ya Tôi đã thử điều này, nhưng canvas "bắt đầu" từ giữa nhưng không được "đặt" ở giữa màn hình. Vẫn còn cách để đặt sang trái: 50% và di chuyển canvas sang trái một lần nữa?
PaulLing

2
@PaulLingmargin-left: <negative half the width>
Chetan S

Có gì Chetan nói .. đánh tôi với nó: P Tôi sẽ sửa câu trả lời của tôi cho các thế hệ tương lai ...
Deleteman

Chiều rộng của màn hình là khác nhau khi iPad được đặt trong định hướng khác nhau
PaulLing

Ý của ông ấy là một nửa chiều rộng của phần tử canvas của bạn ..., điều đó sẽ làm cho nó có lề trái: -50px;
Deleteman


9

hãy thử phương pháp này, làm việc tốt cho tôi

position: absolute;
left: 50%;
transform: translateX(-50%); 

7

Tât cả nhưng điêu bạn phải lam la,

đảm bảo DIV cha mẹ của bạn có vị trí: họ hàng

và phần tử bạn muốn căn giữa, hãy đặt chiều cao và chiều rộng cho nó. sử dụng CSS sau

.layer {
    width: 600px; height: 500px;
    display: block;
    position:absolute;
    top:0;
    left: 0;
    right:0;
    bottom: 0;
    margin:auto;
  }
http://jsbin.com/aXEZUgEJ/1/

2
Giải pháp duy nhất phù hợp với tôi. Giá trị gốc được đặt thành flex, flex-grow & pour. Hình ảnh con được định vị ngoài khung hình đối với hình ảnh lớn hơn hình ảnh chính. Nó dường như không nhận thức được chiều rộng của cha mẹ. Nó đã được sửa ngay bây giờ. Cảm ơn nhiều!
Kai

0

Di chuyển div cha vào giữa với

left: 50%;
top: 50%;
margin-left: -50px;

Di chuyển lớp thứ hai lên lớp khác bằng

position: relative;
left: -100px;
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.