Кнопка «Загрузить»: стиль с помощью CSS?

Можно ли заменить кнопку Загрузить (графическое изображение, содержащее состояния вверх/вниз/вниз) простым Кнопка в стиле CSS?


person Herb Caudill    schedule 20.03.2010    source источник


Ответы (8)


Я смог уйти с чем-то гораздо более простым.

xhtml:

<div id="uploadify">                  
  Upload Pictures                     
  <div id="uploadify" type="button" />
</div>                                

CSS:

#uploadify object { 
  position:absolute;
  left:0; right:0;  
  width:100%        
}                   

JavaScript:

$("#uploadify>div").uploadify({                     
  'hideButton'   : true                                
  , 'wmode'      : 'transparent'                         
  , 'uploader'   : '/static/uploadify/uploadify.swf'
  , 'script'     : '/static/uploadify.php'          
  , 'folder'     : '/_uploads'                      
  , 'multi'      : true                             
})                                                  

// If you're using jQuery UI.
$("#uploadify").button(); 

Наверное, немного проще, теперь, когда у нас есть hideButton: true, не уверен, что @Herb знал об этом.

ОБНОВЛЕНИЕ Я написал этот ответ в июле 2010 года. Сейчас март 2013 года. HTML5 поддерживает загрузку нескольких файлов. Не используйте uploadify вообще; Я не.

person Evan Carroll    schedule 01.07.2010
comment
Отличный ответ! Однако одно небольшое предложение: вместо составного тега ('‹div id=uploadify type=button /›') вы можете использовать начальный и конечный теги ('‹div id=uploadify type=button ›‹/ див›’). Конечно, это немного зависит от вашего типа документа, если эта «ошибка» укусит вас. Во всяком случае, для получения дополнительной информации: stackoverflow.com/questions/1411182/ - person rinogo; 18.01.2011
comment
Это отличное решение, но я обнаружил, что мне нужно изменить ‹div id=uploadify› на ‹div id=uploadify style=position:relative;›, чтобы абсолютное позиционирование работало должным образом. - person saille; 31.08.2011
comment
Это решение сработало для меня. Мне не нравится, что есть два элемента с одинаковым идентификатором, но я не мог заставить что-то еще работать. - person T.J.Kjaer; 04.01.2012
comment
Расклад не правильный. Нажимается только небольшая часть кнопки, и существует огромная разница между тем, где находится область, на которую можно нажимать, в webkit и в mozilla. - person Hawkee; 27.03.2012
comment
Не используйте загрузку. Используйте HTML5. - person Evan Carroll; 25.08.2014

Я смог придумать рабочее решение для этого. Вот основная схема:

  • Отключить изображение кнопки «Загрузить» buttonImg: " "
  • Сделайте флеш-объект прозрачным wmode:"transparent"
  • С помощью CSS поместите фальшивый тег button или a позади объекта flash.
  • После инициализации Uploadify установите ширину и высоту объекта в соответствии с кнопкой за ним.

Flash-объект будет защищать кнопку под ним от событий mouseover и т. д.; поэтому, чтобы получить эффекты наведения, вам нужно сделать пару дополнительных шагов:

  • Оберните кнопку и объект загрузки в div
  • После инициализации Uploadify установите ширину и высоту div-оболочки в соответствии с кнопкой
  • Затем вы можете использовать jQuery для обработки событий .hover() в div-оболочке и применить стили к кнопке.

Собираем все вместе:

HTML

<div class="UploadifyButtonWrapper">
    <a>Upload Files</a>
    <div class="UploadifyObjectWrapper">
       <input type="file" id="Uploadify" name="Uploadify" />
    </div>
</div>

CSS

div.UploadifyButtonWrapper{
    position:relative;
}

/* fake button */
div.UploadifyButtonWrapper a {
    position:absolute; /* relative to UploadifyButtonWrapper */
    top:0;
    left:0;
    z-index:0;
    display:block;
    float:left;
    border:1px solid gray;
    padding:10px;
    background:silver;
    color:black;
}

/* pass hover effects to button */
div.UploadifyButtonWrapper a.Hover {
    background:orange;
    color:white;
}

/* position flash button above css button */
div.UploadifyObjectWrapper {
    position:relative;
    z-index:10;
}

Javascript:

$("input.Uploadify", self).uploadify({
    ...
    buttonImg: " ",
    wmode: "transparent",
    ...
});
var $buttonWrapper = $(".UploadifyButtonWrapper", self);
var $objectWrapper = $(".UploadifyObjectWrapper", self);
var $object = $("object", self);
var $fakeButton = $("a", self);
var width = $fakeButton.outerWidth();
var height = $fakeButton.outerHeight();
$object.attr("width", width).attr("height", height);
$buttonWrapper.css("width", width + "px").css("height", height + "px")
$objectWrapper.hover(function() {
    $("a", this).addClass("Hover");
}, function() {
    $("a", this).removeClass("Hover");
});
person Herb Caudill    schedule 20.03.2010
comment
Молодец. ты лучший человек, чем я. удачи. Мой ответ будет удален через 1...2...3.... - person Sky Sanders; 20.03.2010
comment
Вы могли бы подумать, что можно запустить вспышку через javascript и устранить необходимость в этом хаке. - person Evan Carroll; 01.07.2010
comment
Справедливое предупреждение: Chrome неправильно выравнивает элементы с position: absolute; Пришлось удалить top и left и жестко прошить выравнивание через margin-top и margin-left. - person Liz; 24.03.2011

Почему бы просто не поместить Wrapper вокруг него следующим образом:

<div class = "uploadWrapper"><input id="file_upload" name="file_upload" type="file" /></div>

Стилизуйте это так:

.uploadWrapper object {background-color: red;}
.uploadWrapper object:hover {background-color: blue;}

И используйте следующий скрипт:

<script type="text/javascript">
$(document).ready(function() {
  $('#file_upload').uploadify({
    'hideButton': true,
    'wmode'     : 'transparent',
    'uploader'  : '/uploadify/uploadify.swf',
    'script'    : '/uploadify/uploadify.php',
    'cancelImg' : '/uploadify/cancel.png',
    'folder'    : '/uploads',
    'auto'      : true
  });
});
</script>

У меня работает ;) ... и, конечно, вы можете просто использовать фоновые изображения вместо цветов.

