CSS : 글 머리 기호와 <li> 사이의 제어 공간


177

글 머리 기호 <li><ol>또는 의 오른쪽으로 얼마나 많은 수평 공간을 밀어 넣는 지 제어하고 싶습니다 <ul>.

즉, 항상

*  Some list text goes
   here.

나는 그것을 바꿀 수 있기를 원합니다.

*         Some list text goes
          here.

또는

*Some list text goes
 here.

주변을 둘러 보았지만 전체 블록을 왼쪽 또는 오른쪽으로 이동하는 지침 만 찾을 수있었습니다 (예 : http://www.alistapart.com/articles/taminglists/).


답변:


161

내용을 span상대적으로 배치 한 다음의 left속성으로 공간을 제어 할 수 있습니다 span.

li span {
  position: relative;
  left: -10px;
}
<ul>
  <li><span>item 1</span></li>
  <li><span>item 2</span></li>
  <li><span>item 3</span></li>
</ul>


명확히하기 위해 <span> 태그는 클래스에 할당 될 때 의미론적일 수 있습니다. 예를 들어 <span class = "tel"> 123-456-7890 </ span>은 암시 적으로 의미 론적입니다.
ingyhere

4
실제로 사람의 질문에 대답하기 위해 +1;) (스팬은 실생활에서 이상적으로는 실용적 미래 보장뿐만 아니라 의미론을위한 클래스를 가져야하지만, 향후 자바 스크립트 또는 새로운 기능 개발 등이 추가 스팬을 추가 해야하는 이유가 있다면 콘텐츠에 상황이 지저분) 얻을 수
user56reinstatemonica8

파이어 폭스에서 제대로 표시되지 않습니다 텍스트 가이 트릭을 사용하여 글 머리 기호와 겹칩니다
Jay Bhalodi

@ingyhere 나는이 주장을 증명하는 것을 찾을 수 없기 때문에 이것이 사실이라고 의심하지 않습니다. 당신은 어떤 소스를 제공 할 수 있습니까?
WoIIe

@ 울 Hmmm. 그것은 오래된 의견이며, 걱정할 필요가 없습니다. <SPAN>활용 id하거나 class태그 를 지정할 수 있는지 여부 는 W3C를 살펴보십시오 . 의미 적 의미를 전달할 수 있는지 여부에 대한 질문은 이 답변을 참조하십시오 . 기술적으로, <SPAN>태그는 자체적으로 의미가없는 인라인 요소이지만 재사용에있어 더 많은 유연성을 제공합니다. 요즘에는 inline-block디스크립터를 사용하여 훨씬 다양한 형식 옵션을 사용할 수 있다고 생각 합니다.
ingyhere 2011

120

여기에 다른 답변을 요약하면 – 글 머리 기호와 <li>목록 항목 의 텍스트 사이의 간격을보다 세밀하게 제어하려면 옵션은 다음과 같습니다.

(1) 배경 이미지를 사용하십시오.

<style type="text/css">
li {
    list-style-type:none;
    background-image:url(bullet.png);
}
</style>

<ul>
    <li>Some text</li>
</ul>

장점 :

  • 총알에 원하는 이미지를 사용할 수 있습니다
  • CSS background-position를 사용하여 픽셀, em 또는 %를 사용하여 텍스트와 관련하여 원하는 위치에 이미지를 배치 할 수 있습니다

단점 :

  • 페이지에 여분의 (작지만) 이미지 파일을 추가하여 페이지 무게를 늘립니다.
  • 사용자가 브라우저에서 텍스트 크기를 늘리면 글 머리 기호는 원래 크기로 유지됩니다. 텍스트 크기가 커질수록 위치가 더 멀어 질 수 있습니다.
  • 너비에 대한 백분율 만 사용하여 '응답 성'레이아웃을 개발하는 경우 화면 너비 범위에서 원하는 위치에 정확하게 글 머리 기호를 얻는 것이 어려울 수 있습니다.

2. <li>태그에 패딩을 사용하십시오

<style type="text/css">
ul {padding-left:1em}
li {padding-left:1em}
</style>

<ul>
    <li>Some text</li>
</ul>

장점 :

  • 다운로드 할 이미지가 없습니다 = 1 개 적은 파일
  • 온 패딩을 조정하여 <li>, 당신은만큼 추가 할 수 있습니다 추가 와 같은 총알과 같은 텍스트 사이의 수평 공간
  • 사용자가 텍스트 크기를 늘리면 간격과 글 머리 기호 크기가 비례 적으로 조정되어야합니다

