source

for 자:자동 for 자:자동 for 자:자동

factcode 2023. 8. 17. 21:54
반응형

for 자:자동

초보 CSS 질문.내 생각에는 말이지…width:auto당분간display:block요소는 '사용 가능한 공간 채우기'를 의미합니다. 하만당은간분의 .<input>요소 이것은 사실이 아닌 것 같습니다.예:

<body>
  <form style='background:red'>
    <input type='text' style='background:green; display:block; width:auto'>
  </form>
</body>

그러면 두 가지 질문이 있습니다.

  1. 정확히 무엇에 대한 정의가 있습니까?width:auto무슨 뜻입니까?CSS 스펙이 애매하게 보이는데, 아마 관련 부분을 놓친 것 같습니다.

  2. 다른 블록 레벨 요소처럼 사용 가능한 공간을 채우는 입력 필드에 대한 예상 동작을 달성할 수 있는 방법이 있습니까?

감사합니다!

안 안<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>

각도를 사용한 원본 답변:왜냐면inputwidth에해의제어됩니다다니.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값입니다. 이 경우에는 다음과 같이 추가합니다.+1value.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富士山의 divspan그것은 그것을 반영합니다.input의 가치.두 가지 모두 제공input 리고그고.span동일한 스타일링을 제공합니다.input100%width그런 다음 숨깁니다.span 절대 를 지정합니다.input맨위앉다의 맨 위에 span.

이런 식으로, 용기(그리고 따라서.input 않는 )의가 지정됩니다.span.

codepen screenshot

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

반응형