입력 내 패딩은 너비 100 %를 끊습니다.


130

자, 우리는 객체에 패딩을 설정하면 너비가 명시 적으로 설정되어 있어도 너비가 변경된다는 것을 알고 있습니다. 이것에 대한 논리를 논할 수는 있지만, 일부 요소에 문제가 발생합니다.

대부분의 경우 하위 요소를 추가하고 100 %로 설정된 요소 대신 해당 요소에 패딩을 추가하지만 양식 입력의 경우 가능한 단계가 아닙니다.

이것을보십시오 : http://sandman.net/test/formcss.html

두 번째 입력의 패딩은 5px로 설정되어있어 기본 설정보다 훨씬 선호합니다. 그러나 불행히도 100 % 너비에 10px를 추가하는 것을 포함하여 모든 방향으로 입력이 10px 커집니다.

여기서 문제는 입력 내에 자식 요소를 추가 할 수 없어서 수정할 수 없다는 것입니다. 따라서 질문은 다음과 같습니다.

너비를 100 %로 유지하면서 입력 내부에 패딩을 추가하는 방법이 있습니까? 양식이 다른 너비의 부모로 렌더링되므로 부모의 너비를 미리 알 수 없으므로 100 % 여야합니다.


3
CSS3 속성 을 사용하는 방법 은 stackoverflow.com/questions/628500/… 을 참조하십시오box-sizing
Daniel LeCheminant

15
항상 예제 페이지를 유지해 주셔서 감사합니다. 누군가가 질문에 URL을 게시하고 답이 대답되거나 jsfiddle과 같은 것을 사용하지 않으면 다운됩니다.
Jonathan Dumaine

상자 크기 속성 사용과 관련하여; 내 문제는 같은 문제 였지만 높이는 높이를 100 %로 설정하면 높이 + 경계 + 패딩 = 컨테이너 높이를 의미합니다. 입력이 컨테이너의 실제 높이를 갖도록하려면 상자 크기 조정 : 내용 상자를 사용해야했습니다.
Skychan

내가 방금 말한 것을 제외하고는 IE에서 작동하지 않습니다. box-sizing : content-box를 사용하는 IE11은 height : 100 %로 높이를 전혀 조정하지 않습니다. 특정 px 높이로 존중합니다. 따라서 상자 크기가없는 높이 : 31px는 높이 : 31px + 상자 크기 : 내용 상자보다 6px 적습니다. 그러나 아이디어는 높이를 사용하는 것입니다 .100 %이므로 특정 픽셀 크기에 대해 걱정하지 않습니다!
Skychan

답변:


288

CSS3를 사용하면 box-sizing 속성을 사용 하여 브라우저가 입력 너비를 계산하는 방법을 변경할 수 있습니다 .

  input.input {
    width: 100%;
    -webkit-box-sizing: border-box; /* Safari/Chrome, other WebKit */
    -moz-box-sizing: border-box;    /* Firefox, other Gecko */
    box-sizing: border-box;         /* Opera/IE 8+ */
  }

자세한 내용은 여기를 참조하십시오 : http://css-tricks.com/box-sizing/


@ Víctor Dieppa Garriga 감사합니다. 훌륭한 솔루션입니다.
sinanakyazici

1
Chrome (any) : box-sizing Opera 8.5+ : box-sizing Firefox (any) : -moz-box-sizing Safari 3 : -webkit-box-sizing (5.1+ 버전에서는 접두사 없음) IE8 + : box 크기. 또한 나는 대답을 받아 들일 것을 권장합니다.보다 우아한 해결책입니다.
Baconbeastnz

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

솔직히, box-sizing: border-box;내가 생각한 첫 번째 일이지만 절대적으로 효과가 없습니다. 아마도 증조부모 님 display: flex;께서 이걸 망쳐 놓으 셨나요?
Cody

접두사없이 모든 주요 브라우저에서 지원되는 것처럼 보이며 여러 versoins에 사용되었습니다. caniuse.com/#feat=css3-boxsizing
Jason

7

크로스 브라우저와의 호환성이 무엇인지 모르겠지만 (firefox 및 safari에서 작동)이 솔루션을 시도 할 수 있습니다.

DIV.formvalue {
padding: 15px;
}
input.input {
margin: -5px;
}

(변경 한 값만 게시)


1
IE에서 문제가 발생합니다.
Tarik

글쎄, 그건별로 놀라지 않습니다 :) 마크 업을 변경하지 않고 쉬운 크로스 브라우저 솔루션이 있다고 생각하지 마십시오.
michaelk

