Подтвердить что ты не робот

Пунктирный текст в css?

Можно ли сделать точечный текст с помощью css?

Я знаю, что очевидным было бы использовать точечный шрифт, но если мне нужно только использовать точечный текст экономно, то пользователь может загрузить весь шрифт, возможно, переусердствовал бы.

Идея, которую я имел, заключалась в том, чтобы наложить текст на псевдоэлемент с фоновым рисунком небольших прозрачных кругов с белым фоном.

Что-то вроде этого:

<div class="dottedText">Some dotted text</div>

enter image description here

FIDDLE

CSS

.dottedText:after
{
    content: '';
    position:absolute;
    left:0;
    top:0;
    width: 100%;
    height: 100%;
    background: radial-gradient(circle, transparent 50%, transparent 50%),
    radial-gradient(circle, transparent 20%, white 50%) 30px 30px;
    background-size:4px 4px;
}

Я думаю, что я могу быть рядом, но вышеупомянутое решение не будет работать должным образом, если вы измените размер шрифта.

Я ищу решение, в котором

1) Точки увеличатся в размере при увеличении размера шрифта, а

2) предпочтительно каждая буква должна отображаться только с одной единственной линией точек, а не с двойной линией, как сейчас.

Изменить: когда я говорю одну строку точек - я имею в виду, что каждый удар должен состоять только из одной точки. Например: В приведенной выше картинке обратите внимание, что "m" char имеет 2 столбца с точками.... ну, я бы предпочел только один.

В идеале что-то вроде этого (взято из здесь):

enter image description here

(Я не уверен, но, возможно, радиальный градиент должен быть настроен для этого)

Изменить:

1) Я не возражаю против того, какой шрифт используется, если он встроенный шрифт. (Даже моноширинный шрифт в порядке)

2) Решение не должно работать в каждом браузере. (Так что решение только для webkit будет в порядке)

4b9b3361

Ответ 1

Честно говоря, этот ответ может показаться смешным или странным, но я не уверен, возможно ли это с ТОЛЬКО с CSS (поскольку вы не отметили какие-либо другие языки), даже если это будет слишком сложно, и, следовательно, имеет смысл использовать точечный шрифт вместо того, чтобы писать слишком много строк CSS.

Даже если вы исключаете IE, у вас будет только один файл .woff, который, я думаю, очень нормален, так как он увеличит ваш запрос http на один, и, безусловно, он не будет слишком раздутым, как вы думаете.

Список прохладных точечных шрифтов можно найти здесь здесь. Преобразуйте ttf, используя Font Squirrel Service.

Убедитесь, что у вас есть разрешение на это.


Демо Используемые шрифты: Dotline

(файлы размещены на моем собственном сервере, включены CORS, потому что демонстрация не удалась в Firefox)

Если вы не хотите поддерживать дрянной IE, вам понадобится только файл woff, и только 23kb

Ответ 2

Даже если он полагается на встроенные стили SVG, вот что я пришел с:

<svg xmlns="http://www.w3.org/2000/svg"
 width="1450px" height="300px" viewBox="0 0 800 300">

   <text x="2" y="155" 
    font-family="'Lucida Grande', sans-serif" 
    font-size="222"
    stroke="red"
    stroke-width="3"
    stroke-linecap="round"
    stroke-dasharray="5,5"
    fill="none">
             Some dotted text
</text>

хотя по каким-то причинам линия штриховки не работает.

Если вы хотите сыграть с рабочим скриптом, this.

EDIT-1 (перемещение svg-стилей в CSS)

    svg{ 
        width:1450px;
        height:300;
        viewBox:0 0 1500 300;
      
    }
    text{
      font-family:'Lucida Grande', sans-serif;
      font-size:152px;
      stroke:#000ece;
      stroke-width:3px;
      stroke-linecap:round;
      stroke-dasharray:1,1;
      fill:none;
    
    }
<div class="dott">
<svg xmlns="http://www.w3.org/2000/svg">

  <text  x="2" y="155" >
        

    Some dotted text

  </text></div>

Ответ 3

С небольшими корректировками мы можем получить довольно близко:

1) Измените font-family на курьеров new

2) Добавьте text-shadow с горизонтальным и вертикальным смещением на div

3) Изменены единицы до ems - (например, @BDawg)

FIDDLE

div {
  font-size: 40px;
  font-family: courier new;
  position: relative;
  text-shadow: -.03em -.03em 0 black;
}
.dottedText:after {
  content: '';
  position: absolute;
  left: 0;
  top: 0;
  width: 100%;
  height: 100%;
  background: radial-gradient(circle, transparent 50%, transparent 50%), radial-gradient(circle, transparent 20%, white 50%) 30px 30px;
  background-size: .1em .1em;
}
div + div {
  font-size: 60px;
}
div + div + div {
  font-size: 80px;
}
div + div + div + div {
  font-size: 100px;
}
<div class="dottedText">The quick brown fox</div>
<div class="dottedText">The quick brown fox</div>
<div class="dottedText">The quick brown fox</div>
<div class="dottedText">The quick brown fox</div>

Ответ 4

Не могли бы вы просто использовать набор webfont для этого шрифта?

http://www.fontsquirrel.com/fonts/BPdots?q%5Bterm%5D=dot&q%5Bsearch_check%5D=Y

Вы просто привязывали бы свой CSS так, чтобы вы хотели бы типа шрифта:

@font-face {
    font-family: 'bpdotsbold';
    src: url('BPdotsBold-webfont.eot');
    src: url('BPdotsBold-webfont.eot?#iefix') format('embedded-opentype'),
         url('BPdotsBold-webfont.woff') format('woff'),
         url('BPdotsBold-webfont.ttf') format('truetype'),
         url('BPdotsBold-webfont.svg#bpdotsbold') format('svg');
    font-weight: normal;
    font-style: normal;

}

Затем просто соедините любой элемент, который вы хотели бы использовать с этим шрифтом:

h1{font-family: 'bpdotsbold', arial, helvetica;font-size:80px}

Просто загрузите путь webfonts на свой сервер и обновите каждый url('LINKTOFONT') в своем CSS.

Было несколько других шрифтов типа Dot, которые может предложить font-squirrel:

http://www.fontsquirrel.com/fonts/list/find_fonts?q%5Bterm%5D=dot&q%5Bsearch_check%5D=Y

Ответ 5

Измените background-size на использование ems.

Например:

background-size: 0.1em 0.1em;

ПРИМЕЧАНИЕ. Вышеуказанное изменение меняет ваш первый пример с помощью шрифта, но не дает второго примера. Я бы использовал встроенный SVG, а не чистый CSS-подход, если бы этот точный эффект был абсолютным. (Или более очевидный подход: изменить шрифт с точками)

Ответ 6

Краткий ответ:

Нет. Невозможно.

TL;DR;

Я ищу решение, в котором

1) Точки увеличатся в размере при увеличении размера шрифта, а

2) желательно, чтобы каждая буква должна отображаться только с одним единственным линия точек - не двойная линия, как сейчас.

Изменить: когда я говорю одну строку точек - я имею в виду, что каждый удар должна состоять из одной точки. Например: На приведенном выше рисунке обратите внимание, что "m" char имеет 2 столбца точек.... ну, я бы предпочел только один.

Это невозможно сделать без специального шрифта.

Есть две неотъемлемые проблемы с другими обходными способами:

  • В CSS нет text-fill-pattern. Даже в SVG. В CSS и SVG есть text-fill-color. Тем не менее, он ограничен спецификой для браузера и нестандартными префиксами поставщика в CSS. Тогда существует стиль stroke. Он имеет те же ограничения в CSS (как и у fill) как нестандартные, а также ограничен только width и color. Хотя SVG добавляет stroke-linecap и stroke-dasharray, но это все, что есть.

  • text-outline мог бы помочь. Если он работал как border, мы могли бы сделать text-outline: Npx dotted red;. И увеличьте Npx, чтобы фактически устранить text-fill. Но есть и другие проблемы: (1) В спецификациях говорится, что он будет работать как shadow т.е. Без стиля. Как и в text-outline: 2px 2px #f00;. Опция solid / dotted / dashed не существует. (2) W3C говорит, что функция подвержена риску и может быть отключена от спецификации. (3) На данный момент он все еще не реализован ни одним браузером. Ссылка: http://www.w3.org/TR/2007/WD-css3-text-20070306/#text-outline

  • Единственный путь - использовать шаблон background, а затем сделать текст clip для текста. Это очень многое, что вы уже пробовали в своем вопросе.

