如何在 Django 表单中*仅*隐藏输入类型文件的按钮(不是整个元素)?
How Can I Hide *Only* the Button (Not Entire Element) for the Input Type File in a Django Form?
我刚找到这个:
How to customize <input type="file">?
但它隐藏了整个 input
元素。在我的例子中,我使用的是 Django 的 form
并且有像 "no file selected" 这样的文本,或者在你选择一个文件之后,文件名就会显示出来。我想保留这些位,但只自定义 输入元素的按钮部分。
请参阅下面的当前方法。
但我想要类似下面样式的东西,但它保留了之前图像中的文本。
有办法吗?
编辑
我想我应该更清楚。我在那里看到了所有其他答案,但我的问题是不同的。首先,我知道如何给表单添加属性class。我已经在做这个了。其次,我附上的图片来自我的代码。换句话说,我已经在所谓的重复中实现了答案。
我的问题与显示 "Browse" 的实际按钮旁边的文本有关。我想为按钮设置样式,但 KEEP 文本,因为该文本是动态的,会随着用户操作而变化。
据我所知,其他答案(和我的假设)是整个元素都使用自定义样式 CSS,因此当它被隐藏或遮盖时,文本也会被隐藏。
鉴于此,任何人都可以提出答案吗?
解决方案
感谢@lmgonzalves,我意识到我的问题是隐藏了整个元素。我应该像接受的答案一样用自定义按钮制作一个按钮覆盖。再次感谢!
您应该通过 Widgets.attrs 设置 id 或 class HTML 属性并通过 CSS 自定义,就像这样:
Django 表单
class MyForm(forms.Form):
name = forms.FileField(widget=forms.FileInput(attrs={'id': 'upload'}))
CSS
#upload {
/* ... */
}
有用的链接:
我已经为你创建了一个演示,查看:
https://jsfiddle.net/lmgonzalves/uLmLc3xt/5/
图标是font-awesome,这里是代码
HTML:
<label id="upload-file-container" for="photo">
<input id="photo" type="file" name="photo"/>
<span class="upload-file-wrapper">
<i class="fa fa-cloud-upload"></i>
<span>Click here to upload file</span>
</span>
</label>
CSS:
#upload-file-container{
position: relative;
cursor: pointer;
}
#upload-file-container input{
position: relative;
left: 150px; /* Maybe you need to adjust this */
top: 5px;
}
#upload-file-container .upload-file-wrapper{
position: absolute;
left: 0;
top: -1px;
background-color: lightgray;
border: 1px solid gray;
padding: 5px 0 6px;
width: 250px;
text-align: center;
}
我刚找到这个:
How to customize <input type="file">?
但它隐藏了整个 input
元素。在我的例子中,我使用的是 Django 的 form
并且有像 "no file selected" 这样的文本,或者在你选择一个文件之后,文件名就会显示出来。我想保留这些位,但只自定义 输入元素的按钮部分。
请参阅下面的当前方法。
但我想要类似下面样式的东西,但它保留了之前图像中的文本。
有办法吗?
编辑
我想我应该更清楚。我在那里看到了所有其他答案,但我的问题是不同的。首先,我知道如何给表单添加属性class。我已经在做这个了。其次,我附上的图片来自我的代码。换句话说,我已经在所谓的重复中实现了答案。
我的问题与显示 "Browse" 的实际按钮旁边的文本有关。我想为按钮设置样式,但 KEEP 文本,因为该文本是动态的,会随着用户操作而变化。
据我所知,其他答案(和我的假设)是整个元素都使用自定义样式 CSS,因此当它被隐藏或遮盖时,文本也会被隐藏。
鉴于此,任何人都可以提出答案吗?
解决方案
感谢@lmgonzalves,我意识到我的问题是隐藏了整个元素。我应该像接受的答案一样用自定义按钮制作一个按钮覆盖。再次感谢!
您应该通过 Widgets.attrs 设置 id 或 class HTML 属性并通过 CSS 自定义,就像这样:
Django 表单
class MyForm(forms.Form):
name = forms.FileField(widget=forms.FileInput(attrs={'id': 'upload'}))
CSS
#upload {
/* ... */
}
有用的链接:
我已经为你创建了一个演示,查看:
https://jsfiddle.net/lmgonzalves/uLmLc3xt/5/
图标是font-awesome,这里是代码
HTML:
<label id="upload-file-container" for="photo">
<input id="photo" type="file" name="photo"/>
<span class="upload-file-wrapper">
<i class="fa fa-cloud-upload"></i>
<span>Click here to upload file</span>
</span>
</label>
CSS:
#upload-file-container{
position: relative;
cursor: pointer;
}
#upload-file-container input{
position: relative;
left: 150px; /* Maybe you need to adjust this */
top: 5px;
}
#upload-file-container .upload-file-wrapper{
position: absolute;
left: 0;
top: -1px;
background-color: lightgray;
border: 1px solid gray;
padding: 5px 0 6px;
width: 250px;
text-align: center;
}