CSS에서 텍스트와 밑줄 사이의 간격을 늘리는 방법


306

텍스트를 text-decoration:underline적용 했을 때 CSS를 사용 하면 텍스트와 밑줄 사이의 거리를 늘릴 수 있습니까?


1
이것은 정확히 당신이 요구 한 것이 아니지만 주제에 대한 흥미로운 읽을 거리였습니다. CSS 디자인 : 사용자 정의 밑줄
Peter Rowell

거리는 사용 된 글꼴에 따라 결정됩니다. 웹 안전 글꼴을 사용해보십시오.
Alexei Danchenkov

1
CSS3에는 요즘 많은 새로운 텍스트 장식 속성이 있습니다. alligator.io/css/text-decoration 예를 확인하시기 바랍니다 : text-underline-position: under;text-decoration-skip: ink;이 아마 이전 버전의 브라우저와 이전 버전과 호환되지 않습니다 바랍니다 참고.
chocolata

1
또 다른 좋은 해결책
w3spi

1
text-underline-offset여기에 투표 하십시오 : bugs.chromium.org/p/chromium/issues/…
Mark Fisher

답변:


356

아니,하지만 당신은 같은 것을 함께 갈 수 border-bottom: 1px solid #000padding-bottom: 3px.

동일한 색상의 "밑줄"(이 예제에서는 테두리)을 원할 경우 색상 선언을 생략하면됩니다 (예 : border-bottom-width: 1px및) border-bottom-style: solid.

여러 줄의 경우 여러 줄의 텍스트를 요소 내부의 범위로 줄 바꿈 할 수 있습니다. 예는 <a href="#"><span>insert multiline texts here</span></a>다음 단지 추가 border-bottompadding<span>- 데모


3
이 트릭의 유일한 문제는 div 높이와 동일한 선 높이를 사용하고 수직 정렬 할 때입니다. 중간; 그것을 중심에 두려면 밑줄이 div 아래로 끝나기 때문에이 트릭을 사용할 수 없습니다.
deweydb

@deweydb : 패딩 하단을 컨테이너 div에 추가하는 것은 어떻습니까? jsfiddle.net/dYfjc/1
chelmertz

+1 글꼴의 색상을 상속하기 위해 색상 속성을 그대로 유지하는 방법을 몰랐습니다. 나중에 많은 땀과 눈물이 절약됩니다!
Larry

9
나는 왜이 대답이 그렇게 많은 투표를했는지 잘 모르겠습니다. 여러 줄 문자에서는 완벽하게 작동하지 않습니다.

3
여러 줄의 경우 여러 줄의 텍스트를 요소 내부 범위로 줄 바꿈 할 수 있습니다. 예 <a href="#"><span>insert multiline texts here</span></a>를 들어 에 테두리 하단과 패딩을 추가하면 <span>됩니다. jsfiddle.net/Aishaterr/vrpb2ey7/1
Daniel Hernandez

133

2019 업데이트 : CSS 실무 그룹은 새로운 속성을 추가 할 뿐만 아니라 텍스트 장식 레벨 4 초안을 게시 text-underline-offset했습니다.text-decoration-thickness 하여 밑줄의 정확한 배치를 제어 할 수 있도록 )을 . 이 글을 쓰는 시점에서 초안 초안이며 어떤 브라우저에서도 구현되지 않았지만 결국 아래 기술을 쓸모없는 것으로 보입니다.

아래의 원래 답변.


border-bottom직접 사용의 문제점 은로도 padding-bottom: 0밑줄이 텍스트에서 너무 멀리 떨어져 있어보기에 좋지 않다는 것입니다. 따라서 우리는 여전히 완전한 통제권을 가지고 있지 않습니다.

픽셀 정확도를 제공하는 솔루션 중 하나는 :after의사 요소 를 사용하는 것입니다 .

a {
    text-decoration: none;
    position: relative;
}
a:after {
    content: '';

    width: 100%;
    position: absolute;
    left: 0;
    bottom: 1px;

    border-width: 0 0 1px;
    border-style: solid;
}

bottom속성 을 변경하면 (음수가 좋습니다) 밑줄을 원하는 위치에 정확하게 배치 할 수 있습니다.

