Проблема с высотой строки CSS в разных браузерах

У меня есть несколько кнопок с высотой строки CSS: 18px. Некоторые из них представляют собой элементы управления вводом type="button", а другие представляют собой привязки, стилизованные под кнопки, подобные элементам управления вводом. В FF3.6.12/IE8 они отображают одинаковую высоту, но в IE7 якоря короче по высоте. Как мне заставить их правильно отображаться в IE7?


person KingCobra42    schedule 08.06.2011    source источник
comment
Я посмотрю, можете ли вы предоставить jsFiddle или JS Bin, который точно воспроизводит вашу проблему.   -  person thirtydot    schedule 08.06.2011
comment
jsFiddle - для окна HTML: ‹div class=Footer› ‹input id=SaveButton type=button value=Save› ‹input id=SubmitButton type=button value=Submit› ‹a class=Button href=/›Reset‹/a › ‹/дел›   -  person KingCobra42    schedule 09.06.2011
comment
Окно CSS: .Footer { padding:5px; поле: 0px; верхняя граница: 1px сплошная # 557AB5; стиль шрифта: курсив; } .Footer input[type=button], .Footer input[type=submit], .Footer .Button { float:right; стиль шрифта: нормальный; высота строки: 16px; отступ: 3px 7px; }   -  person KingCobra42    schedule 09.06.2011
comment
input[type=button], input[type=submit], .Button { background: none Repeat Scroll 0 0 #EEEEFF; граница: 1px сплошная #414649; цвет: #002570; курсор: указатель; размер шрифта: 12px; вес шрифта: полужирный; межбуквенный интервал: 0,05 em; поле: 0 2px; отступ: 3px 7px; тень текста: 1px 1px 1px #DCECF6; -moz-border-radius: 12px 12px 12px 12px; -webkit-border-radius: 12px 12px 12px 12px; высота строки: 16px; }   -  person KingCobra42    schedule 09.06.2011
comment
input[type=button]:hover, input[type=submit]:hover, .Button:hover {граница: 2px сплошная #414649; отступ: 2px 6px; тень текста: 1px 1px 0.0px #DCECF6; } input[type=button]:disabled, input[type=submit]:disabled, .Button:disabled { background-color:#F4F4F4; цвет:#87908E; граница: 2px сплошная #BCC0C2; курсор:авто; отступ: 2px 6px; }   -  person KingCobra42    schedule 09.06.2011
comment
Там вы увидите описанное поведение.   -  person KingCobra42    schedule 09.06.2011
comment
@KingCobra42: Ты не можешь вставить это туда сам? Нажмите кнопку Сохранить, как только вы это сделаете. Ссылка, которую вы должны мне дать, будет в вашей адресной строке. Протестируйте его в IE7, чтобы убедиться, что в демо такая же проблема.   -  person thirtydot    schedule 09.06.2011
comment
О, я не знал, что в адресной строке есть ссылка, чтобы отправить вам. Я достану это для тебя.   -  person KingCobra42    schedule 09.06.2011
comment
Вот: jsfiddle.net/DnGvF   -  person KingCobra42    schedule 09.06.2011
comment
Раньше я использовал jsfiddle только для тестирования кода, но раньше ничего там не сохранял.   -  person KingCobra42    schedule 09.06.2011
comment
Я скоро покину офис, но утром проверю ваши отзывы. Спасибо.   -  person KingCobra42    schedule 09.06.2011


Ответы (3)


Я взял вашу демонстрацию: http://jsfiddle.net/DnGvF/

и добавил только этот CSS в конце: http://jsfiddle.net/gRF9g/

/* ie7 fixes */
.Footer input[type=button],
.Footer input[type=submit]
{
    overflow: visible;
    *height: 24px;
    *line-height: 15px
}

Некоторое объяснение того, что там происходит:

  • В IE7 есть известная ошибка, которую overflow: visible исправляет, связанная с шириной кнопки. Попробуйте посмотреть мою демонстрацию в IE7 с ним и без него.
  • Я использую взлом свойства Star, чтобы изменить height и line-height только для IE7 и ниже. Вы можете изменить цифры, которые я выбрал, если вам нужно.
  • Этот хак — недопустимый CSS, но с его использованием проблем нет. Он никогда не вернется и не укусит вас — это «безопасный взлом». Тем не менее, если вам нужен 100% правильный CSS, есть альтернативы.

Теперь он выглядит одинаково между IE7 и более поздними версиями.

Да, это немного сумбурно, но, по крайней мере, это все вместе в CSS в одном месте, с четким комментарием.

person thirtydot    schedule 10.06.2011

Честно говоря, если IE7 является единственной проблемой, я бы просто пошел на хитрость и увеличил высоту строки:

*+html .button { line-height:24px }

Если вы используете что-то вроде Modernizr, вы можете отказаться от хака и использовать:

.ie7 .button { line-height:24px }

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

EDIT: Забыли об этом методе таргетинга только на IE7:

<!--[if IE7]><style type="text/css">.button{line-height:24px}</style><![endif]-->
person Chris Pratt    schedule 08.06.2011
comment
input[type=button], input[type=submit], .Button { background: none Repeat Scroll 0 0 #EEEEFF; граница: 1px сплошная #414649; цвет: #002570; курсор: указатель; размер шрифта: 12px; вес шрифта: полужирный; межбуквенный интервал: 0,05 em; поле: 0 2px; отступ: 3px 7px; тень текста: 1px 1px 1px #DCECF6; -moz-border-radius: 12px 12px 12px 12px; -webkit-border-radius: 12px 12px 12px 12px; высота строки: 18px; } - person KingCobra42; 08.06.2011
comment
‹input id=SaveButton class=Button type=button value=Save› ‹input id=SubmitButton class=Button type=button data-orderno=426 value=Submit› ‹a class=Button href=/OrderSummary/Display/426›Reset ‹/а› - person KingCobra42; 08.06.2011
comment
Что ж, ничего не выглядит неуместным, но я думаю, что вы поняли меня слишком буквально. Потребуется просмотреть весь CSS, запущенный на этой странице, возможно, даже HTML, который используется при создании кнопки, и даже тогда решения может и не быть. Если увеличение высоты строки только для IE7 работает, то используйте это. Не стоит тратить время или усилия на то, чтобы попытаться согласовать ваш код с глючным движком рендеринга IE7. - person Chris Pratt; 08.06.2011
comment
Я попытался увеличить значение этого свойства до 24, но это не решает проблему. - person KingCobra42; 08.06.2011
comment
Что интересно, CSS для этих элементов управления идентичен при просмотре в Firebug в то время как в FF. Глючный движок рендеринга - как раз то, что нужно, еще один из тех! - person KingCobra42; 08.06.2011
comment
К сожалению, это требование проекта для поддержки IE7. - person KingCobra42; 08.06.2011
comment
Ха-ха, технически это не другой один из них. Тот самый: Трезубец. Тот же чертовски глючный движок рендеринга, который Microsoft пытается отполировать со времен IE3. IE9 сейчас работает довольно хорошо, но я все еще думаю, что это только вопрос времени, когда мы будем делать хаки и для него. - person Chris Pratt; 08.06.2011
comment
Есть разница между поддержкой и четностью пикселей. Если вы согласились на пиксельный паритет, мне очень жаль, потому что ваша жизнь станет нескончаемым адом. Кнопка работает, я так понимаю? Просто рост не тот? - person Chris Pratt; 08.06.2011
comment
Да, они работают. Просто некрасиво быть разного роста. На самом деле мы не договорились о паритете пикселей, поэтому мы не зациклены на этом. - person KingCobra42; 08.06.2011
comment
Я знаю, это звучит отстало, но вы думали о том, чтобы поступить по-другому? Вместо того, чтобы пытаться сделать якоря выше, уменьшите высоту строки на кнопках (то есть на входах) в IE7. - person Chris Pratt; 08.06.2011
comment
Это глупо, поскольку его можно применить только к IE7, но я думаю, что это может быть лучшим ответом. - person KingCobra42; 08.06.2011
comment
Но я предполагаю, что все, что может решить эту проблему, будет по своей сути неуклюжим. Без оскорблений. Я ценю помощь. - person KingCobra42; 09.06.2011

Кнопки в IE имеют дополнительные отступы/границы/что угодно - они не так хорошо стилизованы, как в других браузерах.

person atlavis    schedule 08.06.2011
comment
Даже если есть CSS, который теоретически должен переопределить для них стиль по умолчанию для IE7? - person KingCobra42; 08.06.2011
comment
Теоретически можно попробовать поэкспериментировать с padding-top/bottom; line-height кнопкой или якорем. - person atlavis; 09.06.2011
comment
Что ж, я установил отступ, который не был установлен, для моего класса Button (применительно к якорям), и я вижу в Firebug, в то время как в FF, что теперь он одинаков как для якорей, так и для ввода. Однако это не устраняет проблему в IE7. - person KingCobra42; 09.06.2011