이것은 오래된 Q이지만 flexbox 또는 위치 절대가없는 현대적인 솔루션은 다음과 같이 작동합니다.
margin-left: 50%;
transform: translateX(-50%);
.outer {
border: 1px solid green;
margin: 20px auto;
width: 20%;
padding: 10px 0;
/* overflow: hidden; */
}
.inner {
width: 150%;
background-color: gold;
/* Set left edge of inner element to 50% of the parent element */
margin-left: 50%;
/* Move to the left by 50% of own width */
transform: translateX(-50%);
}
<div class="outer">
<div class="inner">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Quos exercitationem error nemo amet cum quia eaque alias nihil, similique laboriosam enim expedita fugit neque earum et esse ad, dolores sapiente sit cumque vero odit! Ullam corrupti iure eum similique magnam voluptatum ipsam. Maxime ad cumque ut atque suscipit enim quidem. Lorem ipsum dolor sit amet, consectetur adipisicing elit. Excepturi impedit esse modi, porro quibusdam voluptate dolores molestias, sit dolorum veritatis laudantium rem, labore et nobis ratione. Ipsum, aliquid totam repellendus non fugiat id magni voluptate, doloribus tenetur illo mollitia. Voluptatum.</div>
</div>
왜 작동합니까?
언뜻보기에 우리는 오른쪽으로 50 %, 왼쪽으로 다시 50 % 이동합니다. 그러면 제로 시프트가 발생하므로 어떻게해야합니까?
그러나 상황이 중요하기 때문에 50 %는 동일하지 않습니다. 상대 단위를 사용하는 경우 여백은 부모 요소 너비의 백분율로 계산되며 변환은 동일한 요소에 대해 50 % 입니다.
CSS를 추가하기 전에 이런 상황이 있습니다
+-------------------------------------------+
| Parent element P of E |
| |
+-----------------------------------------------------------+
| Element E |
+-----------------------------------------------------------+
| |
+-------------------------------------------+
추가 된 스타일로 margin-left: 50%
우리가
+-------------------------------------------+
| Parent element P of E |
| |
| +-----------------------------------------------------------+
| | Element E |
| +-----------------------------------------------------------+
| | |
+---------------------|---------------------+
|========= a ========>|
a is 50% width of P
그리고 transform: translateX(-50%)
왼쪽으로 이동
+-------------------------------------------+
| Parent element P of E |
| |
+-----------------------------------------------------------+
| Element E | |
+-----------------------------------------------------------+
|<============ b ===========| |
| | |
+--------------------|----------------------+
|========= a =======>|
a is 50% width of P
b is 50% width of E
불행하게도 이것은 마진 백분율 계산이 항상 너비를 기준으로하기 때문에 수평 중심에 대해서만 작동합니다. 즉뿐만 margin-left
하고 margin-right
, 또한 margin-top
와 margin-bottom
폭에 대해 계산된다.
브라우저 호환성은 문제가되지 않습니다 :
https://caniuse.com/#feat=transforms2d