이 기술의 한 가지 문제점은 줄 바꿈에서 약간 이상하게 작동한다는 것입니다.


2
이것은 내 특정 문제에서는 작동하지 않지만 환상적인 방법입니다. +1

11
잘 해결되었지만 여러 줄에 걸쳐있는 앵커에는 적용되지 않습니다
Willster

@ last-child 이것은 밑줄보다 낫지 만 텍스트 줄 바꿈으로 모든 줄에 적용되는 것은 아닙니다.
Nishantha

한 가지 문제는 경계 하단과 밑줄이 서로 다른 것입니다. 예를 들어 텍스트의 일부가 밑줄 아래로 확장되어야합니다. 태그를 버튼으로 스타일을 지정하면 밑줄로 테두리 아래쪽을 사용할 수 없습니다.
Anders Lindén

10
웹 개발, 그래픽 디자이너, 평범한 사용자 또는 엄마에게 새로운 사람에게 이것이 텍스트와 밑줄 사이에 제어 된 공간을 추가하는 데 필요하고 밑줄을 긋고 인생에서 무엇을하고 있는지 궁금해 할 것이라고 이야기한다고 상상해보십시오. .
MarcGuay

79

이것을 사용할 수 있습니다 text-underline-position: under

자세한 내용은 여기를 참조하십시오 : https://css-tricks.com/almanac/properties/t/text-underline-position/

브라우저 호환성 도 참조하십시오 .


2
감사! 파선으로 밑줄을 긋고 텍스트 하단과 줄 사이에 공백이없는 것을 확인하면 문제가 해결됩니다.
Jonathan Cross

6
이는 해결 방법이없는 최신 브라우저에 대한 정답입니다.
Paras Shah

2
Firefox에서는 벤더 접두사와 함께 작동하지 않지만 W3C 사양입니다 : w3.org/TR/css-text-decor-3/#text-underline-position-property . 기타 관련 자료 : quackit.com/css/css3/properties/css_text-underline-position.cfm
rosell.dk

4
현재로서는 Chrome 브라우저에서만 작동하며 다른 브라우저에는 솔루션이 아닙니다.
miir

2
글쎄,이 의견 일자에, 나는 이것이 Firefox 에서도 작동 한다는 것을 알았 습니다.
Jarad

15

여기 나를 위해 잘 작동하는 것이 있습니다.

<style type="text/css">
  #underline-gap {
    text-decoration: underline;
    text-underline-position: under;
  }
</style>
<body>
  <h1 id="underline-gap"><a href="https://Google.com">Google</a></h1>
</body>


2
참고하는 것이 중요합니다 text-underline-position 따라 파이어 폭스에서 지원되지 않습니다 developer.mozilla.org/en-US/docs/Web/CSS/...
Floran Gmehlin

매우 흥미로운. 훌륭한 설명 선. 감사합니다!
Jordan Starrk

동일한 링크에 따라 Firefox 74에서 시작하여 지원됩니다.
GSerg

11

비주얼 스타일의 세부 사항에 들어가는 것은 text-decoration:underline쓸데없는 일이므로, 일종의 핵을 제거 text-decoration:underline하고 마법의 먼 미래 버전의 CSS가 우리에게 더 많은 통제력을 부여 할 때까지 다른 것으로 대체해야합니다. .

