Тонкое подчёркивание ссылок с разрывами на буквах «р», «у» и других
У меня на сайте два изменения.
Но просто сделать так же не интересно, и я решил сделать лучше. Спорно получилось ли лучше, тут есть простор для экспериментов.
Подчёркивание ссылок и Тёмы и Ильи сделано одинаково — убрано родное подчёркивание, а взамен установлено свойство
Сначала позвольте показать что получилось, обратите внимание на разрыв на хвостике «р», когда я добился более плотного прилегания, оказалось, что перечёркивание хвостов меня не устраивает, хорошо что удалось это поправить:

Собственно, мне захотелось сначала исправить этот недостаток — слишком далеко отстоящее подчёркивание. Готовое решение у меня было, я
Я довольно долго эксперементировал и нашёл,
И вот тут меня ждала неприятность. Дело в том, что некоторое время назад появился способ, позволяющий узнать какие сайты вы посещали; интернет пестрел скриптами, которые в шутку журили вас, если обнаруживали, что вы до этого посещали
Способ проверки простой — на экран выводится ссылка, посещение которой пользователем мы хотим проверить, а потом мы смотрим у неё, скажем, цвет или другой параметр, который мы установили различающимся для посещённых и не посещённых ссылок. Я хорошо помню эту историю, потому что сделал на основе этого скрипт, который определял логинились ли вы в Гмейл — я просто смотрел загружал ли ваш браузер определённые ресурсы, которые грузятся только после логина. Но прежде чем я придумал как это можно практически использовать, дыру начали закрывать, так что скрипт не пригодился.
Естественно, браузеры не могли не отреагировать на эту дыру. Кажется, Файерфокс первым отреагировавшим на проблему — они предложили «врать» разработчику о стиле посещённых ссылок и разрешили менять для них только строго определённый список
Увы, это меняет многое. У меня для того, чтобы цвет посещённых ссылок не различался с цветом подчёркивания, нужно было поменять
В голове перед сном я прокручивал список разрешённых к изменению свойств и одно из них,

Теперь, если выставить его в качестве стиля заднего фона ссылки, а потом ещё задать цвет фона, ссылка оказывается аккуратно подчёркнутой в нужном мне, регулируемом месте (я же могу сделать прозрачным любой пиксель в фоне).
Ок, это сработало для посещённых ссылок, но в «Хроме» и «Сафари» меня ждал неприятный сюрприз: на мгновение, до того как браузер успевал отрисовать мой ГИФ на заднем фоне, все ссылки выглядели уродливо: был виден их цветной задний фон:

Я подумал, что мне бы помогло, если я бы
Получился следующий стиль:
a {
background: #00e url(data:image/gif;base64,R0lGODlhAQA7APABAP …и так далее… AAACCISPqcvtEEwBADs=) 0 100% repeat-x;
background-image: -webkit-linear-gradient(90deg, #fff 0, #fff 2px, rgba(0,0,0,0) 2px, #fff 3px, #fff 59px);
}Это полностью решило проблему — мигание на вебкитовских браузерах пропало. Кстати, я применил стиль линейного градиента, в новом формате — он работает в «Сафари» с версии 5.1 и в «Хроме» с десятой. Мне кажется, в этом нет ничего страшного — доля старых браузеров, в данном случае, ничтожна мала.
Когда я поставил подчёркивание куда мне хочется, возникла другая проблема. Эстетическая. Подчёркивание довольно уродливо перечёркивало нижние выносные элементы букв. На память, по аналогии, пришло моё баловство с фильтром Glow в Интернет Эксплорере. Там удавалось добиться интересных эффектов с задним фоном, поскольку эффект ложится и на него. Тут у меня ситуация такая же, но фильтров больше не существует, правда есть их реинкарнация —W3C заботливо слизало идею в другом синтаксисе.
После некоторых экспериментов, я решил, что тут подходит
a {
text-shadow: 1px -1px 1px white, -1px -1px 1px white, 2px -1px 2px white, -2px -1px 2px white;
}В браузерах, которые этот стиль не поддерживают, подчёркивание просто не будет разорвано.
Стиль, в результате выглядит примерно так:
a {
text-shadow: 1px -1px 1px white, -1px -1px 1px white, 2px -1px 2px white, -2px -1px 2px white;
text-decoration: none;
background: #00e url(data:image/gif;base64,R0lGODlhAQA7APABAP … и так далее … AAACCISPqcvtEEwBADs=) 0 100% repeat-x;
background-image: -webkit-linear-gradient(90deg, #fff 0, #fff 2px, rgba(0,0,0,0) 2px, #fff 3px, #fff 59px);
}
a:visited {
color: #551a8b;
background-color: #551a8b;
}
a:hover {
background-color: red;
color: red;
}Очень компактно, без лишнего и с плавной деградацией для старых браузеров.
Комментарии 59
О, спасибо! Меня очень интересовало как он решил проблему с посещёнными ссылками, а он её не решил, увы. Зато я у него подсмотрел очистку стиля выделения, у себя я даже ещё пока не столкнулся с этим.
http://img-fotki.yandex.ru/get/4138/130297 … D0#500x203
Да, баги ещё могут быть, этот поправил, спасибо!
Второй момент — подчеркивание надо делать прозрачнее и бледнее (чтобы было, но при не рябило), в этом был изначальный смысл замены всех этих экспериментов Бирмана, Темы и прочих.
http://img849.imageshack.us/img849/3193/bo … chrome.png
Спасибо :)
Ошибки поправил, хвост сделал как у Комарова, так лучше? Мне нравится пока мой вариант, может я и не прав.
Комментарий для ichik:
У меня вчера на это времени уже не было, спать хотелось. Сегодня подрихтовал.
Решение с картинкой/градиентом, накладывающейся поверх
Ок, кстати, зайдя к тебе сегодня, я обнаружил, что ты уже 100 лет ничего нового не писал, кажется, я в последний раз год назад заходил, всё то же :(
Результат ужасен, потому что непривычен? Так многое непривычное кажется ужасным, разве это повод ничего не менять?
Комментарий для Евгения Степанищева:
Идея прикольная, вот только в хроме под линуксом, у обычных ссылок в тексте, подчеркивание прилипает к буквам и выглядит не очень
Но тут проблема в том, что в линуксе (в данном случае Ubuntu) нет из коробки шрифтов 'Segoe UI' и 'Helvetica', а хром,почему-то, не берет следующий в очереди 'Trebuchet MS'(хотя он и установлен), а использует сразу 'Arial'. Вот с Arial оно так плохо и выглядит
Да, виноват, нет мне оправданий. Но! Я с завтрашнего дня ухожу в отпуск и постараюсь разгрести все наброски, что накопились. Так что новое будет и много :)
А нельзя ли сделатьCSS-спрайт и менять только background-position?
Это свойство тоже не входит в список разрешённых.
P.S. ctrl+enter в хроме не работает.
Это давно уже так :) Несколько лет.
Посмотрю, спасибо! ОС какая?
Жрет полностью одно ядро процессора и не убивается без перезагрузки.
А как там выглядят ссылки я вообще молчу.
В «Сафари» (вебкит) всё идеально, а «Оперы» не будет скоро, зачем на неё рассчитывать?
Я уже эксперементировал, работает только с display:inline-block, при переносе строки — глюки.
«Ретины» у меня сейчас под рукой нет. Посмотрю в понедельник, это поправимо. Какой браузер, кстати?
Вы же все достаточно влиятельны и умны, пожалуйста, делает как нужно, а не как лениво.
ЗЫ — странно, если я указываю адрес блога, то комментарий не постится.
Комментарий для Agonych:
А причём здесь ссылки, которые сливаются с фоном (даже если бы поисковики это умели определять)?
А что за блог? У вас там OpenID?
Ну вообще любой текст, если у него цвет как у фона — это один из признаков
color: #551a8b;
Понятно, что там есть
О, сейчас ссылка прошла, наверно был времнный баг со связью.
Комментарий для agonych.livejournal.com:
Насколько я понимаю, работу различных чекалок, они не работают только по одному критерию. И уж точно я не стал бы полагаться на «мозг» робота в таких спорных вопросах как разбор правил ЦСС.
У Лайвжорнала постояннокакие-то проблемы :(
a {
color: blue;
}
a:active {
color: red;
}
a:visited {
color: purple;
}
масштабируется лучше (линия не разблуривается) но, увы, :visited не работает — линия остается синей.
Да кодов можно сколько угодно придумать (вариант http://kizu.ru, например, подсказали в комментариях), это не фокус. Самая трудность в visited как раз.
Комментарий для Филипп Андрейчев:
OMG. Но он тоже не решил проблему посещённых ссылок.
стабильный хром, андроид. все ссылки имеют тонкую рамку.
Поправил.
Win7
Нашлось несколько особенностей.
Теперь с ссылками на фоне, отличном от белого, нужно (?)
В Файрфоксе линия выглядит лучше всего, одинаково чёткая, при выделении исчезает — http://troloload.ru/f/5452_ff.png
В Хроме курсивный текст ссылки при выделении светится ( http://troloload.ru/f/5453_chrome_glow.png ), а подчёркивание неодинаково — http://troloload.ru/f/5454_chrome_various.png
В Эксплорере 10 линия оказывается
Если что, Вин 8.
Что при выделении исчезает — не страшно совсем. Никакой дополнительной информации подчёркивание при выделении в себе не несёт.
Это поправил уже.
Вот чёрт, этоиз-за исправления багов в Андроиде появилось. Теперь надо срочно думать что делать…
Решил, раз у вас Люмия, вам будет это интересно :)
Комментарий для Сергей Васильев:
Да, поправил :)
Это я вижу, мобильный ИЕ10 вообще странный. Возможно, он просто не поддерживает тень, надо пробовать.
Я думаю, что Netscape Navigator 4.03 вообще ужас. Естькакая-то причина по которой вы вынуждены использовать эту древность?
Можете скриншот показать в каком это месте и что вы конкретно имеете ввиду.
Комментарий для Евгения Степанищева:
Firefox 20.0.1 http://i.piccy.info/i7/c46a1c2e6768c6b3651 … 7/ff_1.png
Chromium 26.0.1410.64 http://i.piccy.info/i7/ea721e6a9ed80f8d007 … mium_1.png
В сайдбаре слева и в обычных ссылках в тексте то же самое.
Причина есть, но ее описание выходит за рамки данного топика. Так надо! ;)
Комментарий для petya:
Хм… доберусь до Винды, гляну в чём дело.
Сочувствую :)
Судя по тому, что всё осталось как было (подчеркивание прилеплено к буквам снизу), прихожу к такому выводу: нет смысла городить велосипеды, которые хороши только для велосипедистов ростом 1.97 м и размером ноги 36, а потом каждый раз допиливать его для тех, у кого рост 1.50 м, или размер ноги 45…
…или у меня нет никакой возможности пока посмотреть что происходит под Windows XP. У меня ни одной идеи где я её могу найти.