[css] 입력 유형 = 파일을 이미지로 바꾸기

많은 사람들과 마찬가지로 추악한을 사용자 정의하고 싶습니다 . input type=file해킹 및 / 또는 javascript. 하지만 제 경우에는 업로드 파일 버튼이 이미지 ( jpeg | jpg | png | gif ) 를 업로드하기위한 것이므로 clickable입력 유형 파일 ( 대화 상자 및 제출 된 페이지에 동일한 $ _FILE 표시).
나는 몇 가지 해결 방법을 찾을 여기 , 그리고 이 흥미를 너무 (그러나 크롬 = / 작동하지 않습니다).

파일 버튼에 스타일을 추가하고 싶을 때 어떻게 하시나요? 그것에 대해 의견이 있으시면 대답 버튼을 누르십시오.)



답변

이것은 나를 위해 정말 잘 작동합니다.

.image-upload>input {
  display: none;
}
<div class="image-upload">
  <label for="file-input">
    <img src="https://icon-library.net/images/upload-photo-icon/upload-photo-icon-21.jpg"/>
  </label>

  <input id="file-input" type="file" />
</div>

기본적으로 레이블 의 for 속성은 레이블을 클릭하는 것이 지정된 입력을 클릭하는 것과 동일 하도록 만듭니다 .

또한 표시 속성을 none으로 설정하면 파일 입력이 전혀 렌더링되지 않고 멋지고 깔끔하게 숨겨집니다.

Chrome에서 테스트되었지만 웹에 따르면 모든 주요 브라우저에서 작동합니다. 🙂

편집 :
여기에 JSFiddle 추가 : https://jsfiddle.net/c5s42vdz/


답변

실제로 순수한 CSS로 할 수 있으며 매우 쉽습니다 …

HTML 코드

<label class="filebutton">
Browse For File!
<span><input type="file" id="myfile" name="myfile"></span>
</label>

CSS 스타일

label.filebutton {
    width:120px;
    height:40px;
    overflow:hidden;
    position:relative;
    background-color:#ccc;
}

label span input {
    z-index: 999;
    line-height: 0;
    font-size: 50px;
    position: absolute;
    top: -2px;
    left: -700px;
    opacity: 0;
    filter: alpha(opacity = 0);
    -ms-filter: "alpha(opacity=0)";
    cursor: pointer;
    _cursor: hand;
    margin: 0;
    padding:0;
}

아이디어는 입력을 레이블 내부에 절대적으로 배치하는 것입니다. 입력의 글꼴 크기를 크게 설정하면 “찾아보기”버튼의 크기가 커집니다. 그런 다음 네거티브 left / top 속성을 사용하여 입력 찾아보기 버튼을 레이블 뒤에 배치하는 데 시행 착오가 걸립니다.

버튼을 배치 할 때 알파를 1로 설정합니다. 완료되면 다시 0으로 설정합니다 (현재 수행중인 작업을 볼 수 있음).

모든 브라우저에서 입력 버튼을 약간 다른 크기로 렌더링하므로 여러 브라우저에서 테스트해야합니다.


답변

@hardsetting의 훌륭한 솔루션이지만 Windows의 Safari (5.1.7)에서 작동하도록 몇 가지 개선했습니다.

.image-upload > input {
  visibility:hidden;
  width:0;
  height:0
}
<div class="image-upload">
  <label for="file-input">
    <img src="https://placehold.it/100/000000/ffffff?text=UPLOAD" style="pointer-events: none"/>
  </label>

  <input id="file-input" type="file" />
</div>

사파리 문제 visibility: hidden, width:0대신 사용 display: none하고 입력 파일 유형 태그가 FORM 태그에 있으면 작동하도록 태그에 추가 pointer-events: none했습니다 img.

모든 주요 브라우저에서 나를 위해 일하는 것 같습니다.

누군가에게 도움이되기를 바랍니다.


답변

내가 사용하는 것이 SWFUpload 또는 Uploadify을 . Flash가 필요하지만 문제없이 원하는 모든 작업을 수행합니다.

<input type="file">실제 컨트롤을 클릭하는 것 이외의 방법으로 “파일 열기”대화 상자를 트리거하려는 모든 기반 해결 방법은 보안상의 이유로 언제든지 브라우저에서 제거 할 수 있습니다. (I는 생각 이 이벤트 그 프로그램 트리거에 더 이상 가능하지 않다, FF와 IE의 현재 버전.)


답변

요점이 있으면이게 내 방법

HTML

<label for="FileInput">
    <img src="tools/img/upload2.png" style="cursor:pointer" onmouseover="this.src='tools/img/upload.png'" onmouseout="this.src='tools/img/upload2.png'" alt="Injaz Msila" style="float:right;margin:7px" />
</label>
<form action="upload.php">
    <input type="file" id="FileInput" style="cursor: pointer;  display: none"/>
    <input type="submit" id="Up" style="display: none;" />
</form>

jQuery

<script type="text/javascript">
    $( "#FileInput" ).change(function() {
      $( "#Up" ).click();
    });
</script>


답변

정말 간단합니다.

$("#image id").click(function(){
    $("#input id").click();
});


답변

대신 이미지를 넣고 다음과 같이 할 수 있습니다.

HTML :

<img src="/images/uploadButton.png" id="upfile1" style="cursor:pointer" />
<input type="file" id="file1"  name="file1" style="display:none" />

JQuery :

$("#upfile1").click(function () {
    $("#file1").trigger('click');
});

주의 사항 : IE9 및 IE10에서 자바 스크립트를 통해 파일 입력에서 onclick을 트리거하면 양식이 ‘위험한’플래그가 지정되고 자바 스크립트로 제출할 수 없으며 전통적으로 제출할 수 있는지 확실하지 않습니다.