100 % 너비가없는 디스플레이 블록


95

display 속성을 사용하여 다른 요소 아래에 표시되도록 범위 요소를 설정하고 싶습니다. 인라인 블록을 적용하려고했지만 성공하지 못했고, 요소의 너비를 100 %로 설정하는 것을 피할 수 있다면 블록을 사용할 수 있다고 생각했습니다 (요소가 "확장"되는 것을 원하지 않습니다). 이렇게 할 수 있습니까? 아니면 이런 종류의 문제를 해결하기위한 좋은 방법은 무엇입니까?

예 : 각 게시물 끝에 "추가 정보"링크를 설정하려는 뉴스 목록 (참고 : <a>대신 <span>)

<li>
<span class="date">11/15/2012</span>
<span class="title">Lorem ipsum dolor</span>
<a class="read-more">Read more</a> 
</li>


업데이트 : 해결되었습니다. CSS에서 적용

li {
    clear: both;
}
li a {
    display: block;
    float: left;
    clear: both;
}

1
우리에게 보여줄 마크 업 (HTML 또는 CSS)이 있습니까? 실제로 작업 할 것이없이 문제를 해결하는 것은 어렵습니다. 또한 jsfiddle 에 대한 데모가 좋을 것입니다.
Tom Oakley 2012 년

스팬 요소를 배치하는 것이므로 샘플 코드가 필요하지 않다고 생각했습니다. 업데이트 된 게시물을 참조하십시오.
Staffan Estberg

아래에서 언급했듯이 코드 한 줄만 사용하면 모든 마크 업을 심각하게 줄일 수 있습니다.
ha404

답변:


73

귀하의 질문을 제대로 이해하고 있다면 다음 CSS가 a를 범위 아래로 띄우고 100 % 너비를 갖지 않도록합니다.

a {
    display: block; 
    float: left; 
    clear: left; 
}

나는 이것을 적용하려고 시도했지만 범위 요소 (예제에서 제목 및 날짜)에 부동 소수점이 없기 때문에 링크가 마지막 범위 앞에 배치됩니다. 한 가지 해결책은 li의 모든 자식 요소를 부동으로 만드는 것입니다.
Staffan Estberg

li 부모에 대한 clearfix를 적용하면 작동합니다. 이 솔루션으로 갈 것입니다, 감사합니다 PJ.
Staffan Estberg

157

사용 display: table.

이 답변은 30 자 이상이어야합니다. 20 개를 입력 했으므로 여기에 몇 개 더 있습니다.


13
Genius 솔루션. margin: 0 auto;필요한 경우 중앙에.
Mafia

4
나는 당신이 대단하다고 생각합니다.
billynoah

1
display: table;작동하지만 패딩을 허용하지 않습니다.
donquixote

@ ha404 당신이 맞아요, 패딩이 작동합니다! 최소한 내 브라우저 (Chromium)에서는 jsfiddle.net/wgj7xvLe/4 입니다.
donquixote

3
@donquixote 그것은 border-collapse : separate를 사용하는 한 패딩을 허용해야합니다. 그 문제가있었습니다.
Brad

30

당신이 사용할 수있는:

width: max-content;

참고 : 지원이 제한되어 있습니다. 지원 브라우저에 대한 전체 분석은 여기 에서 확인하십시오.


나는 이것을 들어 본 적이 없다! 흥미 롭군.
라이언

Chrome 46 및 FF 66 이후 좋았습니다. 대답을 받아야합니다. inline-block등은 내 레이아웃을 깨고있었습니다.
i336_

1
@ i336_ 현재까지 Edge 브라우저에서는 아직 지원되지 않습니다.
ChrisW

Edge 또는 Chromium Edge? (명확하게
말하면

caniuse.com에 따르면 2020 년 1 월 14 일에 출시 된 Edge 79를 기준으로 Edge에서 지원됩니다. 총 92 %의 지원 등급을 받았습니다. caniuse.com/?search=max-content 환영합니다. 거의 2 년 전에 처음 들었을 때 프로덕션에 사용할 수있는 충분한 지원이 없었지만 지금은 그렇습니다.
Xandor

7

각 행을 자체 div에 유지하므로 ...

<div class="row">
    <div class="cell">Content</div>
</div>
<div class="row">
    <div class="cell">Content</div>
</div>

그리고 CSS의 경우 :

.cell{display:inline-block}

원래 코드를 보지 않고 솔루션을 제공하기는 어렵습니다.


1
고맙지 만 div 요소를 혼합하지 않는 것을 선호합니다.
Staffan Estberg

5

다시 : 너무 늦을 수있는 답변 (그러나 어쨌든이 페이지를 찾은 사람들에게는).

display:block;사용 대신 display:inline-block;



1

이 문제가 발생하여 다음과 같이 해결했습니다.

.parent {
  white-space: nowrap;
  display: table;
}

.child {
  display: block;
}

"white-space : nowrap"은 충분한 공간이없는 경우 자식 (있는 경우)의 자식이 줄 바꿈하지 않도록합니다.

"공백 : nowrap"없이 :

여기에 이미지 설명 입력

"공백 : nowrap"사용 :

여기에 이미지 설명 입력


편집 : 그것은 나에게 자식 블록 부분 없이도 작동하는 것 같아서 잘 작동하는 것 같습니다.

.parent {
  white-space: nowrap;
  display: table;
}

0

다음을 사용할 수 있습니다.

display: inline-block;

링크 및 기타 요소에서 잘 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.