Можно ли заменить кнопку, отображаемую компонентом Blazor InputFile, другим элементом?

Я использую этот элемент для загрузки файлов изображений на мой размещенный сайт Blazor WASM. Компонент отображает кнопку со словами «Выбрать файлы».

Я хотел бы заменить эту кнопку изображением (или своим собственным текстом, или чем-то еще). Я попытался с помощью CSS установить фоновое изображение для URL-адреса изображения, которое я хотел бы использовать, и установить для цвета фона кнопки значение «прозрачный», но это, похоже, ничего не меняет.

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
6 081
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Исходный код этого компонента можно найти здесь: https://github.com/SteveSandersonMS/BlazorInputFile

Я изучил код и обнаружил, что этот компонент построен с использованием стандартного типа ввода Blazor.

<input type=file>

Стив показывает способ переопределить функциональность и стиль кнопки по умолчанию с помощью CSS.

Вот пример, который я создал на основе того, что нашел:

<style>
    .file-input-zone {
        display: flex;
        align-items: center;
        justify-content: center;
        background-color: blue;
        color: white;
        cursor: pointer;
        position: relative;
        width: 120px;
        height: 30px;
    }

        .file-input-zone:hover {
            background-color: lightblue;
        }

        .file-input-zone input[type=file] {
            position: absolute;
            width: 100%;
            height: 100%;
            opacity: 0;
            cursor: pointer;
        }
</style>

<div class = "file-input-zone">
    <InputFile />
    Get me a file!
</div>

Это даст вам кнопку, которая выглядит так:

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

Это приятно, спасибо, и просмотр связанного исходного кода также помог. Один незначительный сбой, который у меня все еще есть с этим решением, заключается в том, что (скрытая) область «зоны ввода файла», которая содержит кнопку «Выбрать файл» (а не текст, показывающий имя файла или сообщение «нет файла») не показывать курсор-указатель, когда вы наводите на него курсор, например, ваш "Get me a file!" пример делает. Как вы это решили? Я заметил, что «пример перетаскивания в связанном коде имеет ту же проблему.

Stuart Helwig 10.08.2021 23:56

@Stuart, пожалуйста, внимательно посмотрите на CSS в моем примере. Я подозреваю, что «курсор: указатель» - это то, чего вам не хватает. Примечание: вам нужно это в двух местах

Jason D 12.08.2021 16:01

Спасибо за ваш ответ @Jason. У меня точно так же настроен стиль курсора. Я могу изменить размер ввода и сделать его видимым и видеть, что курсор возвращается к указателю по умолчанию только при наведении курсора на эту «кнопку». Я также могу сделать всю зону ввода файла очень большой, и только небольшая область ввода будет вести себя таким образом. (То же самое происходит в примере перетаскивания в исходном коде, на который вы ссылаетесь.) Но очевидно, что ваш пример работает, так что это довольно интригующе. Может попробовать разные браузеры. (Использовал только Chrome - но ваш образец там тоже работает.) :-(

Stuart Helwig 14.08.2021 04:13

@Stuart, я думаю, будет лучше, если вы откроете новый вопрос в SO с минимально воспроизводимым примером. Это лучший способ помочь кому-то из сообщества. stackoverflow.com/help/минимально-воспроизводимый-пример

Jason D 16.08.2021 17:57

Другие вопросы по теме