이미지 아래의 텍스트 배치를 중지하는 CSS


87

다음 마크 업이 있습니다.

<li id="CN2787">
  <img class="fav_star" src="images/fav.png">
  <span>Text, text and more text</span>
</li>

텍스트가 줄 바꿈되면 이미지의 '열'에 들어 가지 않도록하고 싶습니다. 나는 내가 table(내가하고 있던) 그것을 할 수 있다는 것을 알고 있지만 이것은 이런 이유로 실행할 수 없습니다 .

나는 성공하지 않고 다음을 시도했습니다.

li span {width: 100px; margin-left: 20px}
.fav_star {width: 20px}

나는 또한 시도했다 float: right.

감사.

편집 : 다음과 같이 보이기를 원합니다.

IMG   Text starts here and keeps going... and
      wrap starts here.

이건 아니야:

IMG   Text starts here and keeps going... and 
wrap starts in the space left for the image.

1
코드를 jsfiddle에 넣을 수 있습니까?
Hardik 2010

여기서 당신의 의도에 대해 좀 더 명확히해야한다고 생각합니다. 텍스트가 다음 포장하지 않으려면 당신은 간단하게 사용할 수 white-space: nowrap;있는 li span {...},하지만 난 당신이 뭔가를하려고 노력하고 있다는 인상을
내 머리가 아파

@MyHeadHurts 사과-나에게 분명해 보였습니다. :) 줄에 두 개의 열이 필요합니다. 왼쪽 20px는 이미지 용입니다. 나머지는 텍스트입니다. 텍스트가 줄 바꿈되면 왼쪽에서 20px 줄 바꿈의 두 번째 줄 (초기 텍스트가 시작된 위치 아래)을 시작합니다.
Nick

1
지나가는 사람의 경우 허용되는 답변에서 알 수 있듯이 너비를 다룰 필요가 없습니다. 훨씬 더 간단합니다. 새로운 서식 지정 컨텍스트를 만듭니다. Joe Conlin의 답변을 참조하십시오. 자세한 배경 정보는 내 정보를 참조하십시오.
hqcasanova 2013

1
@hqcasanova 기록을 위해 Dan의 답변은 Joe가 자신의 글을 게시하기 9 개월 전과 귀하의 답변을 게시하기 16 개월 전에 수락되었습니다. 대안을 추가 해주셔서 감사하지만 Dan의 대답을 받아들이지 않을 것입니다.
Nick

답변:


35

이 질문이 많은 의견을 얻고 있으며 이것이 허용 된 답변이기 때문에 다음 면책 조항을 추가해야한다고 느꼈습니다.

이 답변은 OP의 질문 (예제에 너비가 설정되어 있음)에만 해당됩니다. 작동하는 동안 각 요소, 이미지 및 단락에 너비가 있어야합니다. 그것이 귀하의 요구 사항이 아니라면 이 질문에 대한 또 다른 답변으로 게시 된 Joe Conlin의 솔루션 을 사용하는 것이 좋습니다 .

span요소는 인라인 요소, 당신은 CSS의 폭을 변경할 수 있습니다.

다음 CSS를 스팬에 추가하여 너비를 변경할 수 있습니다.

display: block;

일반적으로 더 의미가있는 또 다른 방법은 <p>요소를 <span>.

<li id="CN2787">
  <img class="fav_star" src="images/fav.png">
  <p>
     <span>Text, text and more text</span>
  </p>
</li>

이후 <p>A는 block요소는, 당신은 아무것도 변경하지 않고, CSS를 사용하여 폭을 설정할 수 있습니다.

그러나 두 경우 모두 블록 요소가 있으므로 텍스트가 모두 이미지 아래로 내려 가지 않도록 이미지를 플로팅해야합니다.

li p{width: 100px; margin-left: 20px}
.fav_star {width: 20px;float:left}

PS 대신의 float:left이미지에, 당신은 또한 넣을 수 있습니다 float:rightli p있지만, 그 경우에, 당신은 또한이 필요합니다 text-align:left제대로 텍스트를 재정렬 할 수 있습니다.

PSS <p>요소를 추가하지 않는 첫 번째 솔루션을 진행 했다면 CSS는 다음과 같이 보일 것입니다.

li span{width: 100px; margin-left: 20px;display:block}
.fav_star {width: 20px;float:left}

이것은 정말 도움이됩니다. 나는 변경 spanA를 p요소입니다. 그런 다음이 두 사람이 트릭을 수행하는 것처럼 보였습니다 li p {margin-left: 40px} .fav_star {float: left}.. 이미지의 너비는 이미지 자체에 의해 설정되고 p요소는 자동으로 a block이며 너비는 그대로 두었습니다. 감사합니다.
Nick

2
당신이 사용하고자하는 경우 display:block당신은 단지뿐만 아니라를 사용할 수 있습니다 div그것을 위해 무엇을 그의 이후 (또는를 사용하여 p당신은 또한 제안으로). 텍스트를 이중 줄 바꿈 할 필요가 없습니다.를 사용하는 p경우 span.
가레스

