Есть ли кроссбраузерный способ уплотнения текста на странице?

Я ищу способ сжать относительно небольшие области текста на странице, чтобы имитировать графическую кнопку, которая была сделана нестандартным шрифтом. В идеале просто буквы должны были бы сжиматься или становиться тоньше, оставляя интервалы между словами более или менее одинаковыми. Я знаю, что есть некоторые атрибуты CSS, которые делают такие вещи, но они больше ориентированы на расстояние между буквами, а не на ширину самих букв. Эти методы CSS также не очень удобны для разных браузеров. Большая часть пользовательской базы использует IE6, так что это накладывает большие ограничения на методы на основе CSS из блоков.

Итак, есть ли способ управлять шириной / интервалом символов, который является кроссбраузерным? Я знаю, что jQuery довольно хорошо работает в браузерах, так что, возможно, это можно сделать с помощью jQuery, манипулируя расположением букв и, возможно, их шириной? Это небольшие фрагменты текста, по 5 слов за раз или около того, так что скорость - это то, с чем можно будет разобраться позже.


Обновлено: Итак, свойство CSS letter-spacing, а также свойство word-spacing позволят мне контролировать расстояние между буквами / словами. Однако от этого все выглядит сдавленным. Если это действительно единственный вариант, то мне придется заставить его работать, но на самом деле я ищу способ сжать сами буквы, чтобы символы стали тоньше.

Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
6
0
7 670
9
Перейти к ответу Данный вопрос помечен как решенный

Ответы 9

может быть

letter-spacing:-1px

помогу

спасибо за отрицательный голос. Может, вы аргументируете свой выбор?

Ionuț Staicu 06.01.2009 18:58

Это было бы моим предложением. +1

Philip Morton 06.01.2009 19:12

Cdeszaq уже ясно объяснил этот межбуквенный интервал в своем вопросе. Этот ответ просто неверен, поскольку он не уплотняет шрифт, а просто уменьшает расстояние между буквами.

Aron Rotteveel 06.01.2009 19:14

Согласился, что ОП сказал, что он уже пробовал техники интервалов, что подразумевает межбуквенный интервал. Однако исходный (до редактирования) текст искал способ управления «шириной / интервалом символов», который мне кажется «шириной или интервалом символов».

Adam Bellaire 06.01.2009 19:21

@aron: cdeszaq объясните это в зоне EDIT. Я выкладываю до этого;) Так или иначе, не будем спорить по этому поводу :)

Ionuț Staicu 06.01.2009 19:25

Стайку, конечно, никакого личного вреда, но в исходном сообщении говорится: «Я знаю, что есть некоторые атрибуты CSS, которые делают такие вещи, но они больше ориентированы на расстояние между буквами, а не на ширину самих букв. "

Aron Rotteveel 06.01.2009 19:28

Что ж, я голосую за это - для неанглоязычных людей, таких как я, которые ищут "сжатые буквы" и получают то, что нужно :) Спасибо :)

January Piwoniusz 18.03.2013 20:37

Вы уверены, что правильно указываете типы документов? Возможно, ваши браузеры интерпретируют ваш CSS в режиме причуд, что приводит к непредсказуемому поведению.

Я не думаю, что jQuery сильно поможет вам, если letter-spacing не работает должным образом. Вы не можете изменить положение отдельных букв, если каждая буква не находится внутри своего собственного элемента, такого как span, который просто кажется беспорядочным.

Обновлено: Если вы хотите уменьшить ширину самих символов по горизонтали, теоретически это можно сделать, например, с помощью font-stretch: narrower. Но похоже, что основной браузер не поддерживает это должным образом или вообще не поддерживает. Очевидно, это было в CSS2, но затем было убрано в CSS2.1 и теперь планируется для CSS3.

Это похоже на кошмар.

Вы можете обмануть все это, поместив каждое слово, если плавающий DIV, и возиться с шириной каждого DIV.

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

Убедитесь, что вы повторяете текст в атрибуте альт в теге img для доступности.

У этого подхода есть проблемы с локализацией - вам нужна версия для каждой локали, - но это все еще выполнимо.

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

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

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

Ответ принят как подходящий

Короткий ответ: Я не думаю, что существует работающий пример кроссбраузерности, который бы отвечал вашим требованиям.

Спецификация CSS3 включает свойство font-stretch, но, к сожалению, CSS3 почти не поддерживается (если вообще поддерживается) в настоящее время.

Некоторые возможные способы, которые могут привести к такому поведению подражать, о которых я могу думать:

  • Используйте подход на основе флэш-памяти, например sIFR
  • Используйте подход на основе javascript / холста, например Typeface.js. В пример страницы есть пример font-stretch.
  • Используйте сжатые шрифты (неприглядный подход, поскольку это означает, что вы полагаетесь на шрифт, доступный для клиента), например Arial Narrow.
  • Используйте серверный скрипт, который генерирует изображение из текстовых параметров.

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

Если это невозможно, я определенно рекомендую изучить Шрифт и sIFR.

Итак, вы хотите сжать его, но не раздавить?

Тогда попробуйте отрегулировать размер шрифта. Или какая-то комбинация межбуквенного интервала, межсловного интервала и размера шрифта. (Все это прекрасно работает в IE6).

.nav {font-size: 80%;
letter-spacing: -.05em;
word-spacing: .05em; }

Вы можете отследить исходный шрифт с помощью WhatTheFont

Спустя десять лет font-stretch все еще практически не поддерживается. Но transform:scaleX(); подойдет. Здесь.

Другие вопросы по теме