web-dev-qa-db-ja.com

input type = "file"のデフォルトのテキストを変更しますか?

私たちがChoose Fileを使うとき、私たちはボタンのデフォルトテキストを "input="file""に変えたいです。

enter image description here

これどうやってするの?またあなたが画像で見ることができるようにボタンはテキストの左側にあります。テキストの右側に配置する方法

144
Harry Joy

各ブラウザには独自のコントロールの表現があります。そのため、コントロールのテキストや向きを変更することはできません。

Flashや silverlight の解決策ではなく、 html / css の解決策が必要な場合に試してみるとよい「種類の」ハックがいくつかあります。

http://www.quirksmode.org/dom/inputfile.html

http://www.shauninman.com/archive/2007/09/10/styling_file_inputs_with_css_and_the_dom

個人的には、ほとんどのユーザーは選択したブラウザーに固執しているため、デフォルトのレンディションでコントロールを見ることに慣れているため、違うものを見た場合は混乱するでしょう(扱うユーザーのタイプによって異なります)。 。

43
Shiv Kumar

labelにはinput"for"属性を使用してください。

<div>
  <label for="files" class="btn">Select Image</label>
  <input id="files" style="visibility:hidden;" type="file">
</div>

$("#files").change(function() {
  filename = this.files[0].name
  console.log(filename);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
      <label for="files" class="btn">Select Image</label>
      <input id="files" style="visibility:hidden;" type="file">
    </div>
132
algometrix

これは将来の誰かに役立つかもしれません、あなたは好きなように入力のラベルをスタイルして、あなたがそれの中に欲しいものを置くことができ、display noneで入力を隠します。

それはiOSとcordovaで完璧に動作します

<link href="https://cdnjs.cloudflare.com/ajax/libs/ratchet/2.0.2/css/ratchet.css" rel="stylesheet"/>
<label for="imageUpload" class="btn btn-primary btn-block btn-outlined">Seleccionar imagenes</label>
<input type="file" id="imageUpload" accept="image/*" style="display: none">
21
Paulo Mogollón

私はこれがあなたが望むものだと思います:

<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
</head>

<body>
  <button style="display:block;width:120px; height:30px;" onclick="document.getElementById('getFile').click()">Your text here</button>
  <input type='file' id="getFile" style="display:none">
</body>

</html>
15
1Cr18Ni9

それは不可能。それ以外の場合は、SilverlightまたはFlashのアップロード制御を使用する必要があります。

8
Anuraj

ここにあなたがそれをどのように行うことができるか:

jQuery:

$(function() {
  $("#labelfile").click(function() {
    $("#imageupl").trigger('click');
  });
})

css

.file {
  position: absolute;
  clip: rect(0px, 0px, 0px, 0px);
  display: block;
}
.labelfile {
  color: #333;
  background-color: #fff;
  display: inline-block;
  margin-bottom: 0;
  font-weight: 400;
  text-align: center;
  vertical-align: middle;
  cursor: pointer;
  background-image: none;
  white-space: nowrap;
  padding: 6px 8px;
  font-size: 14px;
  line-height: 1.42857143;
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

HTML code:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div style="margin-top:4px;">
  <input name="imageupl" type="file" id="imageupl" class="file" />
  <label class="labelfile" id="labelfile"><i class="icon-download-alt"></i> Browse File</label>
</div>
3
Tushar Shukla

更新2017:

私はこれがどのようにして達成されるのかについて研究しました。そして、最高の説明/チュートリアルはここにあります: https://tympanus.net/codrops/2015/09/15/styling-customizing-file-inputs-smart-way/

利用できなくなった場合のために、ここで概要を書きます。それで、あなたはHTMLを持つべきです:

<input type="file" name="file" id="file" class="inputfile" />
<label for="file">Choose a file</label>

次にCSSで入力を隠します。

.inputfile {
width: 0.1px;
height: 0.1px;
opacity: 0;
overflow: hidden;
position: absolute;
z-index: -1;}

次にラベルをスタイルします。

.inputfile + label {
font-size: 1.25em;
font-weight: 700;
color: white;
background-color: black;
display: inline-block;
}

それから、オプションでファイルの名前を表示するためにJSを追加することができます。

var inputs = document.querySelectorAll( '.inputfile' );
Array.prototype.forEach.call( inputs, function( input )
{
var label    = input.nextElementSibling,
    labelVal = label.innerHTML;

input.addEventListener( 'change', function( e )
{
    var fileName = '';
    if( this.files && this.files.length > 1 )
        fileName = ( this.getAttribute( 'data-multiple-caption' ) || '' ).replace( '{count}', this.files.length );
    else
        fileName = e.target.value.split( '\\' ).pop();

    if( fileName )
        label.querySelector( 'span' ).innerHTML = fileName;
    else
        label.innerHTML = labelVal;
});
});

しかし、本当にチュートリアルを読んでデモをダウンロードするだけで、本当に良いです。

2
user3784950

ブートストラップを使用すると、以下のコードのようにこれを実行できます。

<!DOCTYPE html>
<html lang="en">
<head>
<style>

.btn-file {
  position: relative;
  overflow: hidden;
}
.btn-file input[type=file] {
    position: absolute;
    top: 0;
    right: 0;
    min-width: 100%;
    min-height: 100%;
    font-size: 100px;
    text-align: right;
    filter: alpha(opacity=0);
    opacity: 0;
    outline: none;
    background: white;
    cursor: inherit;
    display: block;
}
</style>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
  <span class="btn btn-file">Upload image from here<input type="file">
</body>
</html>
2
Rana Aalamgeer

スクリプトを作成してGitHubで公開しました。getselectFile.js使いやすく、複製してください。


HTML

<input type=file hidden id=choose name=choose>
<input type=button onClick=getFile.simulate() value=getFile>
<label id=selected>Nothing selected</label>


JS

var getFile = new selectFile;
getFile.targets('choose','selected');


デモ

jsfiddle.net/Thielicious/4oxmsy49/

2
Thielicious

buttonをトリガーするためにinputを使用します。

<button onclick="document.getElementById('fileUpload').click()">Open from File...</button>
<input type="file" id="fileUpload" name="files" style="display:none" />

早くてきれい。

1
Sony Santos

[OK]カスタム入力ファイルを作成するための非常に単純な純粋なCSSの方法です。

ラベルを使用してください、しかし、あなたが前の答えから知っているように、ラベルはFirefoxのonclick機能を呼び出さないで、バグであるかもしれませんが、以下に関係がありません。

<label for="file"  class="custom-file-input"><input type="file"  name="file" class="custom-file-input"></input></label>

あなたがしたいことはあなたがそれをしたい方法に見えるようにラベルをスタイルすることです

    .custom-file-input {
        color: transparent;/* This is to take away the browser text for file uploading*/
        /* Carry on with the style you want */
        background: url(../img/doc-o.png);
        background-size: 100%;
        position: absolute;
        width: 200px;
        height: 200px;
        cursor: pointer;
        top: 10%;
        right: 15%;
    }

実際の入力ボタンを隠すだけですが、visability: hiddenに設定することはできません。

opacity: 0;を設定して見えないようにします。

input.custom-file-input {
    opacity: 0;
    position: absolute;/*set position to be exactly over your input*/
    left: 0;
    top: 0;
}

私は自分の入力フィールドと同じクラスを自分のラベル上に持っていることに気付いたかもしれませんが、これは両方とも同じスタイルを使いたいためです。入力フィールド.

0
Jadin Hornsby

これはうまくいくはずです。

input .className :: - webkitファイルアップロードボタン{style content ..}

0
Andrius

あなたはこのアプローチを使うことができます、それは多くのファイルが入力されたとしてもうまくいきます。

const fileBlocks = document.querySelectorAll('.file-block')
const buttons = document.querySelectorAll('.btn-select-file')

;[...buttons].forEach(function (btn) {
  btn.onclick = function () {
    btn.parentElement.querySelector('input[type="file"]').click()
  }
})

;[...fileBlocks].forEach(function (block) {
  block.querySelector('input[type="file"]').onchange = function () {
    const filename = this.files[0].name

    block.querySelector('.btn-select-file').textContent = 'File selected: ' + filename
  }
})
.btn-select-file {
  border-radius: 20px;
}

input[type="file"] {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="file-block">
  <button class="btn-select-file">Select Image 1</button>
  <input type="file">
</div>
<br>
<div class="file-block">
  <button class="btn-select-file">Select Image 2</button>
  <input type="file">
</div>

私が使ったハックを加えましょう。私はあなたがファイルをドラッグアンドドロップすることを可能にするセクションを持ちたかった、そして私はそのドラッグアンドドロップセクションがオリジナルのアップロードボタンと共にクリックできるようにしたかった。

これがどのように見えるかです 私が終わったとき(ドラッグ&ドロップ機能を除いて、それをする方法に関するたくさんのチュートリアルがあります)。

それから私が実際に作った 一連のブログ記事 それは主にファイルアップロードボタンに関するものです。

0
Mr. Me
<button class="styleClass" onclick="document.getElementById('getFile').click()">Your text here</button>
<input type='file' id="getFile" style="display:none">

これはまだこれまでのところ最高です

0
oroyo segun