좋아, margin : -5px를 추가하는 것이 분명히 위반이 아니기 때문에이 솔루션을 투표하고 있습니다. 이것을 사용하는 페이지에 네 번째 입력을 추가했으며 실제로 작동하는 것 같습니다. jigsaw.w3.org/css-validator/…
Sandman

7

하나의 옵션은 패딩이 있는를 감싸는 것 INPUT입니다 DIV.

CSS :

div.formvalue {
    background-color: #eee;
    border: 1px solid red;
    padding: 10px;
    margin: 0px;
}

div.paddedInput {
    padding: 5px;
    border: 1px solid black;
    background-color: white;
}

div.paddedInput input {
    border: 0px;
    width: 100%;
}

HTML :

<div class="formvalue">
    <div class="paddedInput"><input type="text" value="Padded!" /></div>
</div>

8
컨테이너 div를 패딩하면 입력 필드에 패딩을 추가 할 때 동일하지 않은 결과가 생성됩니다.
Felix Fung

Felix Fung의 말에 추가하십시오-패딩 영역에서 마우스로 클릭하는 능력을 상실하고 입력 필드에 초점을 맞추도록하십시오. 이 덜 알려진 / 알려진 문제를 지적하고 싶었습니다.이 해킹을 사용하는 웹 페이지를 사용할 때 끝이 없습니다.
eselk

5

잊혀진 사람들 calc은 여기서 구출 할 수 있습니다.

input {
  width: calc(100% - 1em);
  padding: 0.5em;
}

패딩이 요소의 너비에 추가 될 것이라는 것을 알고 있으므로 전체 너비에서 패딩을 빼기 만하면됩니다. 모든 주요 브라우저에서 지원되며 반응이 좋으며 지저분한 래퍼 div가 필요하지 않습니다.


4

이와 비슷한 문제가 발생했습니다. 100 %의 입력과 작은 패딩을 가진 tds가 있습니다. 내가 한 것은 다음과 같이 td의 패딩을 보상하는 것입니다.

.form td {
    padding-right:8px;
}

.form input, .form textarea {
    border: 1px solid black;
    padding:3px;
    width:100%;
}

입력 / 텍스트 영역의 테두리와 패딩을 포함하도록 8px의 패딩. 도움이 되었기를 바랍니다!


이 기술은 패딩 된 입력을 포함하는 셀의 너비를 셀이없는 셀과 정렬하는 데 효과적입니다. 100 % 너비의 입력을 포함하는 모든 TD에 패딩 오른쪽을 선택적으로 적용하십시오.
Seb Barre

1

아마도 border + background를에서 빼고 input대신 divborder + background 및 width : 100 %로 묶고 input?에 여백을 설정하십시오 .


이것이 현재이 문제에 사용하고있는 일종의 해킹이지만, "스타일 이유"또는 기타 이유로 입력에 테두리를 사용하려고합니다. 그러나 예, 이것이 제가 현재하고있는 방법입니다. 실용적인 해결책입니다
Sandman

1

내가 찾은 한 가지 해결책은 입력을 상대적으로 배치 된 부모 태그로 절대적으로 배치하는 것입니다.

<p class="full-width-input">
    <input type="text" class="text />
</p>

스타일을 적용하십시오 :

p.full-width-input {
    position: relative;
    height: 35px;
}

p.full-width-input input.text {
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    padding: 5px;
}

유일하게 알아야 할 것은 단락 태그의 높이 설정이 필요하다는 것입니다. 단, 위치가 지정된 어린이는 높이를 확장하지 않기 때문입니다. 이렇게하면 width: 100%부모 요소의 왼쪽과 오른쪽에 고정 하여 설정할 필요가 없습니다 .


0

패딩에 백분율을 사용해보십시오.

.input { 

  // remove border completely
  border: none;

  // don't forget to use the browser prefixes
  box-shadow: 0 0 0 1px silver;

  // Use PERCENTAGES for at least the horizontal padding
  padding: 5%; 

  // 100% - (2 * 5%)
  width: 90%; 

}

박스 섀도우를 볼 수없는 오래된 브라우저 사용자에 대해 걱정이된다면 입력에 미묘한 배경색을 백업으로 지정하십시오. 이런 종류의 물건에 픽셀을 사용하는 경우 다른 곳에서 픽셀을 사용할 가능성이 있으며 몇 가지 추가 문제가 발생할 수 있습니다.


-3

이것을 막기 위해 내가 아는 것은 100 % -10과 같은 값을 할당하는 것입니다. 그러나 호환성 문제가 있습니다.

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