고정 div를 부모 컨테이너의 100 % 너비로 설정


83

패딩이있는 래퍼가 있고 너비가 40 % 인 부동 상대 div가 있습니다.

부동 상대 div 내부에는 부모와 동일한 크기를 원하는 고정 div가 있습니다. 고정 div가 문서의 흐름에서 제거되어 래퍼의 패딩을 무시한다는 것을 이해합니다.

HTML

<div id="wrapper">
  <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
  </div>
</div>

CSS

body { 
  height: 20000px 
}  
#wrapper {
  padding: 10%;
}  
#wrap { 
  float: left;
  position: relative;
  width: 40%; 
  background: #ccc; 
} 
#fixed { 
  position: fixed;
  width: inherit;
  padding: 0px;
  height: 10px;
  background-color: #333;
}

다음은 필수 바이올린입니다. http://jsfiddle.net/C93mk/489/

누구든지 이것을 달성하는 방법을 알고 있습니까?

나는 내가 성취하려는 것에 대해 더 자세히 보여주기 위해 바이올린을 수정했습니다. 혼란을 드려 죄송합니다 : http://jsfiddle.net/EVYRE/4/

답변:


41

.wrapper에 패딩 대신 .wrap 컨테이너에 여백을 사용할 수 있습니다.

body{ height:20000px }
#wrapper { padding: 0%; }
#wrap{ 
    float: left;
    position: relative;
    margin: 10%;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px; 
    height:10px;
    background-color:#333;    
}

jsfiddle


: 내가 뭐하는 거지 설명 더 나은 내 바이올린을 업데이트 jsfiddle.net/EVYRE/4
잭 머독

@JackMurdoch, js없이 찾는 유일한 방법은 calcfor rightleft속성 을 사용하는 것 입니다 . jsfiddle을
YD1m

래퍼가 최대 너비 (예 : 600px) 아래로 축소되면 작동하지 않지만 자바 스크립트 외부에서 수행 할 수 없다고 생각합니다. 도와 주셔서 감사합니다.
Jack Murdoch

5
실제로 작동하지 않습니다 . 이 바이올린 jsfiddle.net/EVYRE/4를보십시오 . #sidebar 너비는 부모 (#sidebar_wrap)에 상대적이지만 그렇지 않으며 부모를 오버플로합니다.
mlb 2014

고정 요소와 창 사이에 div가 하나만 있기 때문에 이것이 작동한다고 생각합니다. 고정 요소가 창 너비의 100 %가 아닌 요소에 여러 번 중첩 된 경우 작동하지 않습니다
Jay

3

이건 어때 ?

$( document ).ready(function() {
    $('#fixed').width($('#wrap').width());
});

jquery를 사용하면 모든 종류의 너비를 설정할 수 있습니다. :)

편집 : 주석에서 꿈에 의해 언급 했듯이이 효과를 위해 JQuery를 사용하는 것은 무의미하고 심지어 생산적입니다. 이 예제는 페이지의 다른 항목에 JQuery를 사용하는 사람들을 위해 작성했으며이 부분에서도 사용을 고려합니다. 제 답변으로 불편을 드려 죄송합니다.


"부모와 같은 크기를 원하는 고정 div가 부동 상대 div 안에 있습니다."- "#wrap"안에 그는 '#wrap'div와 같은 크기를 원하는 '#fixed'가 있습니다. (높이가 이미 설정되어 있으므로 변경하지 않았습니다). 내가 얻지 못한 부분을 설명 해주세요. 결과의 어느 부분이 다른 답변과 다른가요?
Hristo Valkanov 2013

2
안녕 친구, 불쾌하지 않습니다. 실제로 질문은 css로 답변을 제공하는 것이 었습니다. jQuery를 도입했습니다. 답변보다는 제안이어야했습니다.
dreamweiver jul.

나는 여백으로 다른 솔루션을 upvoted조차 알고 있지만 왜 아무도 jquery 솔루션을 배치 할 수 없는지 알 수 없습니다. 지금부터 5 ~ 6 개월 후 누군가가 Google을 통해이 질문을 발견하고 jquery 솔루션이 그의 경우에 더 적합하다고 생각한다면?
Hristo Valkanov 2013