단점 :

  • 브라우저 기본값보다 글 머리 기호를 텍스트에 더 가깝게 이동할 수 없습니다
  • CSS 내장 글 머리 기호 유형의 모양과 크기로 제한
  • 글 머리 기호는 텍스트와 색상이 같아야합니다
  • 총알의 수직 위치를 제어 할 수 없음

(3) 텍스트를 여분의 <span>요소로 감싸십시오.

<style type="text/css">
li {
    padding-left:1em;
    color:#f00; /* red bullet */
}
li span {
    display:block;
    margin-left:-0.5em;
    color:#000; /* black text */
}
</style>

<ul>
    <li><span>Some text</span></li>
</ul>

장점 :

  • 다운로드 할 이미지가 없습니다 = 1 개 적은 파일
  • 당신은 옵션보다 총알의 위치를보다 효율적으로 관리를 얻을 수 (2) - 내 최선의 노력에도 불구하고 당신이 추가하여 수직 위치를 변경할 수 없습니다 보이더라도 당신은 (텍스트에 더 가까이 이동할 수 있습니다 padding-top받는 <span>다른 사람이있을 수 있습니다. 그러나 이것에 대한 해결 방법은 ...)
  • 글 머리 기호는 텍스트와 다른 색상 일 수 있습니다
  • 사용자가 텍스트 크기를 늘리면 글 머리 기호의 비율이 조정됩니다 (px가 아닌 패딩 및 여백을 설정 한 경우).

단점 :

  • 추가로 의미없는 요소가 필요합니다 (실제보다 더 많은 친구를 잃게 될 것입니다).하지만 코드를 좋아하는 사람들은 가능한 한 간결하고 효율적이며 프레젠테이션과 컨텐츠의 분리를 위반합니다. HTML / CSS가 제공해야합니다)
  • 총알의 크기와 모양에 대한 통제력 없음

CSS4의 새로운 목록 스타일 기능을 기대하고 있으므로 이미지 나 exta 마크 업에 의존하지 않고 더 똑똑한 글 머리 기호를 만들 수 있습니다. :)


4
좋은 대답입니다. # 2가 작동하려면 목록 스타일 위치를로 유지하십시오 outside.
Tom Auger

span 요소는 나를 위해 수정되었습니다. 음의 여백을 음의 절대 위치보다 선호하기 때문에이 대답 만 +1했습니다.
FlipMcF

줄을 감싸는 텍스트가있는 경우, 줄 바꿈 display: block;된 텍스트도 줄을 서기 위해 span 요소에 추가 해야 한다는 것을 알았 습니다. 또한 span 대신 앵커 태그를 사용했습니다.
Kevin M

배경 이미지를 사용하는 것은 거의 항상 나쁜 생각입니다. 저장하거나 인쇄 할 수 없으며 화면 판독기에서 언급하지 않습니다. <span>을 사용하는 것이 가장 우아한 방법은 아닙니다. 패딩은 글 머리 기호의 위치를 ​​변경하기 때문에 작동하지 않습니다.
Bachsau

3
나는 이것을 위해 배경 이미지를 사용하지 않을 것입니다. 컨텐츠와 함께 항상 : before 요소를 사용할 수 있습니다. "•"; 그런 다음 요소 앞에 패딩과 절대 위치를 사용하여 제어합니다.
Yann Chabot

37

그렇게해야합니다. 글 머리 기호를 외부로 설정하십시오. IE7에서 CSS 의사 요소를 아래쪽으로 떨어 뜨릴 수 있으면 CSS 의사 요소를 사용할 수도 있습니다. 나는 이런 종류의 의사 요소를 사용하지 않는 것이 좋지만 거리를 제어하는 ​​데 효과적입니다.

ul {
  list-style: circle outside;
  width: 100px;
}

li {
  padding-left: 40px;
}

.pseudo,
.pseudo ul {
  list-style: none;
}

.pseudo li {
  position: relative;
}

/* use ISO 10646 for content http://la.remifa.so/unicode/named-entities.html */
.pseudo li:before {
  content: '\2192';
  position: absolute;
  left: 0;
}
<ul>
  <li>Any Browser really</li>
  <li>List item
    <ul>
      <li>List item</li>
      <li>List item</li>
    </ul>
  </li>
</ul>

<ul class="pseudo">
  <li>IE8+ only</li>
  <li>List item
    <ul>
      <li>List item with two lines of text for the example.</li>
      <li>List item</li>
    </ul>
  </li>
