for 자:자동
초보 CSS 질문.내 생각에는 말이지…width:auto
당분간display:block
요소는 '사용 가능한 공간 채우기'를 의미합니다. 하만당은간분의 .<input>
요소 이것은 사실이 아닌 것 같습니다.예:
<body>
<form style='background:red'>
<input type='text' style='background:green; display:block; width:auto'>
</form>
</body>
그러면 두 가지 질문이 있습니다.
정확히 무엇에 대한 정의가 있습니까?
width:auto
무슨 뜻입니까?CSS 스펙이 애매하게 보이는데, 아마 관련 부분을 놓친 것 같습니다.다른 블록 레벨 요소처럼 사용 가능한 공간을 채우는 입력 필드에 대한 예상 동작을 달성할 수 있는 방법이 있습니까?
감사합니다!
안 안<input>
는 의너는 에생니다성됩에서 size
기여하다.기본값size
자동차 폭을 넓히는 이유입니다.
시도해 볼 수 있습니다.width:100%
아래의 예에서 설명한 바와 같이.
너비를 채우지 않음:
<form action='' method='post' style='width:200px;background:khaki'>
<input style='width:auto' />
</form>
채우기 너비:
<form action='' method='post' style='width:200px;background:khaki'>
<input style='width:100%' />
</form>
더 작은 크기, 더 작은 너비:
<form action='' method='post' style='width:200px;background:khaki'>
<input size='5' />
</form>
갱신하다
몇 분 후에 할 수 있는 최선의 방법이 여기 있습니다.FF, Chrome, Safari에서 1px 할인, IE에서 완벽합니다. (문제는 #^&* IE가 다른 모든 사람들과 다르게 테두리를 적용하여 일관성이 없다는 것입니다.)
<div style='padding:30px;width:200px;background:red'>
<form action='' method='post' style='width:200px;background:blue;padding:3px'>
<input size='' style='width:100%;margin:-3px;border:2px inset #eee' />
<br /><br />
<input size='' style='width:100%' />
</form>
</div>
각도를 사용한 원본 답변:왜냐면input
의width
에해의제어됩니다다니.size
속성, 이것이 내가 초기화하는 방법입니다.input
width
내용에 따라:
<input type="text" class="form-list-item-name" [size]="myInput.value.length" #myInput>
JavaScript용 업데이트(10/01/2022):저의 원래 대답은 Angular를 공부할 때부터였습니다.순수한 바닐라 자바스크립트가 필요한 경우 솔루션은 더욱 간단합니다.
<input type="text" oninput="this.size = this.value.length">
또는 입력 html 요소에 "입력" 이벤트 수신기를 추가하고 다음과 같은 코드를 실행합니다.
const myInput = document.querySelector('input');
myInput.addEventListener('input', this.typing);
(...)
typing(e) {
e.target.setAttribute('size', e.target.value.length);
}
관찰: 브라우저에 따라 입력이 150px에서 250px 사이의 기본 크기로 복원될 수 있습니다.size
를 가져옵니다.0
값입니다. 이 경우에는 다음과 같이 추가합니다.+1
value.length
:
<input type="text" oninput="this.size = this.value.length + 1">
OR:
typing(e) {
e.target.setAttribute('size', e.target.value.length + 1);
}
"정확하게 폭:auto가 의미하는 것에 대한 정의가 있습니까?CSS 스펙이 모호하게 보이지만, 아마도 관련 부분을 놓쳤을 것입니다."
실제 아무도 원본 포스터의 위 부분에 대한 질문에 대답하지 않았습니다.
정답은 다음과 같습니다. http://www.456bereastreet.com/archive/201112/the_difference_between_widthauto_and_width100/
너비 값이 자동인 한 요소는 컨테이너보다 넓지 않고 수평 여백, 패딩 및 테두리를 가질 수 있습니다.
반면 너비:100%를 지정하면 요소의 전체 너비는 포함 블록의 100%와 수평 여백, 패딩 및 테두리...이것이 당신이 원하는 것일 수도 있지만, 대부분 그렇지 않습니다.
차이를 시각화하기 위해 예를 들어 설명했습니다. http://www.456bereastreet.com/lab/width-auto/
다른 답변에 명시된 바와 같이, width: auto는 "auto" 또는 이와 유사한 것으로 설정할 수 없는 입력의 size 속성에 의해 생성되는 width로 인해 작동하지 않습니다.
박스 모델을 잘 사용할 수 있도록 몇 가지 해결 방법이 있지만, 제가 알기로는 환상적인 것은 없습니다.
먼저 비율을 사용하여 필드에 패딩을 설정하여 너비가 최대 100%가 되도록 할 수 있습니다. 예를 들어, 다음과 같습니다.
input {
width: 98%;
padding: 1%;
}
왼쪽과 오른쪽이 0으로 설정된 절대 위치 지정을 사용하는 것도 시도할 수 있습니다.이 마크업 사용:
<fieldset>
<input type="text" />
</fieldset>
그리고 이 CSS:
fieldset {
position: relative;
}
input {
position: absolute;
left: 0;
right: 0;
}
이 절대 위치 지정은 입력의 패딩 또는 마진에 관계없이 입력이 부모 필드 집합을 수평으로 채웁니다.그러나 이 문제의 큰 단점은 이제 필드 집합의 높이를 처리해야 한다는 것입니다. 필드 집합을 설정하지 않으면 0이 됩니다.입력값이 모두 동일한 높이이면 필드 세트의 높이를 입력값의 높이로 설정하기만 하면 됩니다.
이 외에도 JS 솔루션이 몇 가지 있지만, 저는 JS와 함께 기본적인 스타일링을 적용하는 것을 좋아하지 않습니다.
당신이 원하는 것이 아닐 수도 있지만, 제 해결책은 자동 너비 스타일링을 래퍼 디브에 적용한 다음 입력을 100%로 설정하는 것입니다.
이 문제를 해결하기 위해 약간의 자바스크립트를 포함할 의향이 있다면 정확한 크기 조정을 할 수 있습니다.이는 대략적인 너비에 의존하지 않습니다.size
또는em
너비에 , 하드코된요소폭않에의며으지존, ▁e,,type="number"
그것을 받아들이지 않는 것.size
기여하다.
요령은 당신의 것을 얻는 것입니다.input
가 꼭 기와가와 span
같은 내용으로, 실제로 보이지 않는 것을 가짐으로써.span
같은 내용으로.
너의 것을 둬라.input
富士山의 div
와 span
그것은 그것을 반영합니다.input
의 가치.두 가지 모두 제공input
리고그고.span
동일한 스타일링을 제공합니다.input
100%width
그런 다음 숨깁니다.span
절대 를 지정합니다.input
맨위앉다의 맨 위에 span
.
이런 식으로, 용기(그리고 따라서.input
않는 )의가 지정됩니다.span
.
https://codepen.io/spiffytech/pen/abwWRqo
<div id="relative-parent">
<span id="size-calibration"></span>
<input id="autosized-input" />
</div>
<style>
#relative-parent {
position: relative;
/* Have some width if the input is empty */
min-width: 1em;
/* Adjust size to match the span */
width: min-content;
}
#size-calibration {
visibility: hidden;
/* Prevent the span from wrapping the text when input value has multiple words, or collapsing multiple spaces into one */
white-space: pre;
}
#autosized-input {
position: absolute;
left: 0;
width: 100%;
}
#size-calibration, #autosized-input {
/* Normalize styles that the browser sets differently between spans and inputs.
Ideally, use a "CSS reset" here. */
font-family: "Arial";
padding: 0;
/* Demonstrate that this works for input with custom styles */
font-size: 24px;
}
</style>
<script>
function updateSize() {
const span = document.getElementById('size-calibration');
const input = document.getElementById('autosized-input')
span.innerText = input.value;
}
document.addEventListener('DOMContentLoaded', () => {
const input = document.getElementById('autosized-input');
input.oninput = updateSize;
// Provide some initial content
input.value = "I'm sized exactly right!"
updateSize();
})
</script>
제가 할 수 은 제가생수있방유은법한일는할각방을 사용하는 입니다.width:100%
입력 필드에도 패딩을 적용하려면 컨테이너를 배치하는 것보다label
레이블 주위로 형식을 대신 해당 레이블로 이동하고 레이블에 패딩을 지정합니다.입력 필드가 딱딱합니다.
답변 1 - "응답"은 좋은 답변/링크를 제공했습니다.간단히 말하면, "auto"가 기본값이므로 요소 너비의 변경 사항을 제거하는 것과 같습니다.
정답 2 - 사용width: 100%
대신.상위 컨테이너(이 경우 "양식")의 100%를 채웁니다.
JQuery 사용
$(document).on('input', '.input-fit-width', (e) => {
$(e.currentTarget).attr('size',e.currentTarget.value.length);
})
위의 방법을 모두 시도했지만 실패한 후에 스타일의 너비 속성을 단위 항목별로 수정하여 해결합니다.
tgt.style.width = `${(tgt.value.length + 1) / 2}em`
요즘은 플렉스나 그리드를 사용하면 훨씬 쉽게 할 수 있습니다. 기본값이 20으로 설정된 https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#size 의 기본 스타일/패턴을 재정의합니다. https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input#size 을 참조하십시오.
자바스크립트를 필요로 하지 않고 너비를 100%로 설정하지 않고 박스 크기를 처리할 수 있는 2가지 일반 CSS 옵션을 제공합니다.
flex/flex-grow
<form style='background:red;display:flex;'>
<input type='text' style='background:green; flex-grow:1'>
</form>
grid
<form style='background:red;display:grid;'>
<input type='text' style='background:green;'>
</form>
입력 크기를 자동으로 조정하는 Jquery 방법.
일반적으로:
$('#my_input_id').width( ($('#my_input_id').val().length) + "ch" );
텍스트 입력 시:
$(document).on("input", '#my_input_id', function () {
$(this).width( ($(this).val().length) + "ch" );
});
가장 간단한 해결책은 상위 요소의 너비를 설정하는 것이라고 생각합니다.
form{
width: 100%!important;
}
언급URL : https://stackoverflow.com/questions/4622086/widthauto-for-input-fields
'source' 카테고리의 다른 글
판다 데이터 프레임 인덱스에 값이 있는지 확인합니다. (0) | 2023.08.17 |
---|---|
동일한 파일에 대해 입력 유형=파일 "변경"을 감지하는 방법은 무엇입니까? (0) | 2023.08.17 |
유연한 항목을 올바르게 띄우기 (0) | 2023.08.17 |
전체 버전 트리 git 보기 (0) | 2023.08.17 |
javax.validation.constraint의 주석이 작동하지 않습니다. (0) | 2023.08.17 |