display:block;width:auto;
텍스트 입력에서 div처럼 동작하지 않고 컨테이너 너비를 채우는 이유는 무엇 입니까?
나는 div가 단순히 자동 너비를 가진 블록 요소라는 인상을 받았습니다. 다음 코드에서 div와 입력의 치수가 동일하지 않아야합니까?
너비를 채우려면 입력을 어떻게 얻습니까? 입력에 패딩과 테두리가 있기 때문에 100 % 너비가 작동하지 않습니다 (최종 너비 1 픽셀 + 5 픽셀 + 100 % + 5 픽셀 + 1 픽셀). 고정 너비는 옵션이 아니며 더 유연한 것을 찾고 있습니다.
해결 방법에 대한 직접적인 답변을 선호합니다. 이것은 CSS 기발한 것처럼 보이고 나중에 이해하는 것이 좋습니다.
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>width:auto</title>
<style>
div, input {
border: 1px solid red;
height: 5px;
padding: 5px;
}
input, form {
display: block;
width: auto;
}
</style>
</head>
<body>
<div></div>
<form>
<input type="text" name="foo" />
</form>
</body>
</html>
래퍼 해결 방법으로 이미이 작업을 수행 할 수 있음을 지적해야합니다. 페이지 시맨틱 및 CSS 선택기 관계를 이용한 이러한 문제 외에도 문제의 본질과 INPUT 자체의 본질을 변경하여 극복 할 수 있는지 여부를 이해하려고합니다.
좋아, 이것은 정말로 이상하다! 해결책은 단순히 max-width:100%
로 입력에 추가 하는 것입니다 width:100%;padding:5px;
. 그러나 이것은 더 많은 질문을 제기하지만 (별도의 질문으로 할 것입니다) 너비는 일반적인 CSS 상자 모델을 사용하고 최대 너비는 Internet Explorer 테두리 상자 모델을 사용하는 것 같습니다. 얼마나 이상한가.
마지막으로 Firefox 3에서는 버그로 보입니다. Internet Explorer 8 및 Safari 4는 최대 너비를 100 % + padding + border로 제한합니다. 마지막으로 Internet Explorer에는 올바른 것이 있습니다.
세상에, 이거 대단해! 이것을 사용하는 과정에서, 유명한 전문가 인 Dean Edwards 와 Erik Arvidsson 의 많은 도움을 받아 임의의 패딩과 테두리가있는 요소에서 진정한 크로스 브라우저 너비 100 %를 만들기 위해 세 가지 별도의 솔루션을 함께 만들었습니다. 아래 답변을 참조하십시오. 이 솔루션에는 추가 HTML 마크 업이 필요하지 않으며 클래스 (또는 선택기) 및 레거시 Internet Explorer의 선택적 동작이 필요합니다.
input
CSS 2.1 사양을 준수하지 않는 요소 의 문제를 다루는 반면 링크 된 질문은 CSS 2.1 사양의 범위 내에서 완벽하게 발생하는 넘침 상자를 방지하는 방법을 묻습니다. 질문과 솔루션이 모두 겹치지 만 정확한 복제본을 호출하는 것은 단순히 잘못되었습니다.