Тег: рим

Как использовать SVG и не забывать про старые браузеры

Сейчас повсеместно ставят всякие Retina и другие экраны с большой плотностью пикселей. Обычные картинки смотрятся архаично. Можно конечно ставить изображения увеличенные в два раза, а можно просто ипользовать векторные картинки формата SVG. Но, несмотря на 2014 год, иногда все еще можно встретить компьютеры, в которых утсановленны браузеры, неподдерживающие эту технологию. По этой причине многие ищут способы использования SVG, но чтобы IE тоже мог что-то показать вместо белого квадратика.

На самом деле все легко. Если SVG используется в качестве фонового изображения, то можно делать вот так:

.block-with-svg {
    background-image: url(/path/to/image.png);
    background-image: url(/path/to/image.svg), none;
}

А если вы просто вставили картинку, то:

<img src="/path/to/image.svg" onerror="this.src='/path/to/image.png'" />

Работает везде.

02 июня 2014
3.3 тыс.
1 мин

Мобильные устройства и задержка в 300 милисекунд

Каждый день мы пользуемся мобильными телефонами для доступа в интернет. В связи с этим значительно выросло количество веб-аппов, которые похоожи на нативные приложения.

При разработке таких веб-приложений часто возникает множество вопросов. Один из самых важных – задержка между нажатием на какую-либо ссылку и срабатыванием события click. И чем больше устройств выходит на рынок, тем более острым становится этот вопрос. Если для Android и iOS просто необходимо было обрабатывать события на touchstart, touchmove, touchend, то с выходом новой Windows Mobile появились MSPointer events.

В данный момент существует большое количество решений этой проблемы. Однако Илья pukhalski Пухальский, с моей посильной помощью (очень маленькой), написал библиотечку tap, которая просто добавляет к стандартным событиям в JavaScript новое событие tap.

Теперь, подключив эту библиотеку, можно вешать обработчики на событие tap и все будет работать быстро и красиво.

Вот пример для Vanilla JS:

document.getElementById('any-element').addEventListener('tap', function (e) {
    // All the magic happens here
});

А вот для Jquery:

$('#any-element').on('tap', function (e) {
    // All the magic happens here
});

Посмотреть и скачать можно здесь: github.com/pukhalski/tap. Там же примеры для Zepto, Dojo, YUI, ExtJS.

20 мая 2014
3.3 тыс.
1 мин

JavaScript: Java String.hashCode()

Как-то раз столкнулся с необходимостью сгенерировать в Javascript хэш из строки. Да не просто сгенерировать, а так, что бы он полностью совпал с хэшем, сделанным в Java. Полазил в интернете и нашел.

String.prototype.hashCode = function() {
    var hash = 0;
try {

    if (this.length == 0) return hash;

    for (i = 0; i < this.length; i++) {
        char = this.charCodeAt(i);
        hash = ((hash << 5) - hash) + char;
        hash = hash & hash; // Convert to 32bit integer
    }
    return hash;

} catch (e) {
    throw new Error('hashCode: ' + e);
}

};

Ссылка в gists.

05 марта 2014
6 тыс.
20 сек

Поиск по ключу и значению в JavaScript

Часто возникает необходимость в JavaScript найти данные в массиве или объекте по ключу и значению. Стандартной функции или метода к сожалению не существует. Ниже пример такой функции, в которую нужно передать параметр arr (массив или объект) и keyObj (ключ и значение, например {id:10}).

05 февраля 2014
11 тыс.
14 сек

Глобальные переменные в JavaScript

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

Однако иногда возникает необходимость иметь и пользовать глобальную переменную. Но как тогда быть? А если вдруг мы пишем для Node.js, там ведь нету глобального объекта window, там root? А если я хочу использовать свой код и во фронтенде и на сервере?

За сим предлагаю такое решение, которое знатно растиражированно, но никто о нем никогда не помнит.

var global = (function () {
    return this || (1, eval)('this');
}());

Теперь у нас есть глобальный объект global, который обладает всеми свойствами window / root. Элегантное и просто решение.

Придумал не я, украл вот тут.

24 декабря 2013
4.2 тыс.
1 мин

Кнопка удаления с подтверждением

Однажды один мой товарищ попросил сделать для одного его проекта кнопку удаления, которая содержала бы внутри себя подтверждение. Т.е. как это сделано обычно? Нажимаешь удалить - выскакивает окно с вопросом "Вы уверены, что ходите удалить то-то и то-то?" - нажимаешь "Да", после чего удаляется то, что надо. Так вот, он хотел чтобы нажимаешь "Удалить", внутри кнопки меняется текст на "Вы уверены?", нажимаешь еще раз и происходит удаление.

Идея показалась мне интересной, и я решил поделиться способом простой реализации.

17 декабря 2013
7.7 тыс.
2 мин

Интересные CSS-хаки, которые облегчат вам жизнь

Ниже несколько интересных CSS-хаков и свойств, о существовании которых забывают, а то и вовсе не знают.

