두 div, 하나는 고정 너비, 다른 하나는 나머지


97

두 개의 div 컨테이너가 있습니다.

하나는 특정 너비가 필요하지만 다른 div가 나머지 공간을 차지하도록 조정해야합니다. 내가 할 수있는 방법이 있습니까?

.left {
    float: left;
    width: 83%;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    margin-right: 10px;
    overflow: auto;
}

.right {
    float: right;
    width: 16%;
    text-align: right;
    display: table-cell;
    vertical-align: middle;
    min-height: 50px;
    height: 100%;
    overflow: auto;
}
<div class="left"></div>
<div class="right"></div> <!-- needs to be 250px -->


4
고대 브라우저에 10 년 된 해킹을 사용하지 마십시오. 최신 Flexbox 솔루션을 보려면 아래로 스크롤하십시오.
Evgeny

1
Evgeny의 링크를 따르기 전에 사용자가 사용하기를 바라는 브라우저가 아니라 실제로 사용하는 브라우저를 고려하십시오. Flexbox는 교수의 IE 9에서 제대로 렌더링되지 않습니다. caniuse.com/#feat=flexbox
duhaime

@duhaime IE9는 전 세계적으로 0.13 % 사용
Evgeny

따라서 1000 명의 사용자 중 1 명 ...
duhaime 2010 년

답변:


127

참조 : http://jsfiddle.net/SpSjL/ (브라우저 너비 조정)

HTML :

<div class="right"></div>
<div class="left"></div>

CSS :

.left {
    overflow: hidden;
    min-height: 50px;
    border: 2px dashed #f0f;
}

.right {
    float: right;
    width: 250px;
    min-height: 50px;
    margin-left: 10px;
    border: 2px dashed #00f;
}

display: table일반적으로 더 나은 접근 방식 인을 사용 하여 수행 할 수도 있습니다. 입력 요소를 레이블과 같은 줄에 배치하려면 어떻게해야합니까?


4
나와 함께 작동하지 않습니다. 왼쪽은 100 % 너비로 가고 오른쪽은 250px입니다. 두 줄 :(
bear

19
div내 대답과 데모에서와 같이 의 순서를 바꿔야합니다 . right그런 다음 left.
thirtydot

1
전반적으로 이것은 나를 위해 작동하지만 때로는 다음 줄로 줄 바꿈하는 대신 왼쪽 div에 텍스트가있을 때 (그리고 공백이 있음) 오른쪽에서 잘립니다 (오른쪽 div가 시작되는 곳). 왼쪽 div에서 텍스트 줄 바꿈을 어떻게 만들 수 있습니까?
Guy

1
부동 DIV가 전체 너비를 채 웁니다. 콘텐츠가 부동 DIV보다 높거나 텍스트가 너무 긴 경우 잘못된 생각입니다.
netAction

47

2017 년이고 가장 좋은 방법은 IE10 +와 호환 되는 flexbox를 사용하는 것입니다 .

.box {
  display: flex;
}

.left {
  flex: 1;  /* grow */
  border: 1px dashed #f0f;
}

.right {
  flex: 0 0 250px; /* do not grow, do not shrink, start at 250px */
  border: 1px dashed #00f;
}
<div class="box">
  <div class="left">Left</div>
  <div class="right">Right 250px</div>
</div>


1
질문에 대한 귀하의 의견은 IE6를 지원하려는 시도에서 저를 구했습니다. 감사!
Mike Davlantes 2017 년

이것은 또한 훌륭하지만 CALC는 ()로 인해 IE9와 크롬 (26)과의 호환성에 훨씬 더 플렉스보다
돈 Dilanga

이것은 나를 위해 잘 작동했습니다. .right 너비를 정의 할 필요조차 없었습니다.
rotaercz

1
그것은 2017/2018/2019에서 우리는 여전히의 라인을 따라 의견이 IE 9주의 얻을 나를 죽이고
마이크 Devenney

43

CSS의 calc () 함수를 사용할 수 있습니다.

데모 : http://jsfiddle.net/A8zLY/543/

<div class="left"></div>
<div class="right"></div>

.left {
height:200px;
width:calc(100% - 200px);
background:blue;
float:left;
}

.right {
width:200px;
height:200px;
background:red;
float:right;   
}

이것이 당신을 도울 것입니다!


충고 감사합니다. 브라우저 간의 호환성을 확인한 결과 안정적인 사용을 위해 어느 정도 높았습니다
Farside

1
이 답변에서는 DIV 태그가 베스트 답변 에서처럼 바뀌지 않았기 때문에 이것이 베스트 답변으로 선택되어야합니다.
돈 Dilanga

14

소스 코드에서 순서를 바꿀 수 있다면 다음과 같이 할 수 있습니다.

HTML :

<div class="right"></div> // needs to be 250px    
<div class="left"></div>

CSS :

.right {
  width: 250px;
  float: right;
}   

예 : http://jsfiddle.net/blineberry/VHcPT/

컨테이너를 추가하면 현재 소스 코드 순서와 절대 위치를 사용할 수 있습니다.

HTML :

<div id="container">
  <div class="left"></div>
  <div class="right"></div>
</div>

CSS :

#container {
  /* set a width %, ems, px, whatever */
  position: relative;
}

