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






Единственный гарантированный способ получить такой уровень контроля - это визуализировать текст как изображения. Хотя это может работать нормально для меню (которые не так часто меняются), я видел, как этим жестоко злоупотребляли сайты, где весь текст был создан как изображения.
У меня есть хороший друг, который по образованию дизайнер полиграфии. Когда она впервые начала заниматься веб-дизайном, она чуть не сошла с ума из-за отсутствия контроля. Я посоветовал ей глубоко вздохнуть, изучить блочную модель CSS, а затем разработать «нормальный» размер шрифта +/- 1 размер.
У вас есть три варианта:
Я бы даже не сказал, что работать с изображениями - это хорошо. Используйте сброс css, найдите удобный, читаемый размер шрифта и установите его с помощью em. Любой, кто собирается увеличить размер шрифта, хочет читать контент, а не видеть, сломается ли ваш сайт.
Вы сражаетесь в битве, которую не выиграете, если попытаетесь все исправить и радоваться только своим глазам. Если контент предназначен для публичного использования, то поймите, что у г-жи Паблик разные мнения относительно правильного размера шрифта, который ей следует читать.
Браузеры прошли долгий путь к тому, чтобы то, что вы пытаетесь сделать, не мешало людям видеть контент.
Развивайте и поймите, что размер шрифта ДОЛЖЕН изменяться с помощью CTRL + '+/-'
Но до какой крайности? Если человек максимально увеличивает размер шрифта своего браузера, то такие вещи, как горизонтальные навигационные меню, переносятся на новые строки, полностью разрушая макет.
Если они увеличивают размер шрифта до максимума, чтобы сломать ваш макет, действительно ли это вас беспокоит? Вы должны иметь в виду, что пользователи, которые отключили Javascript, используются для сайтов, которые не работают, точно так же, как пользователь с большим шрифтом используется для макетов, которые выглядят странно. Пусть решают.
@Bryan Как сказал HBoss. Если этот сайт предназначен для вашего развлечения, просто сохраните его на рабочем столе и откройте, когда захотите посмотреть.
Проблема не в том, что кто-то масштабирует, клиент хотел это, и это похоже на то, что он хотел, проблема в том, что шрифт 9pt отображается, например, 7 и 8 и хром, но не в ff
Есть еще вариант:
Определите размер шрифта пользователя с помощью следующего скрипта: http://www.alistapart.com/articles/fontresizing/
Затем настройте контейнер div в em, чтобы компенсировать размер пользователя.
Например, если размер шрифта пользователя равен 22, а база - 20, тогда размер шрифта вашего контейнера div должен быть 20/22 (т.е. 22 * (20/22) = 20). :)
Примечание. Причина, по которой вам понадобится контейнер div, заключается в том, что ваш слушатель событий будет следить за изменениями размера шрифта в теле.
(Этот ответ, вероятно, разозлит некоторых экспертов по юзабилити. Извините этих людей. У вас есть хорошие моменты, но ответ все равно остается ответом.: P)
PS. Думаю, мне лучше приложить свой код реализации, чтобы доказать, что он работает. Я не редактировал этот код для глобального приложения. Он скопирован и вставлен ... обратите внимание на такие вещи, как замена моего условного IE (который использует динамически добавленные классы CSS) обычными условными операторами обнаружения браузера (например).
Это долго, но все необходимое:
updateBaseFontSize : function(fontSize,reloadBool){
/*Format 1 is fed from the plug; format2 is the body size equiv
*examples:
*Frmt 1 (all/IE) | Frmt 2 (all/IE)
*20/18 | 16px/16px
*21/21 | 17.6px/19px
*22/23 | 19.2px/22px
*
*Purpose of updateBaseFontSize is:
* 1. convert format 1 figures to format 2
* 2. modify the all containing div 'fontbodyreadjust'
* to compensate for the new user defined body font size
*/
var format1Base;
var format1Size = fontSize; //equals new size in pixels
var reloadPage = reloadBool; //prevents reload on 1st visit
var baseConverter;
var changeConverter;
if ($('body').hasClass('browserIE')) {
format1Base = 19; //expected base size value for IE
baseConverter=16/19; //converts from format 1 to 2 for IE
changeConverter=1.5; //ditto for the difference from base size for IE
} else {
format1Base = 20;//expected base size value for all other browsers
baseConverter=16/20; //converts from format 1 to 2 for all others
changeConverter=1.6; //ditto for the difference from base size for all others
}
//Find modifiedSize, how much to compensate for the new body size
var format2Base = format1Base * baseConverter;
var format2SizeChange = (format1Size-format1Base)*changeConverter;
var format2NewSize = format2SizeChange + format2Base;
var modifiedSize = format2Base/format2NewSize;
//Allow text resizing for shrinking text and very very large text
//Only works for safari. meant to prevent odd behavior at math extremes
if ((format2NewSize >= format2Base)&&(modifiedSize>.6)){
$('#fontbodyreadjust').css('font-size',modifiedSize+'em');
}
//reloadPage boolean in place so that reload doesn't occur on first visit
if (reloadPage){
window.location.reload()
}
},
initHome : function(){
// UNHIDE HOME PAGE CONTENT AFTER IT'S LOADED. OTHERWISE, LAYERED AND MESSY
$('#slider').css('display', 'block');
// PREVENT VARIOUS USER BROWSER-FONT RESIZE SCENARIOS
// Note: irrelevant for browsers that zoom all elements simultaneously
window.initFontResizeDetector = function(){
var iBase = TextResizeDetector.addEventListener(onFontResize,null);
//Don't run the updateBaseFontSize if font size is not larger than usual
if (iBase>20){
var reloadBoolean = false;
window.updateBaseFontSize(iBase,reloadBoolean);
}
}
//id of element to check for and insert control
TextResizeDetector.TARGET_ELEMENT_ID = 'bodyContent';
//function to call once TextResizeDetector has init'd
TextResizeDetector.USER_INIT_FUNC = window.initFontResizeDetector;
window.onFontResize = function(e,args) {
var iSize = args[0].iSize; //get new user defined size
// var iDelta = args[0].iDelta; //get new user defined size
// var iBase = args[0].iBase; //get new user defined size
var reloadBoolean = true;
// console.info(iSize,iDelta,iBase);
window.updateBaseFontSize(iSize,reloadBoolean);
}
Согласовано. Умышленное нарушение увеличенного размера шрифта - плохая идея. Если ваш пользователь просматривает страницы с увеличенным размером шрифта, вероятно, это потому, что им это нужно. Единственный случай, когда это может быть нормально, - это если вы используете огромный размер в пикселях, и в этом случае вы можете использовать (2), используя изображения.