Замените собственный интерфейс ввода файлов браузера стилизованной меткой / кнопкой - PullRequest
0 голосов
/ 03 января 2019

Я пытаюсь прокрутить этой статьи , чтобы обеспечить более приятный на вид пользовательский интерфейс для ввода загрузки файла.Короче говоря, это в первую очередь CSS-метод, позволяющий скрыть встроенную в браузер кнопку ввода и заменить ее на метку стиля.Проект, в котором я хочу его использовать, также является проектом Ionic3, и поэтому мне бы хотелось, чтобы этикетка в стиле выглядела как естественная кнопка-ион.

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

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

  .inputfile + label {
    display: inline-block;
  }

  .inputfile + label {
    cursor: pointer; /* "hand" cursor */
  }
<input type="file" name="file" id="file" class="inputfile" />
<label for="file">Choose a file text label</label> &lt;-- this works
<br/><br/>
<input type="file" name="file" id="file" class="inputfile" />
<label for="file">
  <button>Choose a file button label</button>
</label> &lt;-- this doesn't work

Ответы [ 2 ]

0 голосов
/ 03 января 2019

Это не чисто решение CSS или специфическое для Ionic, но в целом для кнопки, которая выступает в качестве пользовательского интерфейса для скрытого элемента ввода файла, кажется, что работает следующее.Вы можете поместить обработчик щелчка на кнопку, а затем в этом обработчике вызвать обработчик щелчка DOM элемента ввода:

<button (click)="handleClick($event)">Choose a file</button>

// Grab the element (Ionic/Angular)
    @ViewChild('fileInput') fileInput;
handleClick($event) {
  this.fileInput._native.nativeElement.click();
}
0 голосов
/ 03 января 2019

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

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

  .inputfile + label {
    display: inline-block;
  }

  .inputfile + label {
    cursor: pointer; /* "hand" cursor */
  }
  .button {
    -webkit-appearance: button;
    -webkit-writing-mode: horizontal-tb !important;
    text-rendering: auto;
    color: initial;
    letter-spacing: normal;
    word-spacing: normal;
    text-transform: none;
    text-indent: 0px;
    text-shadow: none;
    display: inline-block;
    text-align: start;
    margin: 0em;
    font: 400 11px system-ui;
    align-items: flex-start;
    text-align: center;
    cursor: default;
    color: buttontext;
    background-color: buttonface;
    box-sizing: border-box;
    padding: 2px 6px 3px;
    border-width: 2px;
    border-style: outset;
    border-color: buttonface;
    border-image: initial;
    border-color: rgb(216, 216, 216) rgb(209, 209, 209) rgb(186, 186, 186);
    border-style: solid;
    border-width: 1px;
    padding: 1px 7px 2px;
  }
<input type="file" name="file" id="file" class="inputfile" />
<label for="file" class="button">Choose a file text label</label> &lt;-- this works
<br/><br/>
<input type="file" name="file" id="file" class="inputfile" />
<label for="file">
  <button>Choose a file button label</button>
</label> &lt;-- this doesn't work
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...