18июля,
2010
Ну и я ступил на скользкий путь

В общем, терпение, конечно, у меня объёмистое очень, до последнего, а потом прорывает.

За сим, наконец-то решился отказаться от поддержки IE6. Я там уже просто наизусть знаю тонну багов и всегда стараюсь верстать, чтоб они не вылезли при тестировании макетов, но всякие разные интересные штуки, которые спокойно делаются в ие7-8 итд итп, а в ие6 не работают — да и хуй с ним, с этим IE6. Достал.

Буду требовать денег за поддержку динозавра позапрошлой эпохи интернета.

Заноза в заднице, больной зуб разработчика.  Ещё надо какое-нибудь всплывающее окошко вешать на сайты с издевательскими текстами.

15мая,
2010
Ошибка в ManagerManager в версии 0.3.8

В последней версии ManagerManager, которая идёт с дистрибутивом Modx-а 1.0.3, обнаружилась ошибка:
mm_hideTemplates работает корректно только в Firefox-е. В остальных браузерах список шаблонов остаётся прежним и ничего не скрывается.

На официальном форуме предложили решение:
В файле /managermanager/functions/templates.inc.php заменить:

foreach ($tplIds as $tpl) {
$output .= 'if ($j («select#template»).val () != '.$tpl. ') { '. «\n»;
$output .= '$j ("select#template option[value='.$tpl.']").hide ();' . «\n»;
$output .= '}' . «\n»;
}

на:

foreach ($tplIds as $tpl) {
$output .= 'if ($j («select#template»).val () != '.$tpl. ') { '. «\n»;
$output .= '$j ("select#template option[value='.$tpl.']«).remove ();' . „\n“;
$output .= '$j („select#template optgroup:not (:has (*))“).remove ();' . „\n“;
$output .= '}' . „\n“;
}

Также в файле /manager/actions/mutate_content.dynamic.php на строке 585 исправить на:

<optgroup label=»blank">
<option value="0">(blank)</option>

Что поможет избежать других проблем, потому как тег <optgroup> не указан.

Проверил, работает в Chrome, Opera и IE. Более того, Opera вылетала постоянно при попытке редактировать документ, после внесения исправления стала работать корректно.

1мая,
2010
Проблема с AjaxSearch в связке с YAMS в Modx

Как оказалось, AjaxSearch нигде и ничего не ищет, когда системные поля Modx-а YAMS заменяет на TV-параметры.

На официальном форуме предлагается решение в подробностях, которое у меня так и не заработало. Всё это делалось на версии Modx Evolution 1.0.3.

А нашлось оно совершенно случайно (как обычно, впрочем). Надо было поставить чуть постарше версию AjaxSearch-a.

А именно версию 1.8.4. Она лежит в Previous Releases AjaxSearch-a.
Либо вот прямая ссылка на неё.

Как выглядит сам вызов:

На всех страницах сайта (ну, или на тех, где поле для поиска нужно) разместить вызов сниппета:

[!AjaxSearch? &parents=`0` &mbstring=`0` &AS_landing=`25` &addJscript=`0` &extract=`0` &AS_showResults=`0` &ajaxSearch=`0` &language=`(yams_mname)` &withTvs=`+:pagetitle_en,longtitle_en,introtext_en,description_en,content_en,pagetitle_ru,longtitle_ru,introtext_ru,description_ru,content_ru` &tplLayout=`search_tpl`!]

mbstring я отключаю сразу, оно у меня не работает. Поиск без перезагрузки я не проверял, он не нужен мне в 99%, а то и во всех 100% случаев, вроде как он всё равно корректно не работает. Ну, а дальше, собственно, куда будет выводиться результат поиска, на каком языке будет всё описание и, то, по каким полям AjaxSearch будет искать. Ну и сами TV-параметры, которые создаёт YAMS и не находит AJAxSearch.

Шаблон формы поиска стандартный:

[+as.showForm:is=`1`:then=`
<form [+as.formId+] action=[+as.formAction+]«„ method=“post»>
<fieldset>
<input type="hidden" name="advSearch" value=[+as.advSearch+]«„ />
<label for=“ajaxSearch_input»>
<input id="ajaxSearch_input" type="text" name="search" value=[+as.inputValue+]«[+as.inputOptions+]„ />
</label>
<label for=“ajaxSearch_submit»>
<input id="ajaxSearch_submit" type="image" src=[(site_url)]«images/search.gif» name="sub" value=[+as.submitText+]«« />
</label>
</fieldset>
</form>
`+]
[+as.showIntro:is=`1`:then=`
<p id="ajaxSearch_intro">[+as.introMessage+]</p>
`+]
[+as.showResults:is=`1`:then=`
[+as.results+]
`+]

Страница вывода результатов:

[!AjaxSearch? &mbstring=`0` &AS_showResults=`1` &ajaxSearch=`0`, &AS_landing=`25`, &AS_showForm=`0` &language=`(yams_mname)` &withTvs=`+:pagetitle_en,longtitle_en,introtext_en,description_en,content_en,pagetitle_ru,longtitle_ru,introtext_ru,description_ru,content_ru` &tplResult=`searchresult_`!]

Шаблон вывода результатов:

<a href=»(yams_doc:[+as.id+])» title=[[YAMS? &get=`content` &from=`pagetitle` &docid=`[+as.id+]«`]]»>[[YAMS? &get=`content` &from=`pagetitle` &docid=`[+as.id+]`]]</a>
[+as.descriptionShow:is=`1`:then=`
<span>[+as.description+]</span>
`+]
[+as.extractShow:is=`1`:then=`
<div><p>[+as.extract+]</p></div>
`+]
[+as.breadcrumbsShow:is=`1`:then=`
<span>[+as.breadcrumbs+]</span>
`+]

Тут стоит обратить внимание, что вызовы плейсхолдеров AjaxSearch-а заменяются на вызовы сниппета YAMS.

Чтобы ссылка работала верно, она обязательно должна быть заменена на (yams_doc:[+as.id+])

Ну, а показать title или заголовок, то надо вызывать сниппет YAMS:

[[YAMS? &get=`content` &from=`pagetitle` &docid=`[+as.id+]`]]

Такой поиск работает корректно, ищет и находит и правильно ссылается на страницы из результатов поиска.

30апреля,
2010
Barcamp 2010

В этом году как-то очень бардачно проходит организация, куча каких-то проблем, задержек.

Смотришь со стороны и даже странно.

Хотя понятно, что организация подобных мероприятий — дело сложное и требует много времени и сил.

Я свою лепту внёс (впервые) — нарисовал сайт. Не знаю, кто и что там думает. Но самому работа нравится. Что-то, правда, в процессе остальной работы, он слегка видоизменился, ну, да ладно, не смертельно.

Программа постепенно пополняется презентациями, вроде бы даже не самыми плохими, посмотрим.

28апреля,
2010
Установка модуля, плагина и сниппета YAMS в Modx

YAMS — Yet Another Multilingual Solution — служит для создания многоязычных сайтов на базе Modx CMS.

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

Полностью переводить документацию не буду, расскажу в общих чертах, как его запустить и заставить работать.

Устанавливался YAMS на версию Modx Evolution 1.0.3, которая уже в дистрибутиве имеет предустановленный ManagerManager последней версии, без него YAMS просто не получится использовать.

Установка:
Надо скачать архив последней версии. Там что-то непонятное с версиями. Последняя версия почему-то не лежит на странице для скачки, а в списке Previous Releases, потому прямая ссылка на версию 1.1.7-alpha RC7, она пока последняя.

Распаковать архив и залить в папку assets/modules/yams, выставить права на папку yams 775.

Подключение модуля, плагина и сниппета:

Код модуля:

require_once ( $modx->config['base_path'] . 'assets/modules/yams/yams.module.inc.php' );

— Создать в администрационной части в разделе «Модули» новый модуль YAMS.
Описание: Yet Another Multilingual Solution Module

— Создать в администрационной части в разделе «Плагины» новый плагин YAMS.
Описание: Yet Another Multilingual Solution Plugin
Код плагина:

require ( $modx->config['base_path'] . 'assets/modules/yams/yams.plugin.inc.php');

