CSS 글꼴 테두리?


491

모든 새로운 CSS3 테두리가 계속 진행되면서 ( -webkit, ...) 글꼴에 테두리를 추가 할 수 있습니까? (파란색 트위터 로고 주위의 흰색 테두리처럼). 그렇지 않다면 CSS / XHTML에서 이것을 달성 할 정도로 못생긴 해킹이 있습니까? 아니면 여전히 Photoshop을 실행해야합니까?

답변:


1004

-webkit 접두어 뒤에있는 일부 브라우저 에서 지원되는 text-stroke 라는 실험용 CSS 속성이 있습니다 .

h1 {
    -webkit-text-stroke: 2px black; /* width and color */

    font-family: sans; color: yellow;
}
<h1>Hello World</h1>

또 다른 가능한 트릭은 속성을 사용하여 모든 방향으로 한 픽셀 씩 네 개의 그림자를 사용하는 것입니다 text-shadow.

h1 {
    /* 1 pixel black shadow to left, top, right and bottom */
    text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black;

    font-family: sans; color: yellow;
}
<h1>Hello World</h1>

그러나 1 픽셀 이상의 두께에서는 흐려질 것입니다.


4
이것은 제대로 나를 위해 일했다, 나는 1px "흐림 효과"를 추가했다 : 텍스트 그림자 : -1px 0 1px 검정, 0 1px 1px 검정, 1px 0 1px 검정, 0 -1px 1px 검정
Jakub M.

84
1px 테두리 만 필요한 경우에 좋습니다. 그러나 2px 이상을 사용하면 추악합니다.
Jules Colle

2
참고 : Andriod 브라우저 ( code.google.com/p/android/issues/detail?id=7531 )에 버그가 있습니다. "blur"를 0px로 설정하면 윤곽선이 전혀 나타나지 않습니다.
Mark Rhodes

1
btw, 당신은 W3C CSS 팁 페이지 w3.org/Style/Examples/007/text-shadow.en.html ( DRAWING LETTERS AS OUTLINES부분)에서
luiges90

나는 이것이 컬러 배경에서 가장 잘 작동하고 @pixelass의 답변이 이미지 배경에서 가장 잘 작동한다는 것을 알았습니다.
SemanticZen

151

최신 정보

스트로크를 생성하는 SCSS 믹스 인은 다음과 같습니다. http://codepen.io/pixelass/pen/gbGZYL

/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {List}            - text-shadow list
@function stroke($stroke, $color) {
  $shadow: ();
  $from: $stroke*-1;
  @for $i from $from through $stroke {
   @for $j from $from through $stroke {
      $shadow: append($shadow, $i*1px $j*1px 0 $color, comma);
    }
  }
  @return $shadow;
}
/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {Style}           - text-shadow
@mixin stroke($stroke, $color) {
  text-shadow: stroke($stroke, $color);
}

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

예, 그렇습니다 .. 받아 들여지고 좋은 답변이 있습니다.

그러나 ... 누군가가 이것을 필요로하고 타이핑 코드를 싫어하는 경우 ...

이것은 IE가 아닌 CrossBrowser를 지원하는 2px 검은 색 테두리입니다. @ fontface 글꼴 에이 글꼴이 필요했기 때문에 이전에 본 답변보다 깨끗해야했습니다. 나는 거의 모든 측면을 픽셀 단위로 사용하여 "거의 없음"을 확인하십시오. 퍼지 "(한글 또는 유사한) 글꼴. 하위 픽셀 (0.5px)을 추가 할 수는 있지만 필요하지 않습니다.

국경을위한 긴 코드 ??? ...예!!!

text-shadow: 1px 1px 0 #000,
    -1px 1px 0 #000,
    1px -1px 0 #000,
    -1px -1px 0 #000,
    0px 1px 0 #000,
    0px -1px 0 #000,
    -1px 0px 0 #000,
    1px 0px 0 #000,
    2px 2px 0 #000,
    -2px 2px 0 #000,
    2px -2px 0 #000,
    -2px -2px 0 #000,
    0px 2px 0 #000,
    0px -2px 0 #000,
    -2px 0px 0 #000,
    2px 0px 0 #000,
    1px 2px 0 #000,
    -1px 2px 0 #000,
    1px -2px 0 #000,
    -1px -2px 0 #000,
    2px 1px 0 #000,
    -2px 1px 0 #000,
    2px -1px 0 #000,
    -2px -1px 0 #000;

