Как убедиться, что между краем контейнера и персонажем нет зазора?

avatar
klm123
1 июля 2021 в 19:37
74
2
0

Поэтому, когда вы помещаете слово в блок-контейнер, между самым первым пикселем самого первого символа (в данном случае "1") и левым краем контейнера остается небольшой интервал. Как его удалить?

Установка заполнения на 0 не помогает, как видно из рисунка: enter image description here Вот образец для игры: https://codepen.io/alanclm/pen/oNWXerd?editors=1000

<div style="width: 300px;">
  <div style="float:right; padding: 0; font-size:200px;">
      15
  </div>
</div>

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

Источник
Temani Afif
1 июля 2021 в 19:46
0

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

klm123
1 июля 2021 в 19:57
0

@TemaniAfif кода нет, это происходит по умолчанию (проверено как в Chrome, так и в Opera). Я отредактировал сообщение с «примером кода»...

Temani Afif
1 июля 2021 в 20:00
0

тело {поле:0} ?

jona
1 июля 2021 в 20:19
0

Почему вы установили его на float: right? Так точно будет зазор.

G-Cyrillus
1 июля 2021 в 20:30
0

измените 15 на 05 или FO , затем проверьте также с другими семействами шрифтов;)

Paulie_D
1 июля 2021 в 20:33
3

Вы не знаете. Это пространство встроено в шрифт... и оно существует не просто так, чтобы буквы не соприкасались друг с другом.

klm123
1 июля 2021 в 20:49
0

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

klm123
1 июля 2021 в 20:51
0

@Paulie_D, есть ли способ предсказать размер этого пространства? Как всегда 1% от ширины буквы или что-то в этом роде? По какой-то причине он есть или нет, но мой дизайнер не согласен с этой причиной, и я согласен с моим дизайнером, это выглядит некрасиво, когда вы кладете большой и маленький текст рядом друг с другом - вы не можете выровнять их по левому краю. .

Paulie_D
1 июля 2021 в 20:52
0

Нет, это полностью зависит от шрифта. Вы можете играть с letter-spacing размером em, но YMMV.

klm123
1 июля 2021 в 21:14
0

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

myf
1 июля 2021 в 23:31
1

Вы можете использовать text-indent для регулировки левого зазора и word-spacing с пробелом в (псевдо-) содержимом после последнего глифа для правого зазора, но, тем не менее, вы получите единую статическую подгонку для одной комбинации шрифт-начертание + конкретный текст.

Ответы (2)

avatar
myf
1 июля 2021 в 21:32
2

Как прокомментировал Paulie_D, настройка контейнера таким образом, чтобы его размеры совпадали с геометрической ограничивающей рамкой его текста (наоборот текст, чтобы «прикоснуться к его оболочке») не всегда возможна в простом CSS и, как правило, даже не совсем желательна с точки зрения типографии.

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

<body style="background: white; margin: 10vmin">
 <div contenteditable style="display: inline-block;
  font: 90vmin / 0.7em Times New Roman;
  background-color: black; color: white;
  text-indent: -.121em; word-spacing: -.317em;
  ">15 <!-- = space for negative word spacing -->&nbsp;</div>
</div>

(Обратите внимание на эти дурацкие значения text-indent и word-spacing.)

Результаты рендеринга в Firefox на компьютере с Windows:

white number '15' in black rectangle - leftmost and rightmost vertices touching white surrounding ("верно"), similar to previous image, but with number '51', now considerable parts of digit five are cut outside of the left boundary and digit one does not even touch right boundary ("неправильно").

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


Гипотетически использование холста JavaScript для получения геометрического ограничивающего прямоугольника текста и применения данных обратно к стилю технически возможно, но, как видно из "правильного" примера выше, даже тогда "крайний правый" пиксель верхнего плеча " 5-дюймовый глиф, выходящий за нижнюю арку, вероятно, не является правильной границей.

avatar
MrSandman98765
1 июля 2021 в 20:38
-1

Вы можете попробовать комбинацию абсолютного позиционирования и медиа-запросов.

Установите для родительского элемента div значение position: relative, а для дочернего элемента значение position: absolute, затем установите для свойства left отрицательное число, например left: -25px

.

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

klm123
1 июля 2021 в 20:48
0

Я не могу воспроизвести это: imgur.com/ZyDdgF3 . Пожалуйста, добавьте скриншот или что-то еще, чтобы показать, что именно вы удалили.

klm123
1 июля 2021 в 20:51
0

каким именно должно быть это отрицательное число, чтобы оно работало для любого шрифта?

MrSandman98765
1 июля 2021 в 20:52
0

Извините, я думаю, что изначально неправильно понял вопрос. Я думал, вы пытаетесь переместить внутренний div как можно дальше влево. Отредактирован исходный ответ с новым предложением.

MrSandman98765
1 июля 2021 в 21:27
0

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