В системных событиях плагина поставить галочки на:
OnLoadWebDocument
OnParseDocument
OnWebPageInit
OnWebPagePrerender
OnLoadWebPageCache
OnPageNotFound
OnBeforeDocFormSave

— Создать в администрационной части в разделе «Сниппеты» новый сниппет YAMS.
Описание: Yet Another Multilingual Solution Snippet
Код сниппета:

<?php
require ( $modx->config['base_path'] . 'assets/modules/yams/yams.snippet.inc.php' );
?>

После перезагрузить страницу, чтобы модуль заработал.

Настройка ManagerManager:
Независимо от того, что используется, в файле с правилами или чанке с правилами в конце надо прописать:

require ( $modx->config['base_path'] . 'assets/modules/yams/yams.mm_rules.inc.php' );

Собственно, YAMS готов к работе.

В «Инструментах» > «Конфигурации» включить Дружественные URL, разрешить вложенные URL, также использовать в связке с предыдущим параметром повторяющиеся псевдонимы, тогда путь до документа в адресной строке будет выглядеть:
site.com/en/catalogue/home-video
site.com/ru/catalogue/home-video

Настройка:

Во вкладке «Модули» > «YAMS» лежат все настройки.

Настройка языков:

Собственно, исчерпывающая страница, на которой показаны языки и как их добавлять. Теги, названия для отображения в самом же языке, в других языка, выбор письма справа налево или наоборот, теги (нужны для вызовов сниппета YAMS, обозначение, группы), системное название языка, имя сервера система подставляет автоматически. Set Default — поставить язык по умолчанию, чтобы с него открывался сайт.

Дальше идёт настройка сервера, после того, как созданы все необходимые языки, YAMS создаёт правила, которые надо вписать в .htaccess, чтобы правильно работали пути и редиректы.

Это находится на следующей вкладке:

Всё содержимое из этой вкладки просто скопировать в .htaccess

Другие настройки:

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

Последняя вкладка: Multilingual Templates

Нужна для того, чтобы YAMS перекраивал панель редактирования под многоязычный сайт.

YAMS заменяет стандартные поля Pagetitle, Longtitle, Content итд TV-параметрами с окончанием _ru, _en итд, то бишь, чтобы Pagetitle страницы был привязан именно к языку и полное название TV-параметра тогда выглядит pagetitle_ru.

Как только создаётся новый шаблон, во вкладке Multilingual Templates надо ему присвоить статус многоязычного.

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

Не рекомендуется, даже больше, нельзя убирать поле Internal Name, оно нужно для отображения названия документа в дереве слева.

Создание шаблона:

Стандартный шаблон без дополнительных вызовов других сниппетов. YAMS автоматически определяет такие поля, как [*pagetitle*], [*longtitle*], [*content*]. То есть, достаточно вставить их в шаблон, сделать во вкладке Multilingual Templates шаблон многоязычным и при редактировании документа заполнить эти поля для каждого языка, при переключении языков на сайте, они будут меняться.

Механизм переключения языков:

Создаётся, например, чанк Languages, ставится в нужном месте в шаблоне и в чанк записывается:

[[YAMS? &get=`repeat` &repeattpl=`lang_tpl` &currenttpl=`current_lang_tpl`]]

&repeattpl=`lang_tpl` — шаблон кнопки языка
&currenttpl=`current_lang_tpl` — шаблон кнопки текущего языка

Шаблон lang_tpl выглядит, например, вот так:

<a href="(yams_docr)">(yams_name)</a>

(yams_docr) — ссылка, сгенерированная до текущей страницы в этом или остальных языках
(yams_name) — имя языка, вписанное в табе Модули > Yams > Language Settings

&currenttpl — шаблон выбранного языка. Тоже самое, только можно добавить class="selected", ну, или что по вкусу, чтобы язык был виден, как текущий.

Точно таким же образом можно подставить и флажки вместо текста.

Wayfinder и YAMS

Вызов Wayfindera:

[[Wayfinder? &startId=`0`  &useWeblinkUrl=`true` &rowTpl=`menu_tpl`]]

YAMS-у требуется, чтобы параметр &useWeblinkUrl был включён.
Чтобы Wayfinder правильно генерировал ссылки, всё в шаблоне работает через сниппет YAMS.

