2016-09-12 4 views
0

없이 입력 태그의 폭은 HTML의 다음 코드를 생각해 보자. (목록에는 실제 항목이 있지만 물건을 간결하게 유지하려면 여기를 버렸습니다.) 이제 CSS를 사용하여 목록의 너비를 제어 할 수 있으며 입력 태그와 마찬가지로 목록의 너비를 제어 할 수 있습니다.만들기 목록은 자바 스크립트

입력 태그를 기본 너비로두고 목록 폭의 너비가 일치하도록하고 싶습니다. 물론 JavaScript의 getComputedStyle을 사용할 수 있습니다. 이론 상으로는 사용자가 자바 스크립트를 사용 중지하면 문제가 발생할 수 있지만 사실 실제로 (매우 최소한의) 자동 완성 위젯 (Wikipedia에서와 같이 멋지지만)을 코딩하기 때문에 자바 스크립트 없이는 작동하지 않습니다.

하지만 여전히 가능합니까? 나는 CSS에 관해서는 기본적으로 아무 것도 모르므로, 이것이 명백해야만한다면 용서해주십시오. 당신이 새로운 CSS 표준을 사용하여 너무 싫어하지 않은 경우

+0

흥미로운 질문입니다. 인라인 블록 스타일 (목록과 입력 둘 다 인라인 블록 인 래퍼 추가)을 사용할 수 있지만 목록 항목 텍스트가 너무 길면 너비가 확장됩니다. 그 시나리오에서 무엇을하고 싶습니까? https://jsfiddle.net/s8dujmto/ –

답변

1

일반적으로, 당신과 함께 display:table 또는 display:table-cell (가 익명의 객체가 다른 하나를 위해 만들어지는 중요하지 않음)로 설정 래퍼 요소와이 작업을 수행 할 것 매우 작은 지정된 너비. 래퍼의 사용 된 너비는 적어도 입력 상자의 너비와 같아야하며 그런 다음 목록은 그 안에 들어갑니다.

(데모 CSS와 요셉 Marikle의 대답에서 차용 HTML 마크 업)

.wrapper { 
 
    display: table; 
 
    width:1px; 
 
} 
 

 
/* for demo only */ 
 
ul{list-style-type:none;padding:0;margin:0;background:#ae0}.wrapper{margin-bottom:1em;}
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div> 
 
<br> 
 
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2 tetts 3 stsdgsdf stsdgsdf</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div>

+0

이것은 내가 찾고있는 것과 거의 같습니다. 텍스트가 너무 길면 줄 바꿈하는 것을 제외하고는 각 항목을 한 줄씩 늘리고 싶었습니다. 그러나이를 해결할 수있는 쉬운 방법이있을 것입니다. –

+0

랩핑을 방지하기 위해'white-space : nowrap'을 시도하십시오. –

-1

가 일치하는 폭

+0

하지만 입력 태그의 너비가 어느 정도인지는 알 수 없습니다. 다른 브라우저는 다른 기본값을 가질 수 있습니다. –

+1

입력 너비를 ul 너비와 같게 설정하십시오. jsfiddle 또는 codepen을 사용해보십시오.) –

+0

하지만 브라우저 A의 기본 너비는 144px이고 브라우저 B의 기본 너비는 72px이고 브라우저 C의 기본 너비는 728입니다. 기본 너비는 288px입니까? 저기 이상한 많은 브라우저가 있습니다 : 스라소니, 모바일 브라우저 등. 사용자가 브라우저의 기본 설정을 변경하거나 사용자 정의 스타일 시트 등을 사용하는 것은 말할 필요도 없습니다. –

1

<ul style = "width: 40px"> // 변경 40px 시도, 나는 인 flexbox를 사용하는 것이 좋습니다 것입니다. 명시 적 값을 설정하거나 계산할 필요없이 두 요소가 동일한 너비인지 확인하는 두 가지 방법을 채택합니다.

.wrapper { 
 
    display: inline-flex; 
 
    flex-direction: column; 
 
} 
 

 
/* for demo only */ 
 
ul{list-style-type:none;padding:0;margin:0;background:#ae0}.wrapper{margin-bottom:1em;}
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div> 
 
<br> 
 
<div class="wrapper"> 
 
    <input> 
 
    <ul> 
 
    <li>test 1</li> 
 
    <li>test 2 tetts 3 stsdgsdf stsdgsdf</li> 
 
    <li>test 3</li> 
 
    </ul> 
 
</div>

+0

그것은 당신이 만든 매우 흥미로운 효과입니다. 이런 방식으로 작동하는 자동 완성 위젯을 본 적이 없지만 이제는 자신의 방식이 더 좋고 다른 모든 사람들이 "잘못"하고 있는지 궁금합니다. 귀하의 방법은 기본 너비가 입력 된 태그의 너비이지만 목록에 폭이 넓은 항목이 있으면 확장되고 입력 태그가 확장됩니다. 그러나 이것이 약간 혼란 스러울 수도 있습니다. 입력 태그는 일반적으로 그렇게 늘어나거나 줄어들지 않습니다. 결코 적은 것, 아무도 내가 한 것에 더 가까운 대답을 내놓지 않으면, 나는 이것을 받아 들일 것이다. 그거 정말 멋지다. –

+0

@MarkVY 모두가 잘못하고 있다고 말하지는 않습니다.이제 플렉스 박스는 생산 코드에서 받아 들일 수있는 것의 최첨단이다. 최근 트위터 부트 스트랩 (twitter bootstrap)과 시맨틱 UI (Semantic UI)와 같은 주요 프레임 워크가 의존하고 있습니다. 이전 버전과의 호환성을 위해 javascript를 사용해야합니다. 플렉스 박스 나 자바 스크립트없이 안정적으로 할 수있는 다른 방법은 없습니다. –

+0

아니, 나는 flexbox에 대해 의미하지는 않습니다. 가장 큰 목록 항목을 수용하기 위해 입력 태그가 늘어나는 효과를 의미합니다. 나는 그것을하는 자동 완성 위젯을 본 적이 없다. (예를 들어 위키 백과 또는 Google을 참조하십시오. 제안 사항이 맞지 않아도 둘 다 해결됩니다.) –