Это не имеет значения, сейчас попробовал в Сафари, он срабатывает по клику по любой части этого input элемента (как и FF3), а выравнивание все равно остается поправо. Так что "сэмулированная" кнопка все равно получается активной.
собственно это не является "стандартной" возможностью (а возможно даже вредной, вогнать бы туда скриптом файл пассвордов какой-нить и сабмитнуть на онлоде прямо) подобного инпута. Некоторые браузеры (Сафари и ФФ3, к примеру) вообще при клике на поле ввода запускают сразу выбор файла.
вот один из подобных воркэраундов у меня не прокатил по причине "символьной" ширины контрола file, кажется и этот им страдает. В моем случае можно создать "пиксельно" точную ширину контрола.
swf-upload юзаем, и костумайзем все как хотим :) Фул фьючед демо
На нем, впринципе, можно сделать любые формы + красивый статус закачки :)
Единственное, он флеш юзает.
>Единственное, он флеш юзает
А потому не пригоден для закрытых частей сайта. Есть решения и этой проблемы, но они не достаточно элегантны и оставляет хорошую дырку в безопасности ваших сессий. По-моему с этими аплоад-боксами вообще ничего не надо делать. Лишние навороты.
Управление загрузками полностью отдается flash-плееру. Он постом отправляет файлы из очереди. Дело в том, что он не передает в заголовках кукисы, а значит и сессию. Решение заключается в том, чтобы передавать строку сессии методом GET. Например, когда я прикручивал этот загрузчик в CakePHP, то там приходилось отключать проверку User Agent'a чтобы сессия оставалась валидной (а у плеера строка user agent'a совсем иная, чем у используемого браузера).
Все это вкупе открывает дырку в безопасности для похитителей сессий.
А вот я в Gmail встречал такую фичу: при клике на обычную ссылку, ссылка заменялась на INPUT FILE и диалог выбора файла выскакивал сам. Но долго эта фича почему-то не прожила.
да просто вешается на ссылку обсервер (ну или напрямую onclick), который заменяет outer.div.innerHTML (или span) на форму ввода файла. Можно и через DOM добавить новые элементы, но он существенно медленней.
делается через функцию click() для file input element. поддерживает её исключительно ИЕ
работает очень просто document.getElementById('fileInput').click()
Стали. Достаточно сравнить как добавляются аттачменты в ИЕ и в других браузерах (там просто появляется поле для выбора файла, те приходить кликать дважды, чтобы открыть диалог для выбора файла через эксплорер)
имеется ввиду с этим вариантом или вообще? В этом варианте во всех браузерах поле ввода не активно, а кнопка работает. Под Linux в FF3b5 "стандартное" поле ввода кликается как и кнопка, но с этим фейковым оно начинает работать как и у других.
когда работаешь над сайтами для каких-нибудь промо кампаний, там каждый пиксель и тень скурпулезно отрисовываются и все контролы стилизуются под общий вид страницы, стандартным там просто нет места.
Я с тобой согласен, если речь идет о хабрахабре или еще каком-нибудь общественном портале, но если речь про "лицо компании", то там эти проблемы никого уже не волнуют.
Аналогия из "материальной жизни", сосед взял Nokia 8800, сделал 1 звонок - батарея почти сдохла. Он поперся в сервис и получил там ответ: "Ты с него звонить собрался? Этот телефон не для звонков, он для того, чтоб ты пришел, достал его из кармана и показал что оно у тебя есть. А если звонить хочешь - бери себе вдобавок 1100 и заряжай раз в неделю". Тут ситуация та же. Имидж стоит дорого и за такие сайты тоже платят много.
это из-за top:1px в классе pseudbutton. Просто когда готовил пост, CSS взял из текущего проекта, а в нем кнопки на 2 пикселя уже, чем поля ввода, поэтому они со смещением от верха идут. Так что багов отображения тут нету.
знакомая техника :)
есть мелкая, но решаемая проблема. Разная ширина кнопки Browse в разных браузерах и, как следствие, можно попасть вместо кнопки в само поле. я решал это путём запихивания инпута в див, который по размерам идентичен кнопке. overflow:hidden прятал само поле ввода. а если размер шрифта сделать болшьшим (скажем > 18px), то кнопка browse занимает всю площадь ограничивающего блока.
вот как выглядит примерно
такую идею тоже прорабатывал, от нее остался overflow:hidden; на рилфайле, но, столкнулся с проблемой выравнивания по правому полю кнопки, чтобы левая часть уходила "в div". В мозилле и опере работало, а ИЕ упорно задвигал саму кнопку вправо. Если есть кроссбраузерный CSS, напечатайте пожалуйста.
не совсем суть понял :) стиль использовался вот такой
------------
.inputWrapper { position:absolute; right:0px; cursor:pointer; display:block; width:80px; height:22px; overflow:hidden; opacity:0; filter:alpha(opacity:0); text-align:right;}
.fileInput {cursor:pointer; display:block; font-size:20px; float:right; right:0px; position:absolute;}
------------
где inputWrapper - врапер для самого file input. Всё это должно находится в relative блоке, чтобы все элементы были корректно спозиционированы
чтобы не быть многословным вот ссылка на живой пример - http://www.fileqube.com/upload
Firebug покажет всю правду :)
Если я не ошибаюсь, то нулевую прозрачность ставить нельзя - элемент станет не кликабельный. Решая эту же проблему выставлял близкие к нулю значения opacity (0.01)
Кастомайзим INPUT FILE.