Шаблон одной кнопки — menu_tpl:

<li[+wf.id+][+wf.classes+]><a href="(yams_doc:[+wf.docid+])" [+wf.attributes+]>[[YAMS? &get=`content` &docid=`[+wf.docid+]` &from=`pagetitle`]]</a>[+wf.wrapper+]</li>

Ditto и YAMS:

С Ditto обстоит намного сложней, но без него никуда.
К вызову Ditto нужно подключать расширение:

&extenders=`@FILE assets/modules/yams/yams.extender.inc.php`

Если вызов некэшируемый [!Ditto!], то в параметрах вызова надо указывать id и язык:
&id=`(yams_id)` &language=`(yams_mname)`
А в шаблоне плейсхолдеры указываются тогда так:

[+(yams_id)_pagetitle+].

Если вызов кэшируемый [[Ditto]], то автор предлагает поместить в каждый язык по вызову Ditto, также в вызове прописать &id=`id` &language=`имя языка`.

И третий способ по пути наименьшего сопротивления, расширение подключать не нужно, в вызове Ditto чанк с шаблоном имеет окончание соответствующее языку:

[[Ditto? &tpl=`news_(yams_id)`]]

Существует два чанка news_ru, news_en. В зависимости от того, какой язык текущий, параметр (yams_id) подменяется обозначением языка.

А в самих чанках:

<h1>[+introtext_ru+]</h1><p>[+content_ru+]</p>

Это прямой вызов TV-параметров, заменивших встроенные поля.
Неудобен этот способ тем, что нужно создавать большое количество чанков, но работает без осечек, с некоторыми сниппетами, например, eForm-ом иначе и не получится.

Это общая информация, не вдаваясь в мелкие детали, чтобы собрать мультиязычный сайт её вполне достаточно.

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

21февраля,
2009
Как я делаю галерею в ModX

Уверен, что я не первооткрыватель, но всё же.
Есть готовый сниппет галереи — Maxigallery, но на мой взгляд он чересчур далёк от нормальной галереи.
Потому для вывода изображений я использую Ditto. Как оказалось, создать удобный шаблон, куда выводить уменьшенный вариант и вешать линк на полный размер при помощи Ditto очень просто. Если нет желания готовить маленькие версии картинок, то тут DirectResize в помощь, он делает это автоматически.
Собственно, о самом выводе.
Делаем в админке новый документ-контейнер «Gallery», где будут лежать все изображения галереи. Контейнер, потому что каждая фотография будет, как подраздел.
Задаём контейнеру необходимый шаблон, в шаблон же пишем вывод Ditto:

[!Ditto? &startID=`1` &tpl=`gallery_chunk` &sortBy=`menuindex`!]

Теперь пояснения:

&startID=`1` — это ID-номер контейнера, из которого будут браться вложенные документы для формирования галереи.

&tpl=`gallery_chunk` — шаблон (чанк) вывода предпросмотра и ссылки на полное изображение. Как его сделать, будет описано ниже.

&sortBy=`menuindex` — сортировать документы по порядковому номеру в меню. Выбрал именно этот вариант, потому что по дате не устраивает, а писать отдельные tv-параметры не вижу смысла, если уже при создании документа можно задать порядковый номер. Также можно ещё прописать &sortDir=`ASC или DESC`. ASC — по возрастанию DESC — по убыванию. По умолчанию DESC.

Чанк вывода «gallery_chunk»:

Он достаточно маленький. Для начала создадим два tv-параметра: [*image_preview*] и [*big_image*], на самом деле, называть можно, как угодно, главное вывести их в чанк «gallery_chunk». Задаём обоим «тип ввода» — Image и ставим галочку на тот шаблон, для которого хотим, чтобы они были доступны, сейчас это шаблон «gallery».
Затем делаем новый чанк, называем его «gallery_chunk». В него пишем:

<a href=[+big_image+]«„ rel=“lightbox» title=[+title+]"">
<img src=[+image_preview+]"" alt=[+title+]"" />
</a>

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

Пояснения:

