절대 위치 요소를 중앙에 정렬하는 방법은 무엇입니까?


104

두 개의 캔버스를 함께 쌓아 이중 레이어 캔버스로 만들려고합니다.

여기에 예제가 있습니다.

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

하지만 화면 중앙에 두 캔버스 정렬을 설정하고 싶습니다. 값을 left상수로 설정하면 화면의 방향을 변경하는 동안 (iPad에서 aps를 수행하는 것처럼) 캔버스가 작동하는 것처럼 화면 중앙에 남아 있지 않습니다.

<div align="center">

누구든지 도와 줄 수 있습니까?

답변:


223

왼쪽과 오른쪽을 모두 0으로 설정하고 왼쪽과 오른쪽 여백을 자동으로 설정하면 절대 위치 요소를 중앙에 배치 할 수 있습니다.

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

요소에 너비를 지정할 필요도 없습니까?
Gabriel Florit 2013

1
이 경우에는 필요하지 않다고 생각합니다.
Andrew

그냥이 시도하고 그것이 정답으로 표시해야 작동합니다
R Reveley에게

왼쪽 또는 오른쪽 값을 변경하여 개체를 중앙에서 고정하여 이동할 수 있습니다. 를 사용 left: 80px;하면 개체가 가운데 오른쪽으로 40 픽셀 (!) 이동합니다.
SPRBRN

4
비고 : 스타일이 지정된 요소의 너비가 지정된 경우에만 작동합니다. (픽셀 또는 % 중)
조니 웡

95

너비와 높이를 모른 채 요소를 가운데 정렬하려면 다음을 수행하십시오.

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

예:

*{
  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

사용해 보셨나요? :

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

작동할지 확실하지 않지만 시도해 볼 가치가 있습니다 ...

사소한 편집 : Chetan의 의견에서 지적한대로 여백 왼쪽 부분을 추가했습니다.


Ya 나는 이것을 시도했지만 캔버스는 중간에서 "시작"하지만 화면 중간에 "배치"되지 않았습니다. 어쨌든 left : 50 %로 설정하고 캔버스를 다시 왼쪽으로 이동할 수 있습니까?
PaulLing 2010 년

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

무엇 Chetan에가 .. 말했다 것은 저를 이길 : P 나는 ... 미래 세대에 대한 내 대답을 편집 할 수 있습니다
Deleteman

아이 패드가 서로 다른 방향으로 배치 될 때 화면의 폭은 다르다
PaulLing

그는 캔버스 요소 너비의 절반을 의미했습니다. 그러면 margin-left : -50px;
Deleteman



7

당신이해야 할 일은

부모 DIV가 position : relative를 가지고 있는지 확인하십시오.

가운데 원하는 요소를 높이와 너비로 설정합니다. 다음 CSS 사용

.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
나를 위해 작동하는 유일한 솔루션. 부모는 flex, flex-grow & overflow로 설정됩니다. 부모보다 큰 이미지의 경우 자식이 프레임 밖에 배치되었습니다. 부모의 너비를 인식하지 못하는 것 같습니다. 이제 수정되었습니다. 큰 감사를 드린다!
Kai

0

부모 div를 중간으로 이동하십시오.

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

두 번째 레이어를 다른 레이어 위로 이동하십시오.

position: relative;
left: -100px;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.