0 2px 0 # 000의 복제본으로 코드를 업데이트했으며-/ + 요소입니다. 흐림 (# 000 이전의 0)은 제거 할 수 있지만 0 인 경우에도 유지하는 경향이 있습니다. 또한 프로덕션 사이트에 코드의 축소 또는 압축 CSS 버전을 유지하고 주석 처리되지 않은 버전을 주석 처리하는 것이 좋습니다. 편집. 위의 코드는 CSS 코드를 축소해야하지만 편집을 위해 한 줄씩 분리해야하는 좋은 예입니다.

나는 '-webkit-text-stroke'속성 (주로 UGLY UGLY 창에서 글꼴을 더 멋지게 보이게하기 위해)으로 놀았습니다. 그러나 로딩 시간이 너무 길어지고 사이트가 충돌했습니다 (Mac Chrome 16). 그래서 페이지를로드 할 수있는 것보다 빨리 제거했습니다. 나는 이것이 한 줄의 글꼴만을위한 것이라고 생각합니다. (나는 'body'를 위해 그것을 사용하고 있었다)

1
이것으로 성능 벤치마킹을 했습니까? 나는 스크롤 할 때, 예를 들어, 페이지를 아래로 늪지 텍스트의 그림자를 발견했습니다
크리스 보스코에게

1
나는 이것이 이미지 배경에서 가장 잘 작동하고 @ Narcélio Filho의 대답은 컬러 배경에서 가장 잘 작동한다는 것을 알았습니다.
SemanticZen

1
원래 코드 펜이 사라 졌으므로이 게시물의 원래 코드로 새 코드 펜을 만들고
Grienauer

51

CSS (또는 / )와 매우 낮은 흐림 효과를 사용하여 텍스트 스트로크를 에뮬레이션 할 수 있습니다 .text-shadow-webkit-text-shadow-moz-text-shadow

#element
{
  text-shadow: 0 0 2px #000; /* horizontal-offset vertical-offset 'blur' colour */
  -moz-text-shadow: 0 0 2px #000;
  -webkit-text-shadow: 0 0 2px #000;
}

그러나 이것이 -webkit-text-stroke부동산 보다 더 광범위하게 사용 가능하지만 대부분의 사용자가 사용할 수는 있지만 문제가되지는 않을 것입니다.


3
흐릿함을 없애기 위해 세 번째 인수를 완전히 생략 할 수 있습니다.
François Feugeas 2016 년

23

-webkit-text-stroke를 언급 한 일부 답변에 대해 자세히 설명하기 위해 작동하는 코드는 다음과 같습니다.

div {
  -webkit-text-fill-color: black;
  -webkit-text-stroke-color: red;
  -webkit-text-stroke-width: 2.00px; 
}

텍스트 획 사용에 대한 자세한 기사는 여기에 있으며 텍스트 획을 지원하는 브라우저 목록은 여기에 있습니다 .



11

내가 사용하는 것은 다음과 같습니다.

.text_with_1px_border
{
    text-shadow: 
        -1px -1px 0px #000,
         0px -1px 0px #000,
         1px -1px 0px #000,
        -1px  0px 0px #000,
         1px  0px 0px #000,
        -1px  1px 0px #000,
         0px  1px 0px #000,
         1px  1px 0px #000;
}

.text_with_2px_border
{
    text-shadow: 
        /* first layer at 1px */
        -1px -1px 0px #000,
         0px -1px 0px #000,
         1px -1px 0px #000,
        -1px  0px 0px #000,
         1px  0px 0px #000,
        -1px  1px 0px #000,
         0px  1px 0px #000,
         1px  1px 0px #000,
        /* second layer at 2px */
        -2px -2px 0px #000,
        -1px -2px 0px #000,
         0px -2px 0px #000,
         1px -2px 0px #000,
         2px -2px 0px #000,
         2px -1px 0px #000,
         2px  0px 0px #000,
         2px  1px 0px #000,
         2px  2px 0px #000,
         1px  2px 0px #000,
         0px  2px 0px #000,
        -1px  2px 0px #000,
        -2px  2px 0px #000,
        -2px  1px 0px #000,
        -2px  0px 0px #000,
        -2px -1px 0px #000;
}