person sebastian    schedule 22.02.2011
comment
это работает, я забыл сделать wmode прозрачным. Единственное изменение, которое я сделал, это применить стиль непосредственно к объекту, используя идентификатор объекта, поэтому мне не нужна оболочка - person deb; 12.01.2012

100% рабочий пример. Протестировано в Firefox, Chrome, Opera и IE6!

HTML:

<div id="uploadify-wrapper"><div id="uploadify"></div></div>
<span id="btn">Select files to upload</span>
<div id="uploadify-queue"></div>

CSS:

#uploadify-wrapper {position:absolute; overflow:hidden}

JavaScript:

$('#uploadify').uploadify({width:1000, height:1000, hideButton:true, wmode:'transparent', queueID:'uploadify-queue', ...);
$('#uploadify-wrapper').width($('#btn').outerWidth()).height($('#btn').outerHeight());
person buzoganylaszlo    schedule 02.02.2011

чтение ваших ответов помогло мне решить эту проблему таким образом

  1. Сначала оберните <input> в <div class=upload-wrap>
  2. Примените стили к этой новой оболочке (даже :hover)
  3. Используйте опцию hideButton

HTML:

<div class="upload-wrap">
<input id="file_upload" type="file" name="file_upload" />
</div>

CSS:

.upload-wrap{
    background:#ff0;
    width:133px;
    height:36px;
}
.upload-wrap:hover{
    background:#f00;
}

JS

$('#file_upload').uploadify({
    'uploader'      : 'uploadify/uploadify.swf',
    'script'        : 'uploadify/uploadify.php',
    'folder'        : 'files/images',
    'hideButton'    : true,
    'wmode'     : 'transparent',
    'buttonText'    : 'Upload something'
    'width'         : 133,
    'height'        : 36    
  });

Таким образом, вы можете стилизовать свою кнопку, сохраняя доступной опцию buttonText. Мне также пришлось немного повозиться с файлом .fla, чтобы получить цвет и шрифт для моей кнопки.

person Vinicio Barrantes    schedule 26.01.2012

Очень простой способ - открыть файл с помощью Flash.

Затем вы можете изменить цвет фона символа UploadBtn.

Сохраните и опубликуйте swf.

person George Filippakos    schedule 16.02.2012

Эван был очень близок, но мне нужно было внести некоторые коррективы, чтобы он работал правильно. Вот что я в итоге использовал:

CSS:


#uploadify { 
background: #FF5500; 
border-radius: 5px; 
}

#uploadify:hover { 
background: #B33C00; 
}

#uploadify object { 
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 25px;
}

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

HTML:

<div id="uploadify" style="position: relative;">   
  Upload Screenshots
  <div id="uploadify_button" type="button"></div>
</div>

Относительное положение важно для кнопки абсолютного позиционирования внутри.

JavaScript:


$("#uploadify_button").uploadify({                     
  'hideButton' : true,                                
  'wmode'      : 'transparent',
  'uploader'   : '/static/uploadify/uploadify.swf',
  'script'     : '/static/uploadify.php',
  'folder'     : '/_uploads',         
  'multi'      : true,
  'width'      : '140',
  'height'     : '25'
});

Ширина и высота очень важны, так как они определяют фактическую активную область внутри кнопки div. Я обнаружил, что без них он доступен только в определенной области.

person Hawkee    schedule 27.03.2012

Для Uploadify версии 3.2.1 вы можете редактировать файл таблицы стилей uploadify.css в этих классах:

  • .uploadify-кнопка
  • .uploadify:наведите кнопку .uploadify

В моем случае я комментирую все их стили, чтобы удалить фон и границу кнопки, а кнопка по умолчанию была полностью скрыта.

person Sayed Abolfazl Fatemi    schedule 16.04.2014