이것은 나를 위해 일했다 :

   a {
    background-image: linear-gradient(
        180deg, rgba(0,0,0,0),
        rgba(0,0,0,0) 81%, 
        #222222 81.1%,
        #222222 85%,
        rgba(0,0,0,0) 85.1%,
        rgba(0,0,0,0)
    );
    text-decoration: none;
}
<a href="#">Lorem ipsum</a> dolor sit amet, <a href="#">consetetur sadipscing</a> elitr, sed diam nonumy eirmod tempor <a href="#">invidunt ut labore.</a>

  • 줄이 텍스트에서 얼마나 떨어져 있는지 변경하려면 % 값 (81 % 및 85 %)을 조정하십시오.
  • 두 % 값의 차이를 조정하여 선 두께를 변경하십시오.
  • 밑줄 색상을 변경하려면 색상 값을 조정하고 (# 222222)
  • 여러 줄 인라인 요소와 함께 작동
  • 어떤 배경에서도 작동

이전 버전과의 호환성을 위해 모든 독점 속성이 포함 된 버전은 다음과 같습니다.

a {     
    /* This code generated from: http://colorzilla.com/gradient-editor/ */
    background: -moz-linear-gradient(top,  rgba(0,0,0,0) 0%, rgba(0,0,0,0) 81%, rgba(0,0,0,1) 81.1%, rgba(0,0,0,1) 85%, rgba(0,0,0,0) 85.1%, rgba(0,0,0,0) 100%); /* FF3.6+ */
    background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,rgba(0,0,0,0)), color-stop(81%,rgba(0,0,0,0)), color-stop(81.1%,rgba(0,0,0,1)), color-stop(85%,rgba(0,0,0,1)), color-stop(85.1%,rgba(0,0,0,0)), color-stop(100%,rgba(0,0,0,0))); /* Chrome,Safari4+ */
    background: -webkit-linear-gradient(top,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* Chrome10+,Safari5.1+ */
    background: -o-linear-gradient(top,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* Opera 11.10+ */
    background: -ms-linear-gradient(top,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* IE10+ */
    background: linear-gradient(to bottom,  rgba(0,0,0,0) 0%,rgba(0,0,0,0) 81%,rgba(0,0,0,1) 81.1%,rgba(0,0,0,1) 85%,rgba(0,0,0,0) 85.1%,rgba(0,0,0,0) 100%); /* W3C */

    text-decoration: none;
}

업데이트 : SASSY 버전

나는 이것을 위해 scss mixin을 만들었다. SASS를 사용하지 않으면 위의 일반 버전이 여전히 훌륭하게 작동합니다 ...

@mixin fake-underline($color: #666, $top: 84%, $bottom: 90%) {
    background-image: linear-gradient(
        180deg, rgba(0,0,0,0),
        rgba(0,0,0,0) $top,
        $color $top + 0.1%,
        $color $bottom,
        rgba(0,0,0,0) $bottom + 0.1%,
        rgba(0,0,0,0)
    );
    text-decoration: none;
}

다음과 같이 사용하십시오.

$blue = #0054a6;
a {
    color: $blue;
    @include fake-underline(lighten($blue,20%));
}
a.thick {
    color: $blue;
    @include fake-underline(lighten($blue,40%), 86%, 99%);
}

업데이트 2 : Descenders 팁

배경색이 단색이면 얇 text-stroke거나text-shadow 과 같은 색 같은 색을 하여 내림차순으로 보이도록하십시오.

신용

이것은 원래 https://eager.io/app/smartunderline 에서 찾은 기술의 단순화 된 버전 이지만 기사가 게시되지 않았습니다.


불행히도 eager.io 링크는 더 이상 작동하지 않습니다. 자손을 더 멋지게 보이게하는 해킹이 무엇인지 기억하십니까?
kano

1
@ 카노-나는 그것이 단단한 배경과 같은 색으로 텍스트 그림자를 사용하고 있다고 생각합니다.
squarecandy

또한 위의 기술을 사용하면 밑줄의 색상을 텍스트와 다르게 설정할 수 있으므로 때로는 텍스트보다 밝게 설정하여 하위 요소와의 충돌이 가독성 문제를 덜어줍니다.
squarecandy

7

나는 그것이 오래된 질문이라는 것을 알고 있지만 한 줄 텍스트 설정 display: inline-block과 설정은 height테두리와 텍스트 사이의 거리를 제어하는 ​​데 효과적이었습니다.


1
나는 높이를 설정할 필요가 없었습니다. 방금 다른 div에 래핑하고 가운데에 맞추기를 원할 때 텍스트 정렬을 out div에 설정했습니다.
Guy Lowe

6

@ last-child 's answer은 훌륭한 답변입니다!

그러나 H2에 테두리를 추가하면 텍스트보다 밑줄이 길어집니다.

CSS를 동적으로 작성하거나 운이 좋으면 텍스트가 무엇인지 알면 다음을 수행 할 수 있습니다.

  1. content올바른 길이로 변경하십시오 (즉, 동일한

  2. 텍스트) 글꼴 색을 transparent(또는 rgba(0,0,0,0))

밑줄을 표시하려면 <h2>Processing</h2>(예를 들어) 마지막 자녀의 코드를 다음과 같이 변경하십시오.

a {
    text-decoration: none;
    position: relative;
}
a:after {
    content: 'Processing';
    color: transparent;

    width: 100%;
    position: absolute;
    left: 0;
    bottom: 1px;

    border-width: 0 0 1px;
    border-style: solid;
}

9
H2는 왜 밑줄이 텍스트보다 길 었는지 설명 할 수있는 블록 요소입니다. 아마 display: inline-block고칠 것입니다. 텍스트를 content바꾸면 여러 가지 방법으로 깨질 수있는 핵처럼 보입니다.
마지막 자녀

3

바이올린을 참조하십시오 .

border width 속성과 padding 속성을 사용해야합니다. 좀 더 시원하게 보이도록 애니메이션을 추가했습니다.

body{
  background-color:lightgreen;
}
a{
  text-decoration:none;
  color:green;
  border-style:solid;
  border-width: 0px 0px 1px 0px;
  transition: all .2s ease-in;
}

a:hover{
  color:darkblue;
  border-style:solid;
  border-width: 0px 0px 1px 0px;
  padding:2px;
}
<a href='#' >Somewhere ... over the rainbow (lalala)</a> , blue birds, fly... (tweet tweet!), and I wonder (hmm) about what a <i><a href="#">what a wonder-ful world!</a> World!</i>


2

여러 줄 문자 또는 링크의 대안으로 블록 요소 내부의 범위에 텍스트를 줄 바꿈 할 수 있습니다.

<a href="#">
    <span>insert multiline texts here</span>
</a> 

그런 다음에 테두리 하단과 패딩을 추가 할 수 있습니다 <span>.

a {
  width: 300px;
  display: block;
}

span {
  padding-bottom: 10px;
  border-bottom: 1px solid #0099d3;
  line-height: 48px;
}

이 바이올린을 참조 할 수 있습니다. https://jsfiddle.net/Aishaterr/vrpb2ey7/2/


2

네가 원한다면:

  • 여러 줄
  • 점이 찍힌
  • 사용자 정의 하단 패딩
  • 래퍼없이

밑줄, 당신이 사용할 수있는 1 개 픽셀 높이 와 배경 이미지 repeat-x100% 100%위치 :

display: inline;
background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAABCAYAAAD0In+KAAAAEUlEQVQIW2M0Lvz//2w/IyMAFJoEAis2CPEAAAAASUVORK5CYII=') repeat-x 100% 100%;

밑줄의 수직 위치를 조정 하거나 100%다른 방법으로 초 를 대체 할 수 있습니다 . 수직 패딩을 추가하려는 경우 에도 사용할 수 있습니다 . 예 :pxemcalc

padding-bottom: 5px;
background-position-y: calc(100% - 5px);

: 물론 당신은 또한 여기에 예를 들어 다른 색상, 높이와 디자인으로 자신 만의 base64로 PNG 패턴을 만들 수 있습니다 http://www.patternify.com/ - 2 × 1에 불과 설정 평방 너비 및 높이입니다.

영감의 원천 : http://alistapart.com/article/customunderlines


1

을 사용하는 text-decoration: underline;경우을 사용하여 밑줄과 텍스트 사이에 공백을 추가 할 수 있습니다text-underline-position: under;

텍스트 밑줄 위치 속성을 보려면 여기를 살펴보십시오 .


0

U (Underline Tag)를 사용하여 할 수있었습니다.

u {
    text-decoration: none;
    position: relative;
}
u:after {
    content: '';
    width: 100%;
    position: absolute;
    left: 0;
    bottom: 1px;
    border-width: 0 0 1px;
    border-style: solid;
}


<a href="" style="text-decoration:none">
    <div style="text-align: right; color: Red;">
        <u> Shop Now</u>
    </div>
</a>

0

이것이 내가 사용하는 것입니다 :

html :

<h6><span class="horizontal-line">GET IN</span> TOUCH</h6>

CSS :

.horizontal-line { border-bottom: 2px solid  #FF0000; padding-bottom: 5px; }

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