요소 너비를 만드는 방법 : 100 % 빼기 패딩?


396

html 입력이 있습니다.

입력은 padding: 5px 10px;부모 div의 너비 (유체)의 100 %가되기를 원합니다.

그러나를 사용 width: 100%;하면 입력을 100% + 20px어떻게 해결할 수 있습니까?


1
내가 15 분 전에 게시하지 않은이 답변을 참조하십시오 : stackoverflow.com/questions/5219030/… 이것은 IE7에서 작동하도록 요구하지 않는 한 완벽하게 작동합니다.
thirtydot

내 방법을 사용한 경우 방금 답변을 약간 수정했습니다. 일부 브라우저에서 "짝수"를 보장합니다.
thirtydot

@Hailwood 난 패딩 용액을 유지해야 input하고 IE7지지
블라디미르 Starkov

또한 calc 함수를 사용하여 아래 답변을 참조하십시오
Daan

답변:


485

box-sizing: border-box 빠르고 쉽게 고칠 수있는 방법입니다.

이것은 모든 최신 브라우저 및 IE8 이상에서 작동합니다.

데모는 다음과 같습니다. http://jsfiddle.net/thirtydot/QkmSk/301/

.content {
    width: 100%;
    box-sizing: border-box;
}

최신 브라우저에서는 브라우저 접두사 버전 ( -webkit-box-sizing등)이 필요하지 않습니다.


5
나는 이것이 그렇게 나쁜 해결책이라고 생각하지 않습니다. 일반적으로 여분의 div로 요소를 감싸는 것은 요소의 전체 너비를 부모 컨테이너를 넘어서지 않고도 요소를 채우는 좋은 방법입니다.
Jake Wilson

1
랩핑 div를 패딩하면 입력에 직접 패딩을 추가하는 것과 동일하지 않은 결과가 생성됩니다.
Felix Fung

@thirtydot 내가 입력의 폭을 유지 좀 더 유연하고 우아한 해결책이
블라디미르 Starkov

8
@thirtydot 그렇습니다. IE7에서는 깨져서 M $로 고칠 수 있습니다 :)
Petr Peller

또한 숨겨진 jdiv에 적용하지 않는 한 jQuery 사용자와 상자 크기 사이의 자동 크기 조정 텍스트 영역을 유지합니다.
Michael J. Calkins

276

이것이 box-sizingCSS에 있는 이유 입니다.

예제를 편집했으며 이제 Safari, Chrome, Firefox 및 Opera에서 작동합니다. 확인하십시오 : http://jsfiddle.net/mathias/Bupr3/ 내가 추가 한 것은 다음과 같습니다.

input {
  -webkit-box-sizing: border-box;
     -moz-box-sizing: border-box;
          box-sizing: border-box;
}

불행히도 IE7과 같은 오래된 브라우저는이를 지원하지 않습니다. 오래된 IE에서 작동하는 솔루션을 찾고 있다면 다른 답변을 확인하십시오.


3
+1이지만 caniuse.com/#search=box-sizing IE 8? 또한 github.com/Schepp/box-sizing-polyfill 은 IE 6-7에 대한 솔루션을 제공하는 것으로 보입니다.
Alix Axel

1
+1, IE에 관심이없는 경우 (예 : PhoneGap 사용시)
Luke B.

3
어떤 종류의 마법사입니까? 답변은 +1, 위의 의견은 +1 (정확히 필요한 것)입니다.
에두아르드 루카

20
너비가 +20이 아닌 기본 동작이어야합니다. 때로는 CSS가 심각하게 엉망인 것처럼 보입니다.
Soth

2
IE의 상자 크기 지원을 명확히하기 위해 IE 상자 크기 속성은 IE 문서 모드에 따라 다르며 "IE8 표준 모드"이상에서 작동합니다. 따라서 문서 모드가 "IE8 표준 모드"인 경우 IE8 브라우저 버전에서도 작동합니다. 도움이 되었기를 바랍니다.
Sanjeev

40

패딩도 백분율로 사용하고 너비에서 제거하십시오.

패딩 : 5 %;
폭 : 90 %;

19
참고로,이 솔루션은 유연하지 않은 레이아웃에만 적합합니다.
머프

+1, 이것의 문제는 내가 생각하는 경계 일 것입니다. 일반적으로 최대 1 ~ 3 픽셀의 "오른쪽"으로 보입니다. 하위 픽셀 반올림과 관련된 브라우저 불일치를 고려하면 결과를 예측할 수 없습니다.
Alix Axel

27

box-sizing와 같은 명확한 솔루션 을 사용하지 않고 할 수 있습니다 width~=99%.

jsFiddle 데모 :
여기에 이미지 설명을 입력하십시오

  • 입력의 유지 paddingborder
  • 음수 가로 입력에 추가 margin= border-width+horizontal padding
  • 이전 단계와 padding동일한 입력 래퍼 가로에 추가margin

HTML 마크 업 :

<div class="input_wrap">
    <input type="text" />
</div>

CSS :

div {
    padding: 6px 10px; /* equal to negative input's margin for mimic normal `div` box-sizing */
}

input {
    width: 100%; /* force to expand to container's width */ 
    padding: 5px 10px;
    border: none;
    margin: 0 -10px; /* negative margin = border-width + horizontal padding */ 
}

