CSS 만 사용하여 HTML 요소 사이에 공백 추가


105

여러 개의 동일한 HTML 요소가 차례대로 진행됩니다.

<span>1</span>
<span>2</span>
<span>3</span>

CSS 만 사용하여 요소 사이에 공간을 추가하는 가장 좋은 방법을 찾고 있습니다.

[no space]  [1]  [space 10px]  [2]  [space 10px]  [3]  [no space]

추가적으로 :

  • 영수증의 브라우저 호환성을 적어주세요

최신 정보

내가 불분명 한 것 같습니다. 다음과 같은 추가 HTML 마크 업을 사용하고 싶지 않습니다.

<span></span>  <span></span>  <span class="last_span"></span>

나는 테이블을 사용하고 싶지 않다

CSS에서 첫 번째와 마지막 범위를 자동으로 타겟팅하고 싶습니다.

자바 스크립트를 사용하고 싶지 않습니다.

선택적 요구 사항 : 마지막 스팬은 상위 태그의 마지막 하위가 될 수 없지만 상위 태그의 마지막 스팬이됩니다. 스팬에는 그 사이에 다른 태그가 없습니다.


테이블 사용을 고려해야 할 수도 있습니다. 어떤 데이터가 들어가는 지에 따라text
Madara 's Ghost

의 개수는 span가변적입니까?
thirtydot

@Truth 최후의 수단은 테이블이어야합니다.
Tim Joyce

span요소는 I이 액세스 할 수없는 웹 서비스에 의해 생성됩니다. 따라서 마크 업을 변경할 수 없습니다. 하지만 CSS를 완전히 사용할 수 있습니다
Dan

이와 같은 질문이있는 경우 항상 필요한 브라우저 지원을 지정해야합니다. "IE7 지원이 필요합니다."는 "Chrome 만 사용하고 있습니다"에 대해 완전히 다른 답변을 받게됩니다.
thirtydot 2011

답변:


244

이를 수행하는 좋은 방법은 다음과 같습니다.

span + span {
    margin-left: 10px;
}

모든 span앞에는는 span(그래서, 모든 span처음을 제외하고는)해야합니다 margin-left: 10px.

다음은 유사한 질문에 대한 자세한 답변입니다. 해킹이없는 요소 간 구분자


10
컨테이너가 여러 줄에 걸쳐 있으면 실패하지만 이것은 좋은 솔루션입니다.
Savas Vedova 2014 년

다음과 같은 클래스에서도 작동합니다..sidebar-img + .sidebar-text { margin-left: 40px; }
parsecer

2
항목이 다음 줄로 줄 바꿈 될 때 어떻게 처리합니까?
thdoan

@thdoan : 그것은 당신의 등을 배치, 당신은 같은 것을 시도 할 수에 따라 달라집니다 .
thirtydot

1
나는 그리드와 그리드 갭을 사용하는 reddtoric의 솔루션을 선호합니다.
Alex Salomon

29

여백이나 패딩을 사용하십시오.

특정 경우 margin:0 10px에는 2nd에서만 사용할 수 있습니다 <span>.

최신 정보

다음은 멋진 CSS3 솔루션 ( jsFiddle )입니다.

span {
    margin: 0 10px;
}

span:first-of-type {
    margin-left: 0;
}

span:last-of-type {
    margin-right: 0;
}

고급 요소를 선택하여 선택기 좋아 :nth-child(), :last-child, :first-of-type, 등은 인터넷 익스플로러 9부터 지원됩니다.


당신은 훌륭한 대답을 가지고 있습니다, Simone. 그러나 마지막을 span수동으로 지정하지 않고 질문을 풀 수 있습니까? 이것이 CSS의 일이어야합니다
Dan

이것은 "단어 간격"의 unneded 해킹,이다의 속성 : w3schools.com/cssref/pr_text_word-spacing.asp 벤의 대답 확인
arieljuod

OP는 스팬 사이의 공간을 원했기 때문에 인라인 요소에 대한 솔루션을 제공하는 것이
좋습니다

실제로 OP는 spans와 divs (블록 요소)를 사용할 것이라고 말했습니다 . divs를 인라인 요소로 정의하면 솔루션이 유효합니다 ...
Simone

16

다음 규칙을 상위 컨테이너에 추가하십시오.

display: grid
grid-auto-flow: column
grid-column-gap: 10px

좋은 참조 : https://cssreference.io/

브라우저 호환성 : https://gridbyexample.com/browsers/


2
grid-auto-columns="max-content"유용 할 수도 있습니다. 그리드 항목의 크기가 내용과 일치하게됩니다. 또한 브라우저 호환성이 더 이상 문제가되지 않아야합니다. caniuse.com/#feat=css-grid
Alex Salomon 19