подстановщики в Ditto пишутся не со *, а с +, но сути это не меняет, конечно.

href=[+big_image+]«„ — ссылка на большое изображение.

rel=“lightbox» — я любитель подключать для просмотра картинок lightbox, в ModX он есть предустановленный, можно вызывать его иначе, но я верстаю макеты, учитывая сразу его наличие.

title=[+title+]"" и alt=[+title+]"" — можно взять любое поле, заполняемое при создании очередной фотографии, title — для lightbox-а, а alt по стандарту и поясняющий текст к картинке.

src=[+image_preview+]"" — это, собственно, сама маленькая картинка.

Теперь заходим в админку и в документе «Gallery» создаём дочерний документ, назначаем ему шаблон gallery, потому что именно к нему привязаны эти два tv-параметра, при помощи которых будут выводиться изображения. Вписываем заголовок. Под текстовым полем появились ещё два поля для подгрузки картинок, загружаем маленькую картинку и большую. После сохранения уже работает.

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

P.P.S. Если использовать для этих целей DirectResize, то изображения грузятся прямо в поле основного содержимого документа, и маленькое изображение генерируется автоматически, отпадает надобность в дополнительных tv-параметрах.

11февраля,
2009
«Они ползут на свет»!

Чем дальше, тем хуже.
Количество браузеров становится угрожающим. На данный момент уже, если хочется выпустить нормальный свёрстанный макет в свет, надо проверять его в целой куче браузеров, порождения типа http://browsershots.org/ не могут взяться из ниоткуда.

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

Сейчас приходится тестировать свои макеты в:

  1. Mozilla Firefox 3
  2. Mozilla Firefox 2
  3. Google Chrome
  4. Internet Explorer 6
  5. Internet Explorer 7
  6. Internet Explorer 8
  7. Opera 9.2x
  8. Opera 9.63
  9. Apple Safari

Я уже плюнул пытаться добиться какой-то удобоваримости в IE 5.5 (чудесатое глючло, однако), не говоря уж о таких экзотических (пока) штуках, как Konqueror (кстати, хороший браузер), Amaya — вообще порождение машинных демонов.

Свобода их распространения как-то должна была повлиять на это. На деле всё наоборот, ведь никто денег не просит, обновись и пользуйся. В любом случае, IE7 намного лучше IE6, даже на слабых машинах он куда корректней работает, чем недоразвитая шестая версия, которая выкидывает такие финты, что просто непонятно, как им можно вообще пользоваться.

И до сих пор остались пользователи с Mozilla Firefox 1.5, что действительно странно.

25января,
2009
В этом году решился-таки

Слышал давно, но на подобных мероприятиях не бывал, всё как-то проходило мимо меня.
Участия никакого не принимаю, разве что поспонсорстовал с компаньоном. Ну, совсем чуть-чуть.
Осмотрюсь, если понравится, сподоблюсь там появляться всегда.

BarСamp является уникальной международной конференцией для специалистов по новым медиа, блогам, подкастам, социальным сетям, гражданской журналистике, разработке интернет-проектов, концепции Web 2.0, OpenSource, мобильному интернет‑доступу и всему, что связано с этой тематикой.

Оно всё тут, короче.

6января,
2009
Два фона, height: 100% и больше

Я продолбался битых 4 часа, пытаясь выяснить, что делать с двумя блоками, которые должны минимально занимать 100% высоты экрана, а также растягиваться свыше 100%, если контента больше. В общем, новые сутки я встретил в компании кучи запущенных браузеров, непослушных блоков, чашки кофе, от крепости которого глаза лезут на лоб и нежелания спать, пока проблема всё же не будет решена.

Как обычно, всё началось с того, что вылез баг в ие6. С данной проблемой я уже сталкивался, когда верстал макет Ecoorganic. Там проблема решалась проще, потому что блоку с фоном, лежащим под всем контентом, а также выступающим снизу, если текста на странице мало, можно было задать минимальную высоту в фиксированном значении. В этом же случае, мне надо было полностью не зависеть от содержимого и размера окна.
Сделав стандартный набор в css для html и body:

<span>html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}</span>