4
입력 패딩을 보상하기 위해 래퍼에 입력 및 패딩에 여백을 사용하는 것이 좋은 방법입니다.
maulik13

완전히 동의 !!! 나는이 솔루션을 사용했으며 더티 트릭없이 널리 작동합니다! 이 ..이 답변의 모든 종류에 대한 해결책이 될했다
앙드레 Figueiredo의에게

나는 부정적인 마진이 어떤 역할을하는지 잘 모르겠습니다. 내가 아는 것은 값이 틀리면 상자가 한쪽으로 끝나지만 대칭 마진이 이것을
고치는 것입니다.

21

CSS calc () 사용

매우 간단하고 굉장합니다.

input {
    width: -moz-calc(100% - 15px);
    width: -webkit-calc(100% - 15px);
    width: calc(100% - 15px);
}​

여기에서 볼 수 있듯이 : Div 너비 100 %에서 고정 된 양의 픽셀 빼기
webvitaly ( https://stackoverflow.com/users/713523/webvitaly )
원본 출처 : http://web-profile.com.ua/css/dev/css -폭 -100prc- 빼기 -100px /

다른 스레드에서 거의 놓 쳤기 때문에 이것을 여기에 복사했습니다.


그래도 수동으로 프로그래밍해야합니다. 이상적으로는 자동으로 결정됩니다.
JackHasaKeyboard

11

내가 15px 패딩이있는 컨테이너에 있다고 가정하면, 항상 내부 부분에 사용하는 것입니다.

width:auto;
right:15px;
left:15px;

그것은 15px 어느 쪽보다 작아야하는 너비로 안쪽 부분을 늘릴 것입니다.


필드 에 width:auto적용된 전체 예제를 게시 할 수 input있습니까?
jakubiszon

반 답변입니다. 요소의 기본 위치는 정적이므로 왼쪽 및 오른쪽은 여기서 아무것도 수행하지 않습니다. width auto 또한 초기 값이므로,이 모든 대답은 아무것도 아닙니다 :)
honk31

5

포지셔닝 트릭을 시도해 볼 수 있습니다. 입력을 position: relative고정 높이 로 div에 넣은 다음 입력에 position: absolute; left: 0; right: 0;, 원하는 패딩을 넣을 수 있습니다.

라이브 예


이것을 어떤 브라우저에서 테스트 했습니까? :(
thirtydot

흠, 크롬에서만 작동합니다. 그러나 나는 FF & IE에서 작동하는 것과 매우 비슷한 것을 얻었습니다.
Felix

<input>Firefox의 요소 (IEk에 대한 idk) 와 작동하지 않는 것 같습니다 . 그러나 <div>s 와 함께 작동합니다 . 그리고 아니, display: block<input>중 하나가 작동하지 않습니다 : - /
펠릭스

5

다음은 좋은 솔루션 예제가있는 codeontrack.com 의 권장 사항입니다 .

div의 너비를 100 %로 설정하는 대신 auto <div>로 설정하고가 표시 : block (기본값 :)으로 설정되어 있는지 확인하십시오 <div>.


3
링크를 직접 게시해서는 안됩니다. 해당 링크의 정보를 포함 할 수 있습니다. 그 이유는 내일 그 링크를 사용할 수 없을 것이고 당신의 대답은 더 이상 유효하지 않을 것입니다.
Amnesh Goel

4

입력 상자의 패딩을 랩퍼 요소로 이동하십시오.

<style>
div.outer{ background: red; padding: 10px; }
div.inner { border: 1px solid #888; padding: 5px 10px; background: white; }
input { width: 100%; border: none }
</style>

<div class="outer">
    <div class="inner">
       <input/>
    </div>
</div>

여기에 예를 참조하십시오 http://jsfiddle.net/L7wYD/1/


2

width : auto의 차이점을 이해하십시오. 폭 : 100 %; 폭 : 자동; 패딩을 포함하여 줄 바꿈 div에 주어진 정확한 값을 맞추기 위해 너비를 자동으로 계산합니다. 너비 100 %는 너비를 확장하고 패딩을 추가합니다.


<input>과 함께 작동하는 예제를 포함시킬 수 있습니까? 그렇지 않으면 당신은 단지 거위 추적에 사람들을 보내는 것입니다.
Mr Lister

0

컨테이너에 싸서 어떻습니까? 컨테이너는 다음과 같은 스타일을 가지고 있습니다.

{
    width:100%;
    border: 10px solid transparent;
}


-1

나에게을 사용 margin:15px;padding:10px 0 15px 23px;width:100%하면 결과는 다음과 같습니다.

여기에 이미지 설명을 입력하십시오

나를위한 해결책은 width:auto대신에 사용하는 것이 었습니다 width:100%. 내 새 코드는 다음과 같습니다

margin:15px;padding:10px 0 15px 23px;width:auto. 그런 다음 요소가 올바르게 정렬되었습니다.

여기에 이미지 설명을 입력하십시오


-1

나는 같은 문제가 있었다. 다음과 같이 수정하십시오.

width: 100%;
box-sizing: border-box;

-9

당신은 이것을 할 수 있습니다 :

width: auto;
padding: 20px;

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