Проблема с последним подходом (фон) заключается в том, что шрифты не совпадают. Даже не похоже. Глифы разные. Аспиранты и спутники разные. Даже штрихи одного символа различны.

Это можно понять на этой иллюстрации:

enter image description here

Если вы заметили символы в приведенном выше примере (шрифт Times New Roman), тогда как вертикальные линии имеют почти такую ​​же ширину, горизонтальные линии (горизонтальная полоса в "e" ) уже. Кроме того, засечки также имеют разную ширину и сужаются к концу. Когда применяется фон с шаблоном (любой механизм, изображение или SVG или радиальные элементы), он не будет четко очерчиваться линиями шрифтов. Из-за пробелов и пропорциональных шрифтов имеют разные расстояния.

Обратите внимание на два t на приведенном выше рисунке, отмеченном красным. Несмотря на то, что глифы одинаковы, но в зависимости от расстояния от начала, фоновый рисунок не может быть установленным аккуратно. Таким образом, хотя второй t имеет выровненные точки, первый t не имеет. Образец видимый частично смещается, и, следовательно, белое пространство является заметным. Такой же сдвиг по шаблону происходит случайным образом по всем символам.

Обратите внимание на конусность засечек и e, обозначенных красным кружком на приведенной выше иллюстрации. В середине шрифт толще и вмещает больше точек из рисунка (некоторые полные, некоторые частичные). У засечек и конусов он становится уже, и рисунок не может уместиться. С кривыми точки в шаблоне не могут согнуть, это, в конце концов, сетка.

Мы не можем уменьшить или увеличить отдельные точки в шаблоне, чтобы они соответствовали шрифтам. И мы не можем переместить фон в линейку по всем символам. Когда вы используете шрифты mono-space, тогда проблема пропорционального расстояния в некоторой степени смягчается, но кривые все еще остаются, и шаблон не может быть выровнен с этим.

Таким образом, метод background для этого по своей сути является ошибочным. Единственное решение - использовать пользовательский шрифт.

Однако, если аппроксимации достаточно хороши для вас, тогда ваша собственная техника радиального фона хорошо работает. По крайней мере, помимо Firefox, ваша собственная техника работает в других браузерах.

Я также попытаюсь предоставить еще одно подобное решение. Объединение шаблона SVG с background-image и сохранение background-size в процентах может в некоторой степени работать на шрифтах monospace при больших размерах.

Отказ от ответственности: этот фрагмент будет работать только с браузерами на основе webkit (Chrome/Safari), потому что другие браузеры, похоже, не поддерживают SVG как background-image, а также -webkit-background-clip: text; - это хорошо зависит от веб-кавычки.

Отрывок

.dotted {
    padding: 0px;
    background-image: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg'  width='4' height='4'><circle cx='2' cy='2' r='2' fill='#f00' stroke='#fff' stroke-width='1'/></svg>");
    font-family: sans-serif;
    font-weight: 300;
    font-size: 32px; background-size: 0.9%;
    -webkit-font-smoothing: antialiased;
    -webkit-background-clip: text;
    -moz-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
}
div:nth-of-type(2) { font-size: 64px;  }
div:nth-of-type(3) { font-size: 80px;  }
<div class="dotted">Some dotted text</div>
<div class="dotted">Dotted text</div>
<div class="dotted">More dotted text</div>

Ответ 7

Этот шрифт похож на то, что вы ожидаете

http://www.fontsquirrel.com/fonts/Synthetique?q[term]=dot&q[search_check]=Y

и имеет 4 расширения [TTF, EOT, WOFF, SVG), которые поддерживаются во всех браузерах

надеюсь, что это поможет вам