</ul>


5
이 답변이 수락되지 않는다고 믿을 수 없습니다. 100 % CSS이며 불필요한 <span> 요소를 추가하지 않으며 내부 / 외부 옵션이있는 이유를 마침내 이해하게했습니다! (그리고 그것은 언급 된 중복 질문에 대한 대답입니다 ...)
MindTailor

1
요소를 사용 list-style-position: outside하고 채움을 사용 LI하면 글 머리 기호 지점 사이의 거리를 늘릴 수 있지만 여전히 브라우저에서 지정한 오프셋을 벗어나 다른 방식으로는 작동하지 않습니다. 이 JS Bin을 참조하십시오 .
Mesagoma

4
부록 : 최신 브라우저 (IE9 +, FF, Chrome 등)에서는 또는 에 음수 text-indent를 사용하여 글 머리 기호와 내용 사이의 브라우저 강제 거리를 무효화하십시오 . 즉, 거리를 늘리려면 원하는대로 글 머리 기호와 내용 사이의 거리를 줄이려 면 위와 같이 늘리십시오 . <UL><LI><LI>padding-lefttext-indent
Mesagoma

1
아아 , 위에서 언급 한 모든 데스크탑 브라우저에서 <LI>랩 의 내용이 두 번째 줄로 줄 바꿈되면 그러한 후속 줄은 우리가 첫 번째 줄을 통해 취소 한 마진 / 패딩 / 들여 쓰기를 기반으로 다시 들여 쓰기됩니다 text-indent. 한숨
Mesagoma

또 다른 옵션은 : before pseudo 요소를 사용하고 원하는 내용을 설정하는 것입니다. 거기에서 의사 요소들을 원하는대로 위치시킨다.
Kevin

14

오래된 질문이지만 : before pseudo 요소는 여기서 잘 작동합니다.

<style>
    li:before {
        content: "";
        display: inline-block;
        height: 1rem;  // or px or em or whatever
        width: .5rem;  // or whatever space you want
    }
</style>

실제로 잘 작동하며 많은 추가 규칙이나 html이 필요하지 않습니다.

<ul>
    <li>Some content</li>
    <li>Some other content</li>
</ul>

건배!


3
좋고 간단한 답변. 그 설정을 추가 할 수 margin-left: -5px총알과 사이의 공간 감소 (또는 무엇이든 값) <li>요소
binaryfunt

2
참고 : 이것은 들여 쓰기를 지원하지 않습니다
Eric

대단한 대답은 최소한의 작업으로 완벽하게 작동했습니다! 감사!
KyleFarris

12

대한 목록 스타일 유형 : 인라인 :

DSMann8의 답변과 거의 동일하지만 CSS 코드는 적습니다.

당신은 단지

<style>
    li:before {
        content: "";
        padding-left: 10px;
    }
</style>

<ul>
    <li>Some content</li>
</ul>

건배


이것도 효과가 list-style-position: inside있습니다.
Matt Dodge

11

목록 자체가 아닌padding-left 목록 항목 에서 속성을 사용할 수 있습니다 .


5
이가 list-style-position기본값으로 설정된 경우에만 작동합니다 outside.
8월

최소한 정상적인 사용을 위해서는 허용되는 답변이어야합니다. <span>디자인 목적으로 만 요소를 사용하지 않습니다 .
eukras

7

li에 텍스트 들여 쓰기를 사용하는 것이 가장 좋습니다.

텍스트 들여 쓰기 : -x px; 총알을 li에 더 가깝게 이동시키고 그 반대도 마찬가지입니다.

스팬에서 relative를 사용하면 음수 왼쪽이 IE의 이전 버전에서 제대로 작동하지 않을 수 있습니다. PS- 가능한 한 자세를 취하는 것을 피하십시오.


이것은 Chrome에서 이상하게 동작합니다. -5px의 작은 공간에 스냅합니다.
Ian Warburton

7

다음은 CSS 카운터 및 의사 요소를 사용하는 또 다른 솔루션입니다. 여분의 html 마크 업이나 CSS 클래스를 사용할 필요가 없으므로 더 우아합니다.

ol,
ul {
    list-style-position: inside;
}

li {
    list-style-type: none;
}

ol {
    counter-reset: ol; //reset the counter for every new ol
}

ul li:before {
        content: '\2022 \00a0 \00a0 \00a0'; //bullet unicode followed by 3 non breakable spaces
}

ol li:before {
        counter-increment: ol;
        content: counter(ol) '.\00a0 \00a0 \00a0'; //css counter followed by a dot and 3 non breakable spaces
}

