2014-02-05 4 views
7

Я использую свойство line-height для выравнивания текста с иконками в меню. Я создал упрощенную версию (без значков), чтобы проиллюстрировать мою проблему. Кажется, что проблема связана с общим вертикальным выравниванием шрифтов.Текст не вертикально центрирован.

Вы можете увидеть эту проблему на jsfiddle: http://jsfiddle.net/KFxG3/1/

код очень прост:

<div>qb - Some text - qb</div> 

на добавление стиля:

div { 
    background-color: green; 
    height: 22px; 
    line-height: 22px; 
    font-size: 20px; 
    font-family: 'Segoe UI', 'Verdana', 'Arial'; 
} 


Вот как это выглядит :

This is how it looks like

И это, как это должно выглядеть:

And this is how it SHOULD look like

Почему это происходит в новых браузерах? Я тестировал его на Windows 8.1 64-bit в Firefox 27.0.

EDIT: Я хочу знать, ПОЧЕМУ браузеры не отображаются правильно. Маленькая буква типа «a» должна иметь одинаковое пространство сверху и снизу «зеленого», когда применяется высота линии, высота которой равна размеру контейнера. Но рендеринг ошибочен.

EDIT # 2: Это проблема с шрифтом. У Segoe UI, похоже, странная базовая линия. При использовании Arial, Verdana или любого другого вертикального выравнивания лучше подходит (но это также не идеально). ->http://jsfiddle.net/KFxG3/22/

+0

http://jsfiddle.net/KFxG3/3/ <--- Кстати поведение идеально, q всегда вытекает, а текст выравнивается по вертикали, а также –

+0

. Вы были бы правы, @ Mr.Alien. Я использовал 15px и посмотрел на него. Я был 1! ': (' – Albzi

+0

Но установка другой высоты строки для решения проблемы не может быть верным способом. Кажется, что исходный код интерфейса Segoe UI ошибочен. – SuperNova

ответ

-1

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

div { 
    background-color: green; 
    font-size: 20px; 
    font-family: 'Segoe UI', 'Verdana', 'Arial'; 
} 

Пример: http://jsfiddle.net/KFxG3/2/

0

Вы хотите добавить/изменить line-height.

Чтобы получить q и b посередине, используйте line-height:16px;, однако some text будет выглядеть изворотливым. Побеседуйте с 16px;, и вы можете найти то, что хотите.

Пример:

div{ 
    line-height:16px; 
} 
-1
vertical-align: middle; 
padding-bottom:5px; 

вы должны добавить в ваш CSS

+1

Это ничего не делает для кода OP (в условия поиска). – Albzi

+0

дайте padding-bottom: 5px; –

+0

Пожалуйста, объясните свое решение, чтобы будущие посетители этого вопроса поняли, как это решает проблему. – War10ck

0

Вы можете обернуть текст части в другую <div> и может попытаться display:table и display:table-cell подход с verical-align:middle

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

Remove высота линии полностью от родительского

HTML

<div class="container"><div class="content">qb - Some text - qb</div></div> 

CSS

.container { 
    background-color: green; 
    height: 55px; 
    display:table; // here it is 
    font-size: 20px; 
    font-family: 'Segoe UI', 'Verdana', 'Arial'; 
} 
.content{ 
    display:table-cell; // here it is 
    vertical-align:middle; 
} 

Fiddle Example

+0

Спасибо, я уже пробовал это. Текст не правильно центрирован по вертикали в таблице-ячейке вообще (я проверил пиксели над текстом и под ним). Всегда есть разница в 4 или 5 пикселей. – SuperNova

0

ДИВ неправильный элемент для вас в этом случае .. Просто попробуйте один и сравнить:

span { 
    background-color: green; 
    height: 22px; 
    line-height: 22px; 
    font-size: 20px; 
    font-family:'Segoe UI', 'Verdana', 'Arial'; 
} 

div { 
    background-color: green; 
    height: 22px; 
    line-height: 22px; 
    font-size: 20px; 
    font-family:'Segoe UI', 'Verdana', 'Arial'; 
} 

И

<span>qb - Some text - qb|ÜÄÖ</span> 
<br><br> 
<div>qb - Some text - qb|ÜÄÖ</div> 
+0

'div' никогда не ошибается. –