IMO, 페이지 디자인을 변경하기 위해 HTML을 사용해서는 안됩니다. 이것은 CSS의 일입니다 (물론 예외가 있습니다. 특히 브라우저 간 호환성이 필요한 경우). 적절한 HTML을 사용하고 "좋은 의미"를 갖는 것이 더 중요하다고 생각합니다. 그래서 나는를 사용하지 않을 것 div입니다.이 경우에는 a p가 더 의미가 있습니다. 를 잃는 것은 span나에게 다소 사소한 일이며 콘텐츠를 레이아웃하는 방법에 따라 다릅니다.
Dan

랩핑 <span>A의 것은 <p>Hogwartz의 똑바로 마법입니다! 아름답게 작동합니다!
Janus

252

많은 사람들을 사로 잡는이 문제에 대한 아주 간단한 대답 :

<img src="url-to-image">
<p>Nullam id dolor id nibh ultricies vehicula ut id elit.</p>

    img {
        float: left;
    }
    p {
        overflow: hidden;
    }

예 참조 : http://jsfiddle.net/vandigroup/upKGe/132/


11
이것이이 질문에 대한 정답입니다. 이 기술은 단락에 고정 너비를 설정할 필요가 없습니다. 훨씬 간단하고 쉬운 솔루션입니다. IE8에서도 완벽하게 작동합니다.
chocolata

4
글쎄, 사실 이것은 텍스트를 포함하는 요소가 span(OP의 경우) 이면 작동하지 않습니다 . A display: blockspan. 그러나 그것을 절약하면 훨씬 더 우아한 해결책이라는 데 동의합니다. 누군가가 뒤에 마술이 무엇인지 궁금해하는 경우 overflow: hidden아래 내 대답을 참조하십시오.
hqcasanova 2013

7
내가 기대하는 행동은 아니지만 이것은 굉장합니다.
Gavin

2
기록을 위해,이 답변은 내가 선택한 답변 8 개월 후에 나왔습니다. :)
Nick

2
와. 완벽하게 작동했습니다. 나는 이것을 전에 결코 알지 못했다는 것을 믿을 수 없습니다.
SFlagg

25

배경 정보를 원하는 사람들을 위해 작동하는 이유를 설명 하는 짧은 기사overflow: hidden 가 있습니다. 소위 블록 형식화 컨텍스트와 관련이 있습니다. 이것은 W3C 사양의 일부이며 (즉, 해킹이 아님) 기본적으로 블록 유형 흐름을 가진 요소가 차지하는 영역입니다.

적용될 때마다 블록 서식 컨텍스트를 overflow: hidden만듭니다 . 그러나 그 행동을 촉발 할 수있는 유일한 속성은 아닙니다. Sydney Web Apps Group의 Fiona Chan 의 프레젠테이션 인용 :

  • 부동 : 왼쪽 / 오른쪽
  • 오버플로 : 숨김 / 자동 / 스크롤
  • 디스플레이 : 테이블 셀 및 테이블 관련 값 / 인라인 블록
  • 위치 : 절대 / 고정

1
링크가 끊어 질 경우를 대비하여 해당 기사의 세부 정보를 답변에 추가 할 수 있습니까?

좋은 아침 호주! 댓글 주셔서 감사합니다.
hqcasanova 2013

이것은 이미지 또는 근처에 떠 다니는 사이드 바와 충돌해야하는 코드 블록을 표시하는 데 탁월합니다.
AlexMA 2014

원래 설명한 기술은 잘 작동하지만 다른 사람들이 말했듯이 내가 기대하는 행동은 아닙니다. 그러나 플로트 또는 인라인 블록이 오버플로없이 작동한다는 것을 알지 못하며, 물론 테이블 관련 디스플레이 값과 절대 위치 또는 고정 위치에는 컨텍스트에서 허용되거나 허용되지 않을 수있는 다른 레이아웃 결과가 있습니다.
수수께끼

3

당신이 원하는 경우 margin-leftA의 작업 span요소 당신은 그것을 확인해야합니다 display: inline-block또는 display:block뿐만 아니라.


아마도 vertical-align: top;이것으로 이미지가 필요할 것입니다.
ThinkingStiff

2

display:flex텍스트 설정 은 나를 위해 일했습니다.


이것은 좀 더 현대적인 설정에 해당하는 것 같습니다 overflow:auto. 모든 상황에서 똑같이 작동하지는 않지만 저에게도 효과적이었습니다.
Matt Browne

1

이미지와 스팬 주위에 div를 감싸고 다음과 같이 CSS에 다음을 추가합니다.

HTML

        <li id="CN2787">
          <div><img class="fav_star" src="images/fav.png"></div>
          <div><span>Text, text and more text</span></div>
        </li>

CSS

            #CN2787 > div { 
                display: inline-block;
                vertical-align: top;
            }

            #CN2787 > div:first-of-type {
                width: 35%;
            }

            #CN2787 > div:last-of-type {
                width: 65%;
            }

적게

        #CN2787 {
            > div { 
                display: inline-block;
                vertical-align: top;
            }

            > div:first-of-type {
                width: 35%;
            }
            > div:last-of-type {
                width: 65%;
            }
        }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.