동적 너비 (CSS)가있는 중앙 고정 div


89

이 CSS를 가질 div가 있습니다.

#some_kind_of_popup
{
    position: fixed;
    top: 100px;
    min-height: 300px;
    width: 90%;
    max-width: 900px;
}

이제이 div를 중앙에 배치하려면 어떻게해야합니까? 사용할 수 margin-left: -450px; left: 50%;있지만 화면이 900 픽셀 이상일 때만 작동합니다. 그 후 (윈도우가 900 픽셀 미만일 때) 더 이상 중앙에 위치하지 않습니다.

나는 물론 어떤 종류의 js로 이것을 할 수 있지만 CSS로 이것을 수행하는 "더 정확한"것이 있습니까?


4
@Liam-동의하지 않습니다.이 질문은 그 자체로 솔직하다고 생각합니다. 이러한 질문은 중앙에 고정 너비가없는 div를 갖는 것과 관련하여이 질문에 대답하지 않습니다.
Joshua M

Joshua가 말한 것은 다른 div를 중앙에 배치하기위한 것입니다.
gubbfett

7
@Liam-그 외에도 div margin: 0 auto에서 사용할 수 없습니다 position: fixed. 질문도 읽었습니까?
Joshua M

^ 아니. 나는 그것도 시도했다. : p
gubbfett

3
@JoshuaM 귀하의 주장이 100 % 정확하지 않습니다. 내 대답을 참조하십시오.
laconbass

답변:


222

fixed또는 absolute배치 된 요소 설정을 rightleft0, 배치 된 요소를 중앙에 배치 하는 것처럼 margin-left& 로 할 수 있습니다 .margin-rightautostatic

#example {
    position: fixed;
    /* center the element */
    right: 0;
    left: 0;
    margin-right: auto;
    margin-left: auto;
    /* give it dimensions */
    min-height: 10em;
    width: 90%;
}

이 바이올린에서 작업 하는 이 예제를 참조하십시오 .


1
언급하자면 ... 예상치 못한 것은 아니지만 IE7에서는 실패합니다. 여기 왼쪽에서 0px에 위치합니다. 그것은 어떻게하는지 이제까지 작업 완벽한 IE 8.
gubbfett

요소의 너비가 화면의 너비보다 클 때는 작동하지 않습니다. 그런 상황에서 작동하면 좋을 것입니다.
andrewb 2014

1
@andrewb 당신은 모두에 동등하게 부정적인 마진을 적용 할 수 rightleft적어도의 value >= witdth / 2에서 볼 수 있듯이, jsfiddle.net/PvfFy/168 하지만 우아한 접근 이럴 비입니다. 재미로 크롬에서 테스트 해
봤지만

5
질문의 범위를 벗어나면 요소의 너비 설정에 따라 다르므로 너비가 다양하거나 알 수없는 동적 콘텐츠가있는 경우에는 좋지 않습니다. 센터링을 제쳐두고 일반적으로 디스플레이를 사용합니다 : 인라인 블록 및 설정된 너비 없음. 누구든지 그 경우에 no-js 솔루션이 있습니까?
수수께끼

4
질문은 동적 너비 라고 말합니다 . 그게 전체 문제입니다. 무시할 수는 없습니다.
Gil Epshtain 2018

54

CSS3의 transform속성을 안전하게 사용할 수있는 또 다른 방법은 다음과 같습니다 .

.fixed-horizontal-center
{
    position: fixed;
    top: 100px; /* or whatever top you need */
    left: 50%;
    width: auto;
    -webkit-transform: translateX(-50%);
    -moz-transform: translateX(-50%);
    -ms-transform: translateX(-50%);
    -o-transform: translateX(-50%);
    transform: translateX(-50%);
}

... 또는 수평 및 수직 센터링을 모두 원하는 경우 :

.fixed-center
{
    position: fixed;
    top: 50%;
    left: 50%;
    width: auto;
    height: auto;
    -webkit-transform: translate(-50%,-50%);
    -moz-transform: translate(-50%,-50%);
    -ms-transform: translate(-50%,-50%);
    -o-transform: translate(-50%,-50%);
    transform: translate(-50%,-50%);
}

5
최신 브라우저의 경우이 답변에 대한 최고의 솔루션입니다! 진정한 `float : center ' 와 같은 유일한 하나는 래핑 요소 주위를 클릭 할 수 있고 주위를 낚시 할 필요가 없다는 점입니다. 이 대답을 사랑하십시오!
SpYk3HH

1
결과 값이 부동 소수점이면 부드럽게 처리되므로 텍스트를 가운데에 백분율로 변환하지 마십시오. Ho boy, 당신은 그것을 원하지 않습니다.
gnou

CSS 변환을 사용하면 단순한 텍스트 이상에서 스무딩이 발생할 수 있습니다. 변형의 결과로 펑키 한 테두리가 생겼습니다.
Nathan K

1
화면 크기를 변경할 때 (부서의 크기에 따라 다름) 조기에 축소 될 가능성이있어 부서 가장자리에 큰 경계선이 생깁니다.
단일 법인

7
<div id="container">
    <div id="some_kind_of_popup">
        center me
    </div>
</div>

용기에 포장해야합니다. 여기 CSS입니다

#container{
    position: fixed;
    top: 100px;
    width: 100%;
    text-align: center;
}
#some_kind_of_popup{
    display:inline-block;
    width: 90%;
    max-width: 900px;  
    min-height: 300px;  
}

아, 당신 생각이 좋아요. 고정 div는 실제 결과가있는 다른 div의 컨테이너 일 뿐입니 까? 이거 먹어 볼게요!
gubbfett

나는 당신의 대답의 직관성이 마음에 들지만 그것이 ie6 / 7의 지원을 어떻게 허용할지 모르겠습니다.
Mathew Berg

1
@MathewBerg, IE6 / 7에 대한 좋은 지적입니다. 이 경우 귀하의 답변이 가장 잘 작동합니다. 이것은 약간의 OT이지만 개인적으로 개발자가 <= ie7에 대한 문제를 수정하는 데 시간을 소비해서는 안된다고 생각합니다. 실제로 개발자는 이전 시스템을 사용하는 사람과 회사가 업그레이드하도록 강제하기 위해 이러한 브라우저를 차단해야한다고 생각합니다. 그 아이디어를 유료 고객에게 판매하는 것은 얼마나 어려운 일입니다! )
gubbfett

예,하지만 안타깝게도 일부 회사는 미래에 관계없이 기존 브라우저에 대한 지원을 요구합니다. 계속해서 필요에 따라 내 또는 laconbass의 대답을 수락하십시오.
Mathew Berg

1
"컨테이너"를 클릭 할 수 없기 때문에이 기능도 작동하지 않습니다.
SpYk3HH

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