html {
    overflow-y: scroll;
    font-size: 100%;
    -webkit-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
}

Вы знаете, что если для html жестко указать скролл по вертикали, то при динамическом добавлении контента у вас не будет неожиданного ресайза, когда скролл понадобиться, а мобильные браузеры не будут подстраивать размер шрифта если задать text-size-adjust.

17 декабря 2013
6.1 тыс.
2 мин

Префиксы в CSS — vendor prefixes

Оформление современных сайтов состоят из множества стилей, которые могут работать или не работать в тех или иных браузерах. Чтобы всё работало везде, для некоторых свойств необходимо использовать префиксы разных браузеров. По английски они называются vendor prefixes.

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

Без префиксов

border-radius : Если не нужна поддержка Firefox 3.6 или iOS 3.2

box-shadow : Если не нужна поддержка Firefox 3.6 или iOS 4.3 или Safari 5.0

text-shadow

border-image

Используют только один префикс

CSS Transitions : -webkit- для Safari 6.0

CSS 3D Transforms : -webkit- для Safari и Chrome

CSS Animation : -webkit- для Safari и Chrome

CSS Gradients : -webkit- для Safari

Box Sizing : -moz-.

CSS Calc : -webkit- для Safari 6.0

Несколько префиксов

CSS Transforms : -webkit- для Safari и Chrome и -ms- для IE9

Flex Box : -webkit- и -ms-.

Columns : -webkit- и -moz-.

Почему я не упомянул про префикс -o-, который использовался в опере до 12 версии включительно? Потому, что о ней стоит упоминать только в контексте сайтов, которые будут сделаны для просторов СНГ. Если это ваш случай, то помните - Opera <=12 занимает около 9 процентов СНГ-шного рынка браузеров. В таком случае префикс -o- необходимо добавлять для свойтсв, для которых могут ставиться префиксы -webkit- или -moz-.

Полный список свойств, использующих префиксы

22 ноября 2013
12 тыс.
1 мин

Родные шрифты с иконками (Native iconic fonts)

Существует несколько популярных вариантов отображения иконок на веб-странице:

  • картинки
  • svg
  • иконочные шрифты

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

Их так же существует привеликое множество: FontAwesome, Entypo и другие.

Но в процессе тестирования на разных устройством были обнаружены некторое особенности отображения иконок. Самым интересным стало то, что браузер IE на Windows Phone 7.5 вдруг вместо иконок шрифта Entypo отрисовал свои иконки, которые вышлядели практически идентично.

Задавшись этим вопросом, мы с товарищем @pukhalski стали «читать» интернет.

В этом месте, следует уточнить, что для отрисовки иконок мы использовали следующую контрукцию:

.icon {
    display: inline-block;
    font-family: 'entypo';
    font-style: normal;
    font-weight: normal;
    line-height: 1;
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}
.icon:before {
    content: "\2606";
}

В данном примере 2606 - Unicode для отображения здездочки. Т.е. вы должны увидеть примерно вот это: ☆.

Оказалось, что во все более или менее человечкие операционные системы встроен шрифт serif, который уже содержит множество иконок. Вот по этому адресу можно их все увидеть.

Стоит также вспомнить о шрифтах Webdings, Wingdings, Wingdings 2, Windings 3, которые точно присутствуют в Windows и Mac OS и несут внутри себя сотник классных иконок.

Экономьте свои силы и траффик пользователей, используйте встроенные шрифты. Кстати, это очень кроссбраузерно и кросссистемно.

28 октября 2013
4.3 тыс.
2 мин

Функция uniqid в JavaScript

В PHP есть шикарная функция uniqid. Она позволяет сгенерировать случайный идентификатор состоящий из цифр и букв, основанный на текущем времени. Выглядит он примерно вот так 526439af76c56.

Я очень часто пользуюсь ей (функцией), когда делаю что-то на ПХП. Конечно же мне очень хватало этой функции в JavaScript, поэтому я поискал в интернете, нашел один неплохой вариант, немного его подправил и вуаля:

(function () {
    this.uniqid = function (pr, en) {
        var pr = pr || '', en = en || false, result, us;
    this.seed = function (s, w) {
        s = parseInt(s, 10).toString(16);
        return w < s.length ? s.slice(s.length - w) : 
                  (w > s.length) ? new Array(1 + (w - s.length)).join('0') + s : s;
    };

    result = pr + this.seed(parseInt(new Date().getTime() / 1000, 10), 8) 
                + this.seed(Math.floor(Math.random() * 0x75bcd15) + 1, 5);

    if (en) result += (Math.random() * 10).toFixed(8).toString();

    return result;
};

})();

Использовать можно:

  • так uniquid() - результат 52643b81917b3
  • или вот так uniqid('prefix_') - результат prefix_52643bb682821
  • и даже вот так uniqid('prefix_', true) - результат prefix_52643bdf3b1fb7.38568327

Пользуйтесь на здоровье.

Тут ссылка на Gist.

24 октября 2013
5.6 тыс.
1 мин