2

믹스 인이 적은 스트로크 글꼴 문자

스트로크를 생성하는 LESS 믹스 인은 다음과 같습니다. http://codepen.io/anon/pen/BNYGBy?editors=110

/// Stroke font-character
/// @param  {Integer} $stroke - Stroke width
/// @param  {Color}   $color  - Stroke color
/// @return {List}            - text-shadow list
.stroke(@stroke, @color) {
  @maxi: @stroke + 1;
  .i-loop (@i) when (@i > 0) {
    @maxj: @stroke + 1;
    .j-loop (@j) when (@j > 0) {
      text-shadow+: (@i - 1)*(1px)  (@j - 1)*(1px) 0 @color;
      text-shadow+: (@i - 1)*(1px)  (@j - 1)*(-1px) 0 @color;
      text-shadow+: (@i - 1)*(-1px)  (@j - 1)*(-1px) 0 @color;
      text-shadow+: (@i - 1)*(-1px)  (@j - 1)*(1px) 0 @color;
      .j-loop(@j - 1);
    }
    .j-loop (0) {}
    .j-loop(@maxj);
    .i-loop(@i - 1);
  }
  .i-loop (0) {}
  .i-loop(@maxi);
  text-shadow+: 0 0 0 @color;
}

(대신 SCSS를 사용하는 pixelass 답변을 기반으로 함)


1
text-shadow:
    1px  1px 2px black,
    1px -1px 2px black,
   -1px  1px 2px black,
   -1px -1px 2px black;


0

나는 한 번 그 둥근 모서리를 시도하고 css3로 그림자를 떨어 뜨 렸습니다. 나중에도 여전히 제대로 지원되지 않는다는 것을 알았습니다 (물론 Internet Explorer!)

JS (IE Canvas가있는 HTML 캔버스) 에서이 작업을 시도했지만 성능에 많은 영향을 미칩니다 (C2D 컴퓨터에서도). 간단히 말해, 실제로 효과가 필요한 경우 JS 라이브러리 (대부분의 라이브러리는 IE6에서 실행할 수 있어야 함)를 고려하지만 성능 문제로 인해 과도하게 수행하지 마십시오. 여전히 대안이 필요한 경우 SFiR을 사용하고 PS와 SFiR을 사용할 수 있습니다. CSS3는 오늘 준비되지 않았습니다.


0

늦어서 죄송하지만 text-shadow에 대해 말하면서이 예제도 좋아할 것이라고 생각했습니다 (텍스트에 좋은 그림자가 필요할 때 자주 사용합니다).

                    text-shadow: -2px   -2px lightblue,
                                 -2px -1.5px lightblue,
                                 -2px   -1px lightblue,
                                 -2px -0.5px lightblue,
                                 -2px    0px lightblue,
                                 -2px  0.5px lightblue,
                                 -2px    1px lightblue,
                                 -2px  1.5px lightblue,
                                 -2px    2px lightblue,
                               -1.5px    2px lightblue,
                                 -1px    2px lightblue,
                               -0.5px    2px lightblue,
                                  0px    2px lightblue,
                                0.5px    2px lightblue,
                                  1px    2px lightblue,
                                1.5px    2px lightblue,
                                  2px    2px lightblue,
                                  2px  1.5px lightblue,
                                  2px    1px lightblue,
                                  2px  0.5px lightblue,
                                  2px    0px lightblue,
                                  2px -0.5px lightblue,
                                  2px   -1px lightblue,
                                  2px -1.5px lightblue,
                                  2px   -2px lightblue,
                                1.5px   -2px lightblue,
                                  1px   -2px lightblue,
                                0.5px   -2px lightblue,
                                  0px   -2px lightblue,
                               -0.5px   -2px lightblue,
                                 -1px   -2px lightblue,
                               -1.5px   -2px lightblue;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.