я также прописал для html и body этакий «быстрый хак» — _height:100%;. Утверждают, что IE6 неправильно обрабатывает высоту, потому подобная запись на него действует, как свойство min-height для новых и нормальных браузеров. Однако, нет. Работает оно вообще не так, и точно не так, как хотелось бы.
Второй фон, который должен был занимать ширину и высоту поверх первого на 100%, я положил в div с классом:

<span>.layout {
text-align: left;
background: url(images/bck_ill.gif) center center;
width: 100%;
height: 100%;
min-height: 100%;
_height:100%;
}</span>

Вроде как во всех браузерах нормальное отображение, кроме Firefox 2, как ни странно. Внутри div-а с классом .layout находились блоки с float, что дало обычный в этих случаях результат — div сложился и контент вывалился из блока, образовав огромную дыру в пару экранов под футером сайта.
Естественно, что используют в этих случаях, я использовал для блока overflow: hidden;. Overflow отсёк лишнее, и блок занял нормальную высоту 100%, а также стал растягиваться по высоте контента за 100% высоты. Но в IE6 это выглядело совсем иначе: overflow:hidden; срезал всё, что ушло за высоту 100%, скроллбар стал неактивен. В общем, превышать содержимое страницы больше, чем один экран, стало невозможно.
Вот за решением этой проблемы и поиском, а также ползуясь методом тыка, я провёл ещё пару часов.
Ответ нашёлся весьма спонтанно. Убрав свойства min-height:100% у html и body и добавив .layout-у свойство display: table. Избавился везде от «быстрого хака» — _height:100%;.
Обработка свойств, назначенных html и body не требует указания минимальной величины, чтобы блок продолжал тянуться, он занимает всё пространство, которое занимает контент.
У блочного элемента с классом .layout указанное свойство min-height:100% для нормальных браузеров заставляет его растягиваться на 100%, а свойство display:table;, соответственно, заставляет блочный элемент вести себя, как табличный, что корректно работает и в IE6, и в остальных браузерах.

Окончательный код CSS:

<span>html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}</span>

body {
 background: #FDF6DE url(images/bck.gif);
}
.layout {
 background: url(images/bck_ill.gif) center center;
 width: 100%;
 height: 100%;
 min-height: 100%;
 display: table;
}

Окончательный код HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Some site</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link rel="stylesheet" href="inside.css" type="text/css">
</head>
<body>
<div class="layout">
Content
</div>
</body>
</html>

Этот вариант вёрстки был проверен в браузерах: Firefox 2, Firefox 3, Google Chrome, Safari for Windows, Safari for Mac, Opera 9.24, IE7, IE6 — везде отображается корректно.
HTML и CSS успешно прошли валидацию.

3января,
2009
Шрифты и веб

Подтолкнул меня написать об этом поиск полезной информации по теме системных шрифтов.
Попытка найти некую общность между операционными системами и отображением текста на веб-страницах, особым успехом не увенчалась. Каждая ОС отображает шрифты, как разработчики «положили», к тому же ещё и браузеры на свой лад любят менять вид.
Если, скажем, Макинтоши и Windows-платформы отличает сглаженные-несглаженные, то с Линуксами всё гораздо хуже. В Linux даже и близко нет таких шрифтов, к которым привыкли все, просматривая веб-страницы на Windows-платформах и Macintosh-ах. Устанавливать их будут специально только те, кому это действительно нужно. Можно, конечно, сказать, что пользователей nix-не так много, зачем, мол, из-за них ещё голову ломать. Проблема возникает в том, что большинство шрифтов там довольно размашистые, если подгонялся текст в какие-то рамки, то в большинстве случаев он просто вылезает за границы блока. Konqueror адекватно и прилично отображает весь текст, за исключением того, что он просто заменяет все шрифты на жёстко заданные в настройках.
Выбирая подходящие шрифты, набрал совсем немного тех, которые, в принципе, на большинстве компьютеров будут отображаться, и будут отображаться нормально.

  • Tahoma font
  • Verdana font
  • Arial font
  • Times font
  • Courier font
  • Georgia font

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

  • serif — для шрифтов с засечками.
  • sans-serif — для рубленых шрифтов.
предыдущие 10 записей →