간격이 목록 요소의 첫 번째 줄에만 영향을 미치도록 분리 할 수없는 공백을 사용합니다 (목록 요소가 두 줄 이상인 경우). 대신 패딩을 사용할 수 있습니다.


7

오래된 질문이지만 여전히 관련이 있습니다. negative를 사용하는 것이 좋습니다 text-indent. list-style-position이어야합니다 outside.

장점 :

  • 총알이 제대로 자동 배치됩니다
  • 글씨 크기를 변경해도 총알 위치가 깨지지 않습니다
  • 추가 요소가 없습니다 (:: 의사 요소도 없음)
  • CSS를 변경하지 않고 RTL과 LTR 모두에서 작동합니다.

단점 :

  • 시험
  • 찾기
  • 하나 :)

2
이 방법을 사용해 보았지만 줄 바꿈이 있으면 들여 쓰기가 작동하지 않습니다. 텍스트 들여 쓰기는 첫 줄만 들여 쓰기합니다.
Matt

6

순서가없는 목록은 ul 태그로 시작합니다. 각 목록 항목은 기본적으로 글 머리 기호 (작은 검은 색 원)로 표시됩니다.

    <!DOCTYPE html>
    <html>
       <body>
          <h2>Normal List </h2>
          <ul>
             <li>Coffee</li>
             <li>Tea</li>
             <li>Milk</li>
          </ul>
       </body>
    </html>

산출:

<!DOCTYPE html>
<html>
<body>

<h2>Normal List </h2>

<ul>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

</body>
</html>

text-indent 속성은 텍스트 블록에서 첫 번째 줄의 들여 쓰기를 지정합니다.
참고 : 음수 값이 허용됩니다. 값이 음수이면 첫 번째 줄이 왼쪽으로 들여 쓰기됩니다.

<ul style='text-indent: -7px;'>
  <li>Coffee</li>
  <li>Tea</li>
  <li>Milk</li>
</ul>

답변에 감사드립니다. 다른 사람들이 쉽게 이해할 수 있도록 솔루션에 주석을 달아보십시오.
cdomination

이것이 가장 좋은 대답이며 받아 들여야합니다. 최소 CSS!
KawaiKx

5

<li> 태그의 패딩을 사용하여 간격을 제어 할 수있는 것 같습니다.

<style type="text/css">
    li { padding-left: 10px; }
</style>

캐치는 그것이 당신이 당신의 마지막 예제와 같이 아늑한 것을 긁지 못하게하는 것 같습니다.

이를 위해리스트 스타일 유형을 끄고 & bull;

<ul style="list-style-type: none;">
    <li>&bull;Some list text goes here.</li>
</ul>

5

글 머리 기호와 텍스트 사이의 간격 만 줄이려면 훨씬 깨끗한 솔루션이있는 것 같습니다.

li:before {
    content: "";
    margin-left: -0.5rem;
}

4

대안으로 배경 이미지 교체를 사용하여 수직 및 수평 위치를 완벽하게 제어 할 수 있습니다.

이 질문에 대한 답을보십시오



0

당신은 사용할 수 있습니다 ul li:before및 배경 이미지, 그리고 지정 position: relativeposition:absolute받는 사람 lili:before, 각각. 이 방법으로 이미지를 만들어 li에 대해 원하는 위치에 배치 할 수 있습니다.


0

사용 padding-left:1em; text-indent:-1em에 대한 <li>태그입니다.
그런 다음, list-style-position: inside에 대한 <ul>태그입니다.

<ul style='list-style-position: inside;'>
  <li style='padding-left: 1em; text-indent: -1em;'>Item 1</li>
</ul>

0

다음 솔루션은 텍스트를 글 머리 기호에 더 가깝게 이동하거나 여러 줄의 텍스트가있는 경우에도 잘 작동 합니다.

margin-right 글 머리 기호 가까이로 텍스트를 이동할 수 있습니다

text-indent 여러 줄의 텍스트가 여전히 올바르게 정렬되도록합니다.

li:before {
  content: "";
  margin-right: -5px; /* Adjust this to move text closer to the bullet */
}

li {
  text-indent: 5px; /* Aligns second line of text */
}
<ul>
  <li> Item 1 ... </li>
  <li> Item 2 ... this item has tons and tons of text that causes a second line! Notice how even the second line is lined up with the first!</li>
  <li> Item 3 ... </li>
</ul>

여기에 이미지 설명을 입력하십시오


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