programing

입력 옆의 형태로 레이블 정렬

newnotes 2023. 9. 12. 20:41
반응형

입력 옆의 형태로 레이블 정렬

저는 입력 옆에 레이블을 정확하게 정렬해야 하는 매우 기본적이고 알려진 형태의 시나리오를 가지고 있습니다.하지만 나는 그것을 어떻게 하는지.

제 목표는 오른쪽 입력 옆에 레이블을 정렬하는 것입니다.여기 원하는 결과의 그림 예시가 있습니다.

enter image description here

저는 여러분의 편의를 위해 그리고 제가 지금 가지고 있는 것을 분명히 하기 위해 만지작거렸습니다 - http://jsfiddle.net/WX58z/ .

스니펫:

<div class="block">
    <label>Simple label</label>
    <input type="text" />
</div>
<div class="block">
    <label>Label with more text</label>
    <input type="text" />
</div>
<div class="block">
    <label>Short</label>
    <input type="text" />
</div>

경고: 시대에 뒤떨어진 답변

요즘에는 반드시 고정 폭을 사용하는 것을 피해야 합니다.플렉스박스나 CSS 그리드를 사용하여 대응 가능한 솔루션을 제안할 수 있습니다.다른 답을 보세요.


한 가지 가능한 해결책:

  • 라벨 요소에 대한 적절한 고정 폭을 결정하고 다음을 사용하여 설정합니다.width
  • 줘봐, 줘봐요.display: inline-block
  • 텍스트를 오른쪽으로 정렬

즉,

label {
  display: inline-block;
  width: 140px;
  text-align: right;
}​
<div class="block">
    <label>Simple label</label>
    <input type="text" />
</div>
<div class="block">
    <label>Label with more text</label>
    <input type="text" />
</div>
<div class="block">
    <label>Short</label>
    <input type="text" />
</div>

JSFiddle

여기서의 솔루션은 효과적이지만, 제가 생각하기에 더 나은 솔루션을 위한 최신 기술이 개발되었습니다.CSS 그리드 레이아웃을 통해 보다 우아한 솔루션을 구성할 수 있습니다.

아래 CSS는 2열의 "설정" 구조를 제공하며, 첫 번째 열은 오른쪽 정렬 레이블로 예상되고, 두 번째 열에는 일부 내용이 포함됩니다.두 번째 칸에서는 <div>로 감싸서 좀 더 복잡한 내용을 제시할 수 있습니다.

[부록으로서:CSS를 사용하여 각 레이블을 추적하는 ':'를 추가합니다. 이것이 스타일리시한 요소이기 때문입니다. - 저의 선호도]

/* CSS */

div.settings {
    display:grid;
    grid-template-columns: max-content max-content;
    grid-gap:5px;
}
div.settings label       { text-align:right; }
div.settings label:after { content: ":"; }
<!-- HTML -->

<div class="settings">
    <label>Label #1</label>
    <input type="text" />

    <label>Long Label #2</label>
    <span>Display content</span>

    <label>Label #3</label>
    <input type="text" />
</div>

이전에 이와 같은 질문에 답변한 결과는 여기에서 확인할 수 있습니다.

필드와 텍스트가 서로 옆에 있도록 양식을 만드는 것 - 그것을 하는 의미론적 방법은 무엇입니까?

당신의 바이올린에 동일한 규칙을 적용하기 위해 당신은 사용할 수 있습니다.display:inline-block다음과 같이 레이블 및 입력 그룹을 나란히 표시합니다.

CSS

input {
    margin-top: 5px;
    margin-bottom: 5px;
    display:inline-block;
    *display: inline;     /* for IE7*/
    zoom:1;              /* for IE7*/
    vertical-align:middle;
    margin-left:20px
}

label {
    display:inline-block;
    *display: inline;     /* for IE7*/
    zoom:1;              /* for IE7*/
    float: left;
    padding-top: 5px;
    text-align: right;
    width: 140px;
}

업데이트된 바이올린

저는 이와 비슷한 것을 사용합니다.

<div class="form-element">
  <label for="foo">Long Label</label>
  <input type="text" name="foo" id="foo" />
</div>

스타일:

.form-element label {
    display: inline-block;
    width: 150px;
}

이것이 오래된 스레드라는 것을 알고 있지만 다음과 같이 레이블에 입력을 포함하는 것이 더 쉬운 해결책이 될 것입니다.

<label>Label one: <input id="input1" type="text"></label>

플렉스박스를 사용해 볼 수도 있습니다.

<head><style>
body {
    color:white;
    font-family:arial;
    font-size:1.2em;
}
form {
    margin:0 auto;
    padding:20px;
    background:#444;
}
.input-group {
    margin-top:10px;
    width:60%;
    display:flex;
    justify-content:space-between;
    flex-wrap:wrap;
}
label, input {
    flex-basis:100px;
}
</style></head>
<body>

<form>
    <div class="wrapper">
        <div class="input-group">
            <label for="user_name">name:</label>
            <input type="text" id="user_name">
        </div>
        <div class="input-group">
            <label for="user_pass">Password:</label>
            <input type="password" id="user_pass">
        </div>
    </div>
</form>

</body>
</html>

다음과 같은 작업을 수행할 수 있습니다.

HTML:

<div class='div'>
<label>Something</label>
<input type='text' class='input'/>
<div>

CSS:

.div{
      margin-bottom: 10px;
      display: grid;
      grid-template-columns: 1fr 4fr;
}

.input{
       width: 50%;
}

도움이 되길 바랍니다! :)

다음은 모든 양식 레이블에 대한 일반 레이블 너비입니다.폭을 고정하는 것은 없습니다.

모든 레이블을 사용하여 setLabelWidth 계산기를 호출합니다.이 기능은 UI에 모든 라벨을 로드하고 최대 라벨 폭을 찾습니다.아래 함수의 반환 값을 모든 라벨에 적용합니다.

     this.setLabelWidth = function (labels) {
            var d = labels.join('<br>'),
                dummyelm = jQuery("#lblWidthCalcHolder"),
                width;
            dummyelm.empty().html(d);
            width = Math.ceil(dummyelm[0].getBoundingClientRect().width);
            width = width > 0 ? width + 5: width;
            //this.resetLabels(); //to reset labels.
            var element = angular.element("#lblWidthCalcHolder")[0];
            element.style.visibility = "hidden";
            //Removing all the lables from the element as width is calculated and the element is hidden
            element.innerHTML = "";
            return {
                width: width,
                validWidth: width !== 0
            };

        };

언급URL : https://stackoverflow.com/questions/9686538/align-labels-in-form-next-to-input

반응형