1
귀하의 솔루션이 jquery 범위 측면에서 완벽하지만 일반 CSS가 아니라는 데 동의합니다. 내가 Jquery lib를 사용하지 않을 때 게시 한 것처럼 jquery에서 간단한 솔루션을 찾았 기 때문에 Jquery lib 파일을 32 KB 압축 / 91.6 KB (생산 모드) / 252 KB ( 가치가 없다면 jQuery lib를 사용하는 것은 실제로 불가능합니다. jQuery를 또는 사이트의 성능면에서 중요한 포인트의 하나의 가능한 단점
dreamweiver

4
창 크기를 조정하면 중단됩니다. 이제 크기 조정 계산을 수행해야합니다. 멋지고 비싸게 들립니다. nty
Jay

3

부모에 변환을 추가하고 (아무것도 할 필요가 없으며, 변환이 0 일 수 있음) 고정 자식의 너비를 100 %로 설정합니다.

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 40%; 
    background:#ccc; 
    transform: translate(0, 0);
}
#fixed{ 
    position:fixed;
    width:100%;
    padding:0px;
    height:10px;
    background-color:#333;
}
<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>


1

절대 위치를 사용하여 바닥 글을 상위 div의베이스에 고정 할 수 있습니다. 또한 랩에 10px padding-bottom을 추가했습니다 (바닥 글 높이와 일치). 절대 위치는 이미 위치 상대 속성을 부여했기 때문에 흐름 외부가 아니라 상위 div에 상대적입니다.

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    padding-bottom: 10px;
    position: relative;
    width: 40%; 
    background:#ccc; 
}
#fixed{ 
    position:absolute;
    width:100%;
    left: 0;
    bottom: 0;
    padding:0px;
    height:10px;
    background-color:#333;

}

http://jsfiddle.net/C93mk/497/


처음에는 시도했지만 문제는 스크롤 할 때 나머지 div와 함께 이동한다는 것입니다. 따라서 실제로 고정 위치 지정의 동작이 아닙니다
ThinkBonobo

1

컨테이너는 부모 요소 너비의 40 %입니다.

하지만 position : fixed를 사용하면 너비는 뷰포트 (문서) 너비를 기준으로합니다.

생각해 보면 부모 요소가 10 % 패딩 (왼쪽 및 오른쪽)을 가지고 있다는 것을 깨달았습니다. 즉, 요소가 전체 페이지 너비의 80 %를 차지한다는 것을 의미합니다. 따라서 고정 요소는 전체 너비의 80 %를 기준으로 40 %를 가져야합니다.

따라서 #fixed 클래스를

#fixed{ 
    position:fixed;
    width: calc(80% * 0.4);
    height:10px;
    background-color:#333;
}

sass, postcss 또는 다른 css 컴파일러를 사용하는 경우 변수를 사용하여 부모 요소의 패딩 값을 변경할 때 레이아웃이 깨지지 않도록 할 수 있습니다.

여기에 업데이트 된 바이올린이 있습니다 http://jsfiddle.net/C93mk/2343/

나는 그것이 도움이되기를 바랍니다.


0

마지막 jsfiddle 위에 한 가지를 놓쳤습니다.

#sidebar_wrap {
  width:40%;
  height:200px;
  background:green;
  float:right;
}
#sidebar {
  width:inherit;
  margin-top:10px;
  background-color:limegreen;
  position:fixed;
  max-width: 240px; /*This is you missed*/
}

그러나 이것이 당신의 문제를 어떻게 해결할 것입니까? 간단합니다. 먼저 예상보다 큰 이유를 설명하겠습니다.

고정 요소 #sidebar는 다른 모든 고정 요소와 마찬가지로 창 너비 크기를 기본으로 사용하여 다른 모든 고정 요소와 마찬가지로이 요소에서 정의 width:inherit되고 #sidebar_wrap너비 값으로 40 %를 가지면을 계산 window.width * 40%합니다. .container너비, #sidebar보다 클 것입니다#sidebar_wrap .

이 방법은 #sidebar_wrap보다 큰 것을 방지하기 위해 에서 최대 너비를 설정해야합니다 #sidebar_wrap.

작동하는 코드를 보여주는 jsfiddle 을 확인하고 이것이 어떻게 작동하는지 더 잘 설명하십시오.


-3

퍼센트 대신 px 제거 Padding: 10%;또는 사용 위한.wrap

예를 참조하십시오 : http://jsfiddle.net/C93mk/493/

HTML :

<div id="wrapper">
    <div id="wrap">
    Some relative item placed item
    <div id="fixed"></div>
    </div>
</div>

CSS :

body{ height:20000px }
#wrapper {padding:10%;}
#wrap{ 
    float: left;
    position: relative;
    width: 200px; 
    background:#ccc; 
}
#fixed{ 
    position:fixed;
    width:inherit;
    padding:0px;
    height:10px;
    background-color:#333;

}

너비가 #wrap에 백분율이되어야합니다. 그러나 당신은 고정을 넣었습니다.
Achintha Samindika 2013

이것은 고정 된 요소의 너비를 수동으로 설정하는 것과 동일하며 전혀 도움이되지 않습니다
Jay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.