.left {
  position: absolute;
  top: 0;
  left: 0;
  right: 250px;
}

.right {
  position: absolute;
  background: red;
  width: 250px;
  top: 0;
  right: 0;
}

여기에서, .leftDIV는에서 암시 적으로 설정 폭을 얻을 top, left그리고 right그것의 나머지 공간을 채우기 위해 수 있습니다 스타일 #container.

예 : http://jsfiddle.net/blineberry/VHcPT/3/


첫 번째 예는 실제로 작동하지 않는 것 같습니다. jsFiddle의 .left div는 실제로 화면의 전체 너비입니다. 두 div의 높이가 같으면 좋지만이 경우 .left에 5px 패딩을 추가하면 알 수 있습니다.
user3413723 nov.

1
두 번째 솔루션은 저에게 효과적이었습니다. 천재!
user3413723 2014

6

컨테이너에 포장 할 수 있다면 <div>위치 지정을 사용하여 왼쪽을에 <div>고정 시킬 수 있습니다 . 이 데모를left:0;right:250px 참조하십시오 . 이제 IE6에서는 a의 한 모서리 만 페이지에 절대 위치 할 수 있으므로 이것이 작동하지 않는다고 말할 것입니다 ( 전체 설명 은 여기참조하십시오 ).<div>


3

1- 래퍼 div를 가지고 패딩과 여백을 원하는대로 설정하십시오
2- 왼쪽 div를 필요한 너비로 만들고 왼쪽으로 부동하게 만드십시오
3- 오른쪽 div 여백을 왼쪽 너비와 동일하게 설정하십시오

.left
{
    ***width:300px;***
    float: left;
    overflow:hidden;

}

.right
{
    overflow: visible;
    ***margin-left:300px;***
}



<div class="wrapper">
    <div class="left">
        ...
    </div>

    <div class="right" >
        ...
    </div>

</div>

이것이 당신을 위해 작동하기를 바랍니다!



1

오른쪽을 특정 너비로 ​​설정하고 플로팅하고 왼쪽에서 오른쪽 여백을 250px로 설정하십시오.

.left {
vertical-align: middle;
min-height: 50px;
margin-right: 250px;
overflow: auto

}

.right {
width:250px;
text-align: right;
display: table-cell;
vertical-align: middle;
min-height: 50px;
height: 100%;
overflow: auto
}

됐지의 표시 유형을 죽이고 있는지 확인 당신은 명확한 설정 .left에 영향을 미치는 것 어디서나 필요 없다
meteorainer

어떤 종류의 래퍼 div가 있습니까? 온라인에서 조사 할 수있는 것이 있습니까? 아니면 완전히 로컬입니까?
meteorainer

완전히 지역적이지만 jsfiddle에 올려 보겠습니다.
bear

하하, 당신은 당신의 부유물을 제거했습니다 : 맞습니다. 또한 테두리 너비를 고려하는 것을 잊지 마십시오. 따라서 테두리 너비를 그대로 두려면 div 너비 중 하나에서 너비를 빼십시오.
meteorainer

0

크로스 브라우저 솔루션이 필요한 경우 내 접근 방식을 명확하고 쉽게 사용할 수 있습니다.

.left{
        position: absolute;
        height: 150px;
        width:150px;
        background: red;
        overflow: hidden;
        float:left;
}
.right{
        position:relative;
        height: 150px;
        width:100%;
        background: red;
        margin-left:150px;
        background: green;
        float:right;
}

-1

이것이 당신을 도울 수있는 간단한 사용

<table width="100%">
    <tr>
         <td width="200">fix width</td>
         <td><div>ha ha, this is the rest!</div></td>
    </tr>
</table>
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.