1

JSFiddle!

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

Вы можете компенсировать разницу, применяя прокладку.

padding-bottom: 5px; 
-1

Вот дополненная скрипку http://jsfiddle.net/KFxG3/16/

вам нужно удалить элемент высоты. div вычисляет высоту в соответствии с размером шрифта.

CSS

div{ 
    background-color: green; 
    font-size: 20px; 
    font-family: 'Segoe UI', 'Verdana', 'Arial'; 
} 
+0

Хорошо, что вы можете видеть в этом коде, что текст не центрирован по вертикали, когда не указаны высота и высота строки. Может быть, это проблема с шрифтом ?! – SuperNova

+0

О да, что может быть. –

0

Браузеры действуют нормально. Вы можете быть смущены, потому что ваш размер шрифта, 20 пикселей меньше, чем высота вашей линии, 22 пикселя, и похоже, что он будет вписываться. Но это не так.

В качестве примера, установка размера шрифта H1 на 24px создаст высоту линии 39 пикселей. Размер шрифта 12px приведет к 18-кратной линейной высоте.

+0

Я просто использовал высоту линии меньше размера шрифта, чтобы проиллюстрировать проблему. Граница между маленькими буквами, такими как «a», должна быть одинаковой (или почти той же) до верхней и нижней границы «зеленого», но это не так. – SuperNova

+0

Каковы фактические размеры? – Kuzgun

0

Попробуйте добавить дополнение к вашему коду.

Пример:

div { 
    background-color: green; 
    height: 22px; 
    line-height: 22px; 
    font-size: 20px; 
    font-family: 'Segoe UI', 'Verdana', 'Arial'; 
    padding: 5px 0; 
} 
+0

Я пробовал, но не вертикально центрирован: http://jsfiddle.net/KFxG3/20/ - Вы видите разное расстояние сверху и снизу. – SuperNova

+0

Ну, если вы не можете получить его по центру по умолчанию, попробуйте немного изменить его код [http://jsfiddle.net/KFxG3/21/] –

0

Я полагаю, это то, что вы ищете: http://jsfiddle.net/KFxG3/19/

Вам нужно добавить строку ниже в ваш CSS.

padding-bottom:5px; 

Однако это не значит, что линия должна «работать». Насколько мне известно, нижняя часть букв, таких как p и q, не учитывается в среднем значении высоты шрифта. Вам нужно будет измерить прописную букву, чтобы получить довольно точный результат.

Вам не требуется, например, высота div, если только вам не нужна высота, которая будет находиться снаружи.

Я предлагаю вам также взглянуть на «размер коробки». Чтобы предотвратить расширение проложенного элемента наружными размерами.

Кроме того, использование старых браузеров в качестве меры правильных и неправильных способов сделать вещи, вероятно, не является самым безопасным подходом к любым выводам, связанным с CSS.

0

Это похоже на опоздание на 4 года, но иногда вам нужно проверить правильность размера коробки.

a{ 
    box-sizing: content-box 
} 

Затем ваша высота и высота линии должны центрировать текст.

+0

Что не изменит ничего: http://jsfiddle.net/KFxG3/30/ – SuperNova

1

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

Для платных шрифтов всегда добавляйте все файлы расширения шрифтов в папку шрифтов/поставщиков и используйте следующий формат для добавления шрифтов в таблицу стилей.

формат шрифта лицо:

 @font-face { 
     font-family: 'MyWeb'; 
     src: url('webfont.eot'); /* IE9 Compat Modes */ 
     src: url('webfont.eot?#iefix') format('embedded-opentype'), /* IE6-IE8 */ 
     url('webfont.woff2') format('woff2'), /* Super Modern Browsers */ 
     url('webfont.woff') format('woff'), /* Pretty Modern Browsers */ 
     url('webfont.ttf') format('truetype'), /* Safari, Android, iOS */ 
     url('webfont.svg#svgFontName') format('svg'); /* Legacy iOS */ 
} 

Для получения более подробной информации вы можете обратиться ссылке ниже: https://css-tricks.com/snippets/css/using-font-face/

+0

Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. - [Из обзора] (/ review/low-quality-posts/16850111) – Matthew

+1

Спасибо, что направили меня сюда, я обновил свой ответ. –

Смежные вопросы