Наш нештатный дизайнер посчитал недостаточным, что ссылка изображения элемента и ссылка названия элемента ведут на страницу описания. Он решил еще добавить для этой цели специальную кнопку details. А аяксовую ссылку add to cart заменить графической кнопкой.
XML: фрагмент кода
<item-list> ... <item id="50"> <item-name> <a href="/store/item/50.xml">Crime and Punishment</a> </item-name> <item-description>Dostoevsky's first wife died in 1...</item-description> <item-image> <a href="/store/item/50.xml"> <img alt="Dostoevsky_crime_and_punishment" class="wide" src="/image/name/0000/0187/187/wide/Dostoevsky_Crime_And_Punishment.jpg?1220530414"/> </a> </item-image> <item-price>$22.00</item-price> <add-to-cart> <a href="#" onclick="new Ajax.Request('/cart/ajax_check_item/50?buynow=0', {asynchronous:true, evalScripts:true}); return false;">add to cart</a> </add-to-cart> </item> ... </item-list>
В шаблоне XSLT для атрибутаhref кнопки details я использовал соответствующий атрибутдочернего XML-элемента item-name/a: {item-name/a/@href}. А для атрибутаonClick кнопки add to cart -- соответствующий атрибут элемента add-to-cart/a: {add-to-cart/a/@onclick}.
Да, уж. Кто еще раз мне скажет, что linux -- офигенно устойчивая система... И Ubuntu в-частности... Вчера development-server после ребута намертво лёг с ошибкой MP-BIOS bug 8254 timer not connected to IO-APIC. Никакие пинки ему не помогали. Сработал следующий трюк: «жесткий» стоп после первой строки сообщения об ошибке.
Прежде чем делать редизайн Blogger-блога, рекомендую сохранять предыдущий шаблон в отдельной папке. Позже ты сможешь его быстро восстановить.
Чтобы сохранить шаблон: Макет - Изменить HTML - Загрузить весь шаблон. Обзови загруженный файл понятным названием и сохрани в специальной папке, где ты будешь хранить резервные копии шаблонов своего блога.
Читать дальше »
Новогодние иконки для 17 сервисов социальных закладок в IconArchive.
Коллекция из 17 иконок наиболее известных сервисов социальных закладок в колпаке Деда Мороза : Blinklist, BlogMarks, Delicious, Digg, Facebook, Feeds, Flickr, Furl, Magnolia, Mister-Wong, Netvibes, Newsvine, Reddit, Stumbleupon, Ta-Da List, Technorati и You Tube. Иконки в форматах .ico и PNG: 256x256px и 48x48px. Автор: Fast Icon. Эти иконки я использую в одном из следующих примеров.
iPod новогодние иконки в IconArchive. Иконки в форматах .ico и PNG: 256x256px и 48x48px. Автор: Fast Icon. Кстати, советую покопаться у автора в разделе бесплатные иконки -- найдете много интересного не только на новогоднюю тему.
Сегодня QIP упал лёжмя! Как же починить? -- вскричали лох-юзеры по всему миру. Лично моя скромная Miranda-IM работает как работала ;).
Без паники, дамы и господа! Сразу скажу: смена подключения (адрес/порт) не поможет. Просто ICQ сменила протокол. Обновите ваш «квип» или скачайте новый -- QIP Infium (скачать) и будет вам "щястье" :).
Читать дальше »
При разработке AJAX-приложений порой не лишне дать пользователю знать, что выполняется ajax-запрос, а не просто «оно чего-то затупило...». Для этого часто используется анимированное изображение GIF, так называемый ajax-loader. Появление такого индикатора оказывает на душевное состояние пользователя прямо-таки благотворное воздействие. Он видит – что-то происходит, его запрос выполняется, его здесь любят и ценят :). К показателю «дружественности» интерфейса+1.
Некоторые «особо отчаянные» веб-дизайнеры до сих пор используют JavaScript для создания элементов с эффектом rollover. Дикие времена, дикие нравы! Эффект rollover несложно реализуется на «чистом» CSS.
С помощью генератора кнопок я создал веб-кнопку и её rollover-сестрицу. Затем объединил оба изображения в одном файле. Вот так:
Не умею говорить красивые тосты, поздравления, здравицы и прочие пожелания. И всегда с добрым сердцем и всей душой, ну вот не умею. Не получается. Запоминать чужие стрёмно, а собственные как-то не рождаются. Или рождаются в таких муках, что лучше б «сделал аборт» :)).
Итак, вчера... Уже практически по любым географическим зонам, где мне удалось «отметиться», -- «вчера».
Мой День рожденья :). С утра пошел на пробежку. А вы думали! -- надо же поддерживать репутацию «городского сумасшедшего». Топаю домой, навстречу -- девица-фармацевт из местной аптеки. Большие глаза... потом, -- надеюсь, -- понимание :). То-то я в аптеку только за гандонами захожу.
И тут тост за меня-любимого родился сам собой. Видать, мудрость таки пришла :)... Так вот дарю: «Чтобы ты в аптеку обращался только за презервативами!»
Читать дальше »
Еще один полезный веб-инструмент -- генератор кнопок. Несколько наборов шаблонов кнопок, возможность задавать текст кнопки, порядка 15+ шрифтов, возможность изменять цвета текста и кнопки, использовать эффекты -- «тень» (Drop Shadow), «свечение» (Outer Glow) и пр. То же самое и для rollover-кнопки.
Еще один онлайн-генератор. Генерирует трехцветный клетчатый узор-«шотландку». Будет полезно в-первую очередь для сплошных фонов веб-страниц. Клетчатый узор для фона этого блога был добыт на другом ресурсе с последующей обработкой в Photoshop. А тут поди ж ты -- специальный генератор!
Сервис социальных закладокБобрДобр разрабатывает новый функционал для SEOшников. Как ни старался, в упор не смог найти, где в «блоге бобра» указывается дата поста (несерьёзно, господа «бобры»). Ну да свежее ничего нет, поэтому -- в «новости»
Уважаемые SEO-специалисты, пользующиеся нашим сервисом. Мы задумали оптимизировать работу с Бобрдобр для вас. Для того, чтобы сделать это наиболее качественно, нам нужна обратная связь с вами. Напишите нам, пожалуйста, о том, каких функций вам не хватает и какие были бы вам максимально полезны в вашей работе. Бобрдобр прирастет новым удобным функционалом для SEOшников
Большинство веб-сайтов подсвечивает пункт меню навигации в зависимости от раздела, где в данный момент находится пользователь. Это помогает посетителю лучше сориентироваться на сайте (помним о юзабилити!). Как правило, для этого нужно подстраивать код HTML каждой страницы, чтобы выделить соответствующий элемент меню.
Затем вы должны назначить id каждому тегу <body>. Идентификатор id будет отражать где в данный момент находится пользователь и изменяться при переходе из одного раздела сайта в другой.
Для главной страницы он будет выглядеть <body id="home">, на странице «О нас» так: <body id="about">, а в разделе «Контакты» вот так: <body id="contact">.
После этого вы создаете правило CSS:
#home .home, #about .about, #about .about, #contact .contact { /* команды для подсвеченного элемента меню */ }
Это создаёт правило, которое срабатывает только тогда, когда class="home" находится внутри id="home", class="about" внутри id="about" и class="contact" внутри id="contact".
/* стили для меню в этом посте */ .listMenu1 { margin:0; padding:0px;list-style-type:none;background-color:#C61A1A;border-bottom:2px solid #000; } .listMenu1 li { display:inline; } .listMenu1 li a, .listMenu1 li a:hover, .listMenu1 li a:visited { color:#FFF;padding:0px 10px;margin:0px;border-bottom:0px;padding-bottom:3px; } /* теперь внимательно! если у тебя, например, body id="products" как в моем примере, или body id="contact", то соответствующий пункт меню будет подсвечен черным фоном */ #home .home, #about .about, #about .about, #contact .contact, #products .products { background-color:#000; }
Юзабилити (англ. usability — дословно «удобство пользования», «применимость») — понятие в микроэргономике, обозначающее общую степень удобства предмета при использовании; термин схож с термином «эргономичность», однако имеет иную область распространения и отличается нюансами определения. Применительно к компьютерной технике термином юзабилити называют концепцию разработки пользовательских интерфейсов программного обеспечения, ориентированную на максимальное психологическое и эстетическое удобство для пользователя. wikipedia.org
Самое простое и ёмкое определение, которое мне попадалось -- «Удобство сайта и его положительное восприятие аудиторией»
От юзабилити, зависит насколько комфортно пользователю будет работать с вашим сайтом.
О составляющих хорошего юзабилити даже писать не стану. Поверьте, -- на статьях по этой теме «взрослые» дяденьки с волосатыми руками и не менее толстые тётеньки с волосатыми ногами уже давно сколотили состояние. Лично я для себя выделил фразу «максимальное психологическое и эстетическое удобство для пользователя» Так сказать -- «на заметку»
И примерчик для тренировки «шишковидной железы»: Господа «веб-мастеры» (написано как задумывалось!), угадайте с трёх раз какие эмоции вызовет у пользователя следующая ситуация. Он впервые попадает на ваш сайт, где его тут же встречает рекламный pop-up. Катающийся по экрану, а при попытке закрыть вываливающий в новое окно браузера «сайтец» с голыми тётками и полуметровыми хуями.
Что-то мне подсказывает, что для юзабилити это явный минус. Какова вероятность того, что этот гость снова вернётся на ваш сайт? Не так вот, снова лоханувшись через поиск, а конкретно? Да ему резко, до поноса должно что-то понадобиться именно на вашем сайте. А при том изобилии информации, существующем в современном интернете это весьма и весьма сомнительно.
Вобщем, господа, помните о «хуях» при разработке интерфейсов :).
Читать дальше »
Оказывается, Blogger генерирует robots.txt для каждого блога автоматически. Зайдите в Инструменты Google для веб-мастеров, затем в раздел вашего сайта (если он у вас зарегистрирован) и на страницу Анализ Robots.txt.
Или можете просмотреть его в браузере. Ваш файл robots.txt находится по адресу: http://yourblogname.blogspot.com/robots.txt.
Создание и отправка файла Sitemap позволяет обеспечить наличие в системе Google данных обо всех страницах на вашем сайте, включая URL-адреса, которые невозможно обнаружить в ходе стандартного процесса сканирования Google. После передачи файла Sitemap вы сможете выявлять проблемы, относящиеся к этому файлу или его URL-адресам.
На основании данных анализа файла robots.txt поисковый движок Google сам находит ваш Sitemap. Однако никто не мешает вам задать его вручную, в тех же инструментах Google для веб-мастеров. Более того, этот файл Sitemap вы можете указать и при регистрации сайта на Яндексе.
Читать дальше »
Нашел полезный инструмент для тестирования регулярных выражений (RegExp) JavaScript. Нужно ввести шаблон (регулярное выражение) и проверяемый объект. Тестер выполняет операции:
String.match(pattern)
Проверяет совпадение заданной строки (String) регулярному выражению (pattern). С флагом g возвращает массив совпадений, без флага g возвращает первое совпадение. Если совпадений не найдено, возвращает null.
String.replace(pattern, string)
Заменяет совпадения заданной строкой и возвращает полученную строку.
Тестер регулярных выражений (RegExp) на JavaScript
Как с помощью CSS выделить внешние ссылки, чтобы они отличались от внутренних.
Иногда в тексте страницы требуется выделить внешние ссылки другим стилем, чтобы они отличались от внутренних ссылок сайта. Для чего этим ссылкам может понадобиться дополнительное оформление? Потому, что пользователь должен знать, что пройдя по этой ссылке, он перейдёт на другой сайт. А вдруг страницы, на которую ведёт ваша внешняя ссылка, уже не существует? Или сервер недоступен? Или там, прости господи, такая непотребщина выложена, что просто «ужоснах»?! ..и пользователю придётся срочно в панике закрывать окно браузера, потому что он в данный момент в офисе, сзади приближается шеф, а тут в мониторе ТАКОЕ!..
Таким образом, подобное выделение делает интерфейс сайта более предсказуемым. А это, ИМХО, для юзабилити только плюс.
Для начала определимся, какие ссылки будем считать внутренними. В моём случае они могут быть такие: "http://dotrb.blogspot.com/", "http://www.dotrb.blogspot.com/" и "/". Крайнее обозначение -- это ссылка в «корень» сайта.
Еще одна «боевая» задача -- как в XSLT создавать элементы и задавать им атрибуты. Например, есть комплексная форма (<FORM>) или remote-форма (AJAX). И не хочется в XSLT-шаблонах лишний раз нагружать юзера конструкциями вроде:
Это как номер раз. Второе -- когда самому нужно сверстать несколько таких шаблонов для одного и того же XML, так это и нерационально, и самому рехнуться можно. И третье: В Rails лучше использовать рельсовые методы, а не то, что получается у них на выходе.
Приведу пару простеньких примеров.
Пример номер «раз»
Фрагмент .rxml
# Form:Buy Now xml.tag!("form-buy_now") do xml.action("/cart/add/#{@item.id}") xml.name("add_to_cart")
Нужен баннер для вашего блога? Нет ничего проще! Предлагаю анимированный баннер, который показывает по очереди пять самых последних записей из вашего фида. Это циклический баннер для вашей рекламы!
2. После успешной регистрации вы попадёте на страницу Мои фиды. Введите URL вашего фида в поле "Зажигай" фид прямо сейчас;
3. Не знаете, как найти фид (feed, RSS) вашего блога? У каждого блога есть RSS-лента. Всё, что вам нужно, это отыскать такой значок на главной странице вашего дневника . Щелкните этот значок и вас перебросит на RSS-ленту. Скопируйте URL из адресной строки браузера;
4. После того как «прожжете» фид, заходите в настройки вашего фида. И оттуда -- на вкладку «Публикуй» - «Аниматор заголовков»;
5. Выберите шаблон для вашего баннера (или загрузите собственный), подберите шрифты и цвета. Когда всё будет готово, жмите кнопку «Активировать»;
6. Получите код вашего баннера. В списке предлагается несколько платформ: MySpace page, TypePad blog, TypePad JP blog, Blogger blog, WordPress.com blog и Email signature (подпись к email) Если вы не обнаружили движка вашего блога в списке, выбирайте последний пункт: Other (just gimme the code) -- Другой (просто дай мне код);
Как добавить иконку (favicon) для вашего блога? Чтобы в адресной строке и в закладках пользователей URL вашего сайта отображался примерно так: 1. Создать иконку Вы можете создать иконку самостоятельно с помощью специальных програм (я использовал Axialis IconWorkshop) или плагина для Photoshop. Используйте размер 16x16 пикселей или двойной: (16x16 и 32x32). Или вы можете выбрать готовую иконку, например, на следующих ресурсах.
2. Загрузить иконку Теперь вам нужно загрузить иконку "в мир". Для этого вы можете использовать: сервисы файл-хостинга (требуется регистрация) или Сайты Google
3. Добавить иконку в шаблон В редакторе шаблонов вставьте следующий код (только измените пути к вашей иконке) где-либо между тегами <head> и </head>:
Я здесь довольно часто пишу про оформление вашей страницыBlogger, тюнинг blogspot-страницы с помощью стилей. И если с HTML всё более-менее понятно /* не понятно? -- пишите! :) */, то с CSS может быть далеко не так тривиально. Итак, куда же вставлять этот чёртов CSS?
BloggerCSS: Инструкция по применению
Способ первый (универсальный):
Идем в настройки шаблона (Настроить - Макет - Изменить HTML)
В поле шаблона находим закрывающий тег</head>
Прямо перед этим тегом создаём собственный раздел стилей: <style>здесь пишите ваши стили</style> Дополнено: Еще лучше
Нашел еще один ресурс, откуда можно надёргать бэкграундов (фонов). Ресурс этот не совсем обычный для веб-дизайна. Дело в том, что это магазин обоев. Тех самых, которые клеятся на стену, а не на ваш рабочий стол :). С сопутствующим замешиванием клея «Метилана», «Момента» или еще чего-нибудь в этом духе.
И как же может нам пригодиться этот ресурс с бумажными обоями? А всё просто! Что характерно для обоев? -- Правильно! -- повторяемость рисунка. И при наличии нехитрых навыков можно нарезать бесшовных текстур из более 200 образцов, вывешенных на сайте.
Время от времени, особенно когда web-разработка вам начинает казаться на редкость простым и приятным делом, вы натыкаетесь на это:
ОшибкаMicrosoft Internet Explorer: Не удалось открыть узел... Операция прервана. Error: Internet Explorer cannot open the Internet site. Operation aborted В интернете вы скорее всего найдёте только одну причину, вызывающую эту ошибку. Видимо мне исключительно "повезло" -- я знаю целых 3 (три!).
1. Первая -- самая известная. Вы без труда найдёте её описание и решение в любом поисковике (я даже ссылки дам). Это ошибка DOM и JavaScript.
a) Дело в том, что вы не можете добавлять в элемент BODY из скрипта (javascript), который не является прямым потомкомBODY; b)Более того: вы не можете изменять родительский элемент из скрипта, являющегося его потомком.
Это был первый случай. Два других не столь распространенныё, но описать их проще. 2.Wrong HTML code при использовании SSL Причиной служит корявый HTML-код. Чаще всего наблюдается при защищенном соединении (по протоколуhttps://). Решение: Перепроверьте, нет ли у вас «пересекающихся» элементов, все ли теги закрыты и т.п.
Третий случай совсем не тривиальный и довольно редкий 3. «Tabs in ERb views» ХЗ, это уже просто «родной» глюк Ruby on Rails. Только вот один момент: иногда табы в видах .rhtml прокатывают. Их и не замечаешь пока не начнешь тестить страницу в IE. Опять-таки, чаще всего по https:. «Мистика», а бывает :). Решение: не используйте символы табуляции в .rhtml
Горизонтальные списки полезны, например, при создании меню, списка ссылок и т.п. Лично я для создания меню традиционно использую таблицы (table), но это может быть не совсем правильно. Т.к. список -- это всё-таки структурированные данные, и для поисковой машины должен выглядеть в более выгодном свете. Это просто мои догадки, и возможно не совсем верные ;).
Из недавнего опыта применения CSS. Полупрозрачность изображения при наведении указателя мыши. Может пригодиться, например, если нужно «дёшево и сердито» сделать подсветку графического меню или кнопки.
В одном из предыдущих постов, я приводил решение проблемы min-height для IE. Кстати, тот же самый прием прекрасно работает как для min-height, так и для max-height, min-width, max-width.
В том случае фикс был основан на использовании команды !important. Дело в том, что Internet Explorer до версии 6 включительно её не понимает.
<div class="diff-width"> Internet Explorer отобразит это иначе ;). </div>
Internet Explorer отобразит блок длиной 250 пикселей вместо положенных 256. Т.к. для браузеров, нормально поддерживающих спецификацию, инструкция с !important будет более важной, а для IE нет.
Читать дальше »
# Store items xml.tag!("item-list") do @items.each do |item| xml.tag!("item", :id => item.id) do xml.tag! "name" do xml << (link_to truncate(item.name, 20), :controller => "store", :action => "item", :id => item.id) end xml.tag! "description", truncate(item.description, 36) xml.tag! "price", item.price end end end
В файле XSLT задаю параметр, в котором будет задаваться размер группы <xsl:param name="group-size" select="'3'" />, чтобы легче в-последствии было его изменять.
А примерно вот так выглядит файл XSLT трансформации.
Часто возникает задача скрыть правило CSS от обработки браузером. В случае с Internet Explorer 6 и более ранними версиями прекрасно срабатывал трюк с дочерними селекторами.
Скрыть правило CSS от IE 6
html>body .foo {Скрытый CSS;}
Теперь Internet Explorer 7 понимает дочерние селекторы и поэтому CSS-трюк немного усложняется :)
Небольшой ресурс с набором из черепичных (бесшовных) фонов для web: Squidfingers / Patterns. Можно бесплатно скачать и использовать как фоны собственных веб-страниц.
Читать дальше »
Эти команды CSS наконец-то понимает Internet Explorer 7
Потомки
Допустим, у нас есть следующий HTML:
<div><p><span>Текст сообщения</span></p></div>
В этом примере <p> является "сыном" (прямым потомком) <div>, а <span> -- "внуком" <div>. Мы можем сделать текст элемента <span> красным, используя следующее правило CSS:
div span {color: red;}
Это означает, что содержимое любого элемента <span>, расположенного внутри элемента <div> будет красным. Этот <span> может быть прямым потомком ("сыном"), или непрямым потомком ("внуком", "правнуком" и т.д.) элемента <div>.
Если мы используем следующее правило CSS:
div>span {color: red;}
Текст внутри <span> не будет красным. Так как это правило озачает: <span>, являющийся прямым потомком<div>. А в нашем примере <span> является "внуком" <div>.
Соседи
Теперь IE7 понимает еще и "соседские" селекторы.
blockquote+p {margin-top: 0;}
Это CSS правило означает, что параграф, следующий сразу за цитатой, не имеет верхнего отступа.
Еще один хороший пример использования соседского селектора можно применить к горизонтальным спискам.
li+li {border-left: 1px solid black;}
Это правило означает, что каждый <li>(элемент списка), следующий за другим <li> (т.е. все, кроме первого) будет иметь левый бордюр.
Псевдо-класс First-child
Если вам нужно выделить первый элемент (первого потомка) родительского элемента, используйте псевдоклассfirst-child. Например, чтобы первый параграф внутри некой области с id="content" имел нулевой верхний отступ, используйте правило CSS:
В догонку к ранее упомянутому еще одно расширение Firefox для снимков полных веб-страниц. Лично мне понравилось тем, что снимки можно «автоматом» отправлять на удаленный сервер (регистрация не требуется). В web-разработке весьма полезно.
FireShot - это дополнение к обозревателю Mozilla Firefox, которое позволяет создавать скриншоты открываемых вами страниц. В отличие от других средств подобного рода, это дополнение предоставляет в распоряжение пользователя целый ряд инструментов для редактирования скриншота и добавления графических и текстовых аннотаций. Подобная функциональность будет полезна для веб-разработчиков, тестеров и редакторов. Скриншоты могут быть загружены на сервер изображений, сохранены на диске (в форматах PNG, GIF, JPEG, BMP), распечатаны, скопированы в буфер обмена, отправлены по электронной почте или экспортированы во внешний редактор для последующей обработки.
То есть: внутри блока сообщения все изображения отображаются с отступом 4 пикселя «внутрь» и рамкой цвета, заданного в разделе «Шрифты и Цвета» как Цвет рамки.
И большую часть времени меня это устраивает ;). Но иногда изображение выглядит заметно лучше без рамки и прочих «выкрутасов».
Так выглядит логотип Ruby с бордюром и без него, соответственно.
Чтобы избавиться от бордюра вокруг изображений, существует множество способов. Лично я, поскольку «безбордюрные» картинки мне нужны лишь время от времени, просто добавил еще один CSS-класс для изображений, у которых рамка мне не нужна. И назвал этот класс noborder.
CSS: Изображение без рамки и отступа
.post img.noborder { border-width: 0px; }
И добавил этот код CSS в шаблон Blogger. Теперь прикрепленному изображению, где мне хочется избавиться от бордюра я просто присваиваю class="noborder". Например:
Установил дополнение для Firefox, позволяющее буквально парой кликов делать снимок (скриншот) всей страницы в браузере. Как всегда понадобилось по работе :). Весьма полезная тулза, доложу я вам :). Изображения выглядят примерно как на прикреплённой иллюстрации (изображение уменьшено).
Screengrab сохраняет полные web-страницы как изображения.
Это дополнение сохраняет то, что вы видите в окне (видимую область), страницу целиком, выделенное или отдельный фрейм... В-основном оно предназначено для сохранения веб-страниц как изображений.
Простое, удобное в использовании дополнение, может сохранять снимки страниц в указанную директорию или копировать в буфер обмена. Скачать дополнение для Firefox можно сдесь: Screengrab!
Читать дальше »
Как добавить фон на страницу Blogger? Во-первых: создайте фоновое изображение. Можете, например использовать инструмент для создания фонов для web. Далее: Загрузите фоновое изображение в свой альбом Picasa. Не волнуйтесь! Если у вас есть аккаунт в Blogger, то хотя бы один альбом Picasa у вас точно есть :). И финальный штрих: Откройте редактор шаблонов Blogger (Макет - Изменить HTML) и добавьте CSS-правило для элемента body. Примерно так:
body { background: fixed #FFF url('https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhPm4Tr8OcRPpFMqKSjEJYgimB8h5h_EAOJg0r0yahFduARoLwVmQhzKJHxFdNTVSvb9sXUbMSaEoNZaeJ2E4pMW1zEYYTYxrc-M6hTcE-nPydcnIhv7oCi9yi9fnqPuhO6lEhpdsQNtKdh/'); }