По поводу формата, если есть прозрачность на картинке - то png, если нету - все в jpg, после все прогоняете через минификатор вроде "imagemin", "pngquant". Всякие иконки собираете в спрайты. Если важен трафик для мобильных устройств, то можете дополнительно создавать картинки с маленьким разрешением дабы они меньше весели.
Так же ели есть возможность различные иконки делаете в SVG формате, они в разы меньше весят чем растровое изображение.
Практически любой градиент сейчас спокойно можно на css сделать.