이것은 받아 들여진 대답이어야합니다. 나는 댓글이 감사를위한 것이 아니라는 것을 알고있다. 나는 지금까지 단지 'flex'디스플레이만을 사용하고 있었다. 그리고이 '그리드'는 부모 컨테이너 자체에서 모든 것을 매우 쉽게 만든다! 완전히 쓸모없는 상태로 두지 않으려면 자세히 알아 보려는
Rohan Kumar

11

너무 쉽습니다.

한 줄의 코드에서 첫 번째 요소를 제외하고 요소의 스타일을 지정할 수 있습니다.

span ~ span {
padding-left: 10px;
}

클래스 조작없이 완료되었습니다.


1
이것은 완벽하게 작동합니다. 스팬 + 스팬이 안되긴했는데 스팬 ~ 스팬이 매력처럼 작동 해요 감사합니다
juliusmh

제 경우에는 여러 스팬이 있는데, 그중 일부는 "Showing"클래스를 포함하지 않을 수 있으므로 span.Showing ~ span.Showing대신 필요한 것은 span.Showing + span.Showing. ~일반 형제 선택자이며 다른 선택자를 직접 따를 필요가 없습니다.
Eric

10

span인라인 요소 라는 사실을 활용할 수 있습니다.

span{
     word-spacing:10px;
}

그러나 범위에 두 개 이상의 텍스트 단어가 있으면이 솔루션이 중단됩니다.



3

다음과 같이 작성할 수 있습니다.

span{
 margin-left:10px;
}
span:first-child{
 margin-left:0;
}

2

<span>인라인 요소이므로 블록 수준을 만들지 않고 간격을 둘 수 없습니다. 이 시도

수평

span{
    margin-right: 10px;
    float: left;
}

세로

span{
    margin-bottom: 10px;
}

모든 브라우저와 호환됩니다.


2

컨테이너 안에 요소를 래핑 한 다음 css grid , free course 와 같은 새로운 CSS3 기능 을 사용한 다음 grid-gap:value특정 문제에 대해 생성 된 것을 사용해야 합니다.

span{
  border:1px solid red;
}
.inRow{
  display:grid;
  grid-template-columns:repeat(auto-fill,auto);
  grid-gap:10px /*This add space between elements, only works on grid items*/
}
.inColumn{
  display:grid;
  grid-template-rows:repeat(auto-fill,auto);
  grid-gap:15px;
}
<div class="inrow">
  <span>1</span>
  <span>2</span>
  <span>3</span>
</div>
<div class="inColumn">
  <span>4</span>
  <span>5</span>
  <span>6</span>
</div>


CSS 스타일을 사용하여 div 클래스의 요소 사이에 공간을 추가하려고했습니다. 귀하의 예제를 사용하여 코드를 작성했습니다. 매력처럼 작동했습니다. 감사합니다!
Elias EstatisticsEU 2011

1

또는 여백을 설정하고 재정의하는 대신 다음 콤보를 사용하여 바로 적절하게 설정할 수 있습니다.

span:not(:first-of-type) {
    margin-left:  5px;
}

span:not(:last-of-type) {
    margin-right: 5px;
}

좋은 대답은 브라우저 지원 :first-of-type:last-of-typeCSS 선택자입니다.
Dan

... not표현식 브라우저 지원 도 확인하십시오
Dan

1
@Dan 그것의 실제로 큰, 모든 몇 마지막 년 브라우저가 적용됩니다. 그러나 나는 yzoja의 솔루션이 더 똑똑하다는 것을 인정해야합니다. :)
jalooc 2014

이 솔루션은 간격 중간에 테두리를 적절하게 배치하므로 요소 사이의 테두리를 구분 기호로 포함 (예를 들어 탐색의 UL과 같이)하는 특정 경우에 더 우수합니다.
Mir

0
span.middle {
    margin: 0 10px 0 10px; /*top right bottom left */
}

<span>text</span> <span class="middle">text</span> <span>text</span>

0

다양한 항목을 정렬하고 모든면에 동일한 여백을두고 싶다면 다음을 사용할 수 있습니다. container유형에 관계없이 withing 각 요소 는 동일한 주변 여백을받습니다.

여기에 이미지 설명 입력

.container {
  display: flex;
}
.container > * {
  margin: 5px;
}

항목을 행으로 정렬하고 싶지만 첫 번째 요소가의 가장 왼쪽 가장자리에 닿도록 container하고 다른 모든 요소의 간격을 동일하게 유지하려면 다음을 사용할 수 있습니다.

여기에 이미지 설명 입력

.container {
  display: flex;
}
.container > :first-child {
  margin-right: 5px;
}
.container > *:not(:first-child) {
  margin: 5px;
}

2
이 코드는 질문에 답할 수 있지만이 코드가 질문에 대한 이유 및 / 또는 답변 방법에 대한 추가 컨텍스트를 제공하면 장기적인 가치가 향상됩니다.
β.εηοιτ.βε
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.