Как запретить пользователям изменять размер шрифта на моем веб-сайте? - PullRequest
0 голосов
/ 02 декабря 2009

Как запретить пользователям изменять размер шрифта на моем веб-сайте?

Ответы [ 11 ]

45 голосов
/ 02 декабря 2009

На самом деле, вы должны разрешить изменение размера шрифта по причинам доступности.

27 голосов
/ 02 декабря 2009

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

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

В любом случае, современные версии браузеров (IE, FireFox, Opera) просто масштабируют визуализированную страницу, оставляя относительные пропорции элементов без изменений. Проблема решена.

18 голосов
/ 22 августа 2010

Два варианта:

  1. Превратите весь ваш текст в изображения.

  2. Обнаружение изменений размера шрифта браузера и базового шрифта (когда они поступают на ваш сайт), затем динамическая настройка размера шрифта для компенсации их изменения.

Вот код JavaScript для детектора размера шрифта: http://www.alistapart.com/d/fontresizing/textresizedetector.js

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

addFontResizeListener = function () {
        var iBase, reloadBoolean;

        iBase = addEventListener(lzaIndex.onFontResize, null);

        //Don't run the updateBaseFontSize if font size is not larger than usual
        if (iBase > 20) {
            reloadBoolean = false;
            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 = addFontResizeListener;

    onFontResize = function (e, args) {
        var iSize, reloadBoolean;

        iSize = args[0].iSize; //get new user defined size

        reloadBoolean = true;
        updateBaseFontSize(iSize, reloadBoolean);
    };

Затем добавьте саму перенастройку:

updateBaseFontSize : function (fontSize, reloadBool) {
    /*Format 1 is fed from the plugin; 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, format1Size, reloadPage, baseConverter, changeConverter,
    format2Base, format2SizeChange, format2NewSize, modifiedSize;

    format1Size = fontSize; //equals new size in pixels
    reloadPage = reloadBool; //prevents reload on 1st visit

    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
    format2Base = format1Base * baseConverter;

    format2SizeChange = (format1Size - format1Base) * changeConverter;
    format2NewSize = format2SizeChange + format2Base;

    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
    jFontBodyReadjust = $('#fontbodyreadjust');

    if ((format2NewSize >= format2Base) && (modifiedSize > 0.6)) {
        jFontBodyReadjust.css('font-size', modifiedSize + 'em');
    }

    //reloadPage boolean in place so that reload doesn't occur on first visit
    if (reloadPage) {
        window.location.reload();
    }
}

ПОМНИТЕ: Предоставьте альтернативу тем, кто не видит ваш определенный размер шрифта. Это правильно. Вы можете поместить доступ к своей альтернативе (например, через всплывающий вопрос) в if (iBase > 20)

PS. Также помните, что вы можете указать ВСЕ ширины вашего элемента (изображения и т. Д.) В ems, чтобы изменение размера шрифта регулировало все, НО это немного грязно, есть разные интерпретации браузера, которые должны быть компенсированы, и вы не можете использовать спрайты ( потому что ems просто покажет больше нужного вам спрайта.

PSS. Указание px не поможет вам в современных браузерах ... не знаю, почему это кажется популярным ответом здесь.

17 голосов
/ 02 декабря 2009

как насчет преобразования вашего текста в изображение.

8 голосов
/ 02 декабря 2009

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

4 голосов
/ 04 сентября 2012

Хотя в целом это плохая идея, ситуация не так очевидна, как упоминалось ранее.

На данный момент (сентябрь 2012 г.) в настоящее время можно запретить пользователям Google Chrome и Safari изменять размер отображаемого шрифта. Приведенный ниже метод предназначен для полноты картины и повышения осведомленности. Пожалуйста, избегайте соблазна использовать этих людей, так как это серьезно нарушает правила юзабилити и доступности.

p {
     -webkit-text-size-adjust:none;
  }

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

Это нестандартно, и поэтому необходимо использовать префикс. Соответствующие расширения для Firefox и IE, -moz-text-size-adjust и -ms-text-size-adjust, ведут себя соответствующим образом.

Кроме того, имеется ошибка WebKit , зарегистрированная в данной проблеме.


Пример:

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

Просмотр вышеуказанной ссылки в Safari или Chrome не позволит изменить размер с помощью Ctrl + [Lin / Win] или + [OS X]

4 голосов
/ 28 июля 2010

Технически вы не можете, но то, что вы можете сделать, это:

  1. Пересоздай все на флеш сайт
  2. Отключить увеличение или щелкнуть правой кнопкой мыши меню, когда вы вставляете флеш на ваш сайт. (просто Google, как отключить контекстное меню, очень просто, что-то вроде "allow-menu = false"

Вот и все. Большинство пользователей не могут изменить размер шрифта сейчас, если они не знают, как взломать =)

Сделайте это, если вы: 1. Иметь много времени 2. Хотите экспериментировать с новыми вещами 3. Не против тратить свое время и энергию (смеется)

3 голосов
/ 02 декабря 2009

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

С 1 октября 1999 г. поставщик услуг должен предпринять разумные шаги для изменения практики, которая делает неоправданно трудным использование услуг инвалидами

Закон об инвалидности

Хотя этот закон не применяется, он рассматривается как «Свод практических правил, в котором конкретно упоминаются веб-сайты».

Это всего лишь «кодекс практики», и не все следуют ему.

3 голосов
/ 02 декабря 2009

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

2 голосов
/ 08 февраля 2010

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

В этом случае простой обходной путь - указать размеры шрифта в px единицах в CSS. Таким образом, пользователь по-прежнему сможет использовать функцию масштабирования своего браузера, но отношение вашего шрифта 15 пикселей к изображению размером 150 пикселей всегда будет постоянным, независимо от размера шрифта пользователя или настроек dpi.

...