Переключатель размера шрифта сайта на jQuery
Те мои постоянные читатели, кто заходят на блог, наверняка уже заметили, что его контентная часть несколько преобразилась: во-первых, фиксированная ширина этого блока изменена на динамическую (кстати, на эту тему скоро будет написан пост с целью выявления красивого решения), во-вторых, над сайдбаром появилась фича “Размер шрифта”, с помощью которой можно выбрать один из 4-х предопределенных мною размеров шрифта для контентной части.
О реализации последней фичи я и хочу поведать в текущем посте.
Почему я вообще решил сделать подобное? Потому что, во-первых, устали глаза от 13-пиксельного размера шрифта, во-вторых, захотелось универсальности, чтобы посетители могли сами выбрать для себя наиболее удобный размер, в-третьих, к этому подтолкнул сайт alexking.org, на котором тоже реализована подобная вещица.
Поскольку на блоге я уже во всю использую jQuery, соответственно искал решения на нем же, ведь на jQuery код сводится к минимуму (если не считать сам фреймворк). В результате я нашел 2 возможных варианта:
- Switch stylesheets with jQuery – здесь механизм следующий: для каждого состояния необходимо использовать отдельный файл стилей, и все это дело работает с использованием куков, чтобы после переключения страниц сайта или даже после закрытия браузера кука не удалялась, и при последующем заходе на сайт выбор пользователя сохранился.
- jQuery Simple Style Switcher – здесь интересно то, что все стили записываются в один файл и переключение между ними происходит за счет дополнительного родительского класса, применяемого к тегу
<body>
.
Мне очень нужен был второй вариант (стилей немного, поэтому нет смысла выносить их в отдельные файлы), однако в нем не было куков, которые есть в первом варианте. Поэтому стояла цель – скрестить оба решения.
Снова говорю “Спасибо!” моему знакомому программисту, благородному спасителю =), который быстро справился с поставленной задачей.
Дабы не увеличивать и без того получившийся длинным пост, сразу, без всякого кода, предлагаю вам скачать полностью рабочий пример. Ну а живой пример вы можете наблюдать прямо на блоге.
Скачать
Переключатель размера шрифта сайта на jQuery
Загрузок: 2325 | Размер: 19 Кб
Стили нужно будет задать только для 3-х переключателей (если говорить о моем примере), поскольку для 4-го используются стили по умолчанию. Переключателей можно сделать столько, сколько вам нужно, все дополнительные делаются по аналогии.
P.S. Прежде чем приделать к блогу “Размер шрифта”, я проверял его работу в разных браузерах, как то: IE6, IE7, IE8b2, FF2, FF3, Opera 9.5+, Chrome. Safari. Поэтому, если в вашем браузере НЕ отключены куки (cookie) и JavaScript и переключение стилей все-таки не работает, то я не в силах что-либо изменить.
Комментарии (40)
@jeenart тут все умные, не только ты ;) а решение на jQuery хорошее, можно еще добавить понятности – представить в виде букв разного размера, пропорции конечно не важны, гл-е видеть динамику.
А почему бы не воспользоваться стандартным масшатбированием шрифта в браузере? Потому что увеличивается все шрифт а нужно только контента?
Ney,
У меня тоже нормально работает 9.60 (10447) Win Vista
Когда заходишь первый раз, то не показывает какой размер шрифта выбран.
2jeenart:
Через EM не получится так, как было нужно мне. Тем более, что EM – это морока. Не люблю их.
2Повелитель тегов:
Пробовал сначала сделать буквами – вышло некрасиво, поэтому сделал квадратами.
2Zodios:
Во-первых, да. Во-вторых, все браузеры по-своему реализуют масштабирование.
Yuriy Drozdov, потому что используется размер по умолчанию и ничего не выбрано.
jeenart, пфф, где это сказано, что “грамотно верстать” – это только в em-ах?
Ув. Марина, это сказано в здравом смысле, объясню почему: пользователи IE не смогут увеличить размер шрифта указанного в px, а таких пользователей ещё очень и очень много и про них не стоит забывать, если конечно вы верстаете не для того чтобы полюбоваться им в лисе3 и не забить на то как оно смотрится в других браузерах или скажем если зайти с мобилки, а также для того чтобы сделать увлечения шрифта как например на этом сайте, если указывать размер шрифта в em-ах, то можно сделать подобную функцию стандартными средствами css, и не нужно будет использовать скрипты.
Верстать нужно в em и всё будет нормально. Тогда и с ie не будет проблем.
Наконец-то. Спасибо :)
Максим, а в процентах можно?
Я бы добавил title к переключателям. Не уверен, нужно ли там указывать конкретный размер, или нет.
И изначальное значение всё-таки стоит показать. Иначе не понятно, что это переключатель, который может что-то переключать. Нелогично.
По поводу em и % видел недавно статью… Из неё явным образом следует, что они не равноценны и проценты таки правильнее.
может грубо выскажуся но эти копошения со шрифтами такой снобизм и перфекционизм…
Михаил, спасибо за разумные предложения. Изменил.
У меня тоже Opera 9.60 (Win). При клике на +/- загружается главная страница сайта.
Я понимаю, что этот блог читают только гуру CSS и скриптов, но есть и чайники вроде меня, которые не понимают как это установить. Можно хоть в нескольких словах описать, как устанавливать?
Всё я понял. Только вот как сделать, чтобы при уменьшении/увеличении шрифта он оставался одинаковым в сайдбаре, т.е. так как на этом блоге. Ато я сделал и у меня меняется размер полностью всего шрифта на блоге.
Допустим, что у контента идентификатор
id="content"
, а у сайдбараid="sidebar"
. Чтобы не затронуть сайдбар нужно использовать такую конструкцию:При этом имей в виду, что блоки с контентом и сайдбаром должны быть сами по себе, т.е. не находиться друг в друге.
Попробовал прописать вот так в style.css
body.style1 #content { font: 13px/18px “Trebuchet MS”, Tahoma, Arial, sans-serif; }
не помогло (сори если вопросы нубские)
У меня в index.php:
Это значит что сайдбар внутри какогото дива. Я правильно понимаю?
Чтото код не отобразился.
У меня в index.php
Это значит что сайдбар внутри какогото дива. Я правильно понимаю?
Блин ну чего он не отображается: “”
А подсказки по добавлению кода для кого написаны? =)
Сори :)
Попробовал прописать вот так в style.css
body.style1 #content { font: 13px/18px “Trebuchet MS”, Tahoma, Arial, sans-serif; }
не помогло (сори если вопросы нубские)
У меня в index.php:
Это значит что сайдбар внутри какогото дива. Я правильно понимаю?
Сброшу код на мыло
Есть предложение. Почему бы не сделать, чтобы по умолчанию шрифт был не самый большой (в нашем случае 16px), а, например, предпоследний, чтобы у посетителя был выбор: увеличить или уменьшить. Мне кажется, что кто если и захочет изменить шрифт, то скорее всего увеличить (крупный текст легче читается и меньше устают глаза), а мы предлагаем только уменьшить.
Найди в скрипте такую строку:
и замени
style4
на нужный.Изменил style4 на style3. Теперь при первой загрузке выбранным квадратом стал предпоследний, но шрифт всё равно стоит самый большой и при нажатии на самый большой квадрат шрифт остается тем же, но если нажать опять на предпоследний, то он уменьшается.
Попробуй сбросить куки.
Я в разных браузерах проверял, т.е. даже в тех, которые после установки скрипта загрузил впервые. Или куки одни для всех?
Не, с куками все нормально. Я понял, в чем дело. Тебе нужно к тегу
<body>
дописать класс style3:Тогда будет работать.
И еще. Я нашел мелкий баг. Если нажать на “Изменить” в плагине “С возвращением …”, то скрипт изменения шрифта перестает работать (пропадает выбранный квадрат и все квадраты не нажимаются). Помогает только перезагрузка страницы. Это скрипты конфликтуют или я чтото неправильно сделал? (у тебя всё ок)
Да, конфликтуют. Я кое-что забыл добавить в скрипт. Сейчас исправил, скачай его заново.
А есле нужен размер шрифта тот который уже был прописан в стилях, до подключения этого скрипта класс прописывать не нужно ? В примере стиль 4 отсутствует как клас.
PS класс нужно добавлять не body а блоку с основным содержимым страницы.
У вас это так и сделано, в примере нет.
Привет!
Только начинаю учится писать на HTML,потому еще нет рабочих сайтов.
Подскажите плз куда этот переключатель должен прописываться?
Сори за такие вопросы.
заранее спасибо!
Туда, где он должен выводиться на странице.
Что-то не нашел, где на это блоке фича используется. :(
Уже убрал, т.к. блог перегружен разными скриптами.