The file
element is a simple interactive label that wraps an
<input type="file">
. It comprises several sub-elements:
-
file
the main container
-
file-label
the actual interactive and clickable part of the element
file-input
the native file input, hidden for styling purposes
-
file-cta
the upload call-to-action
file-icon
an optional upload icon
file-label
the "Choose a fileā¦" text
file-name
a container for the chosen file name
HTML
<div class="file">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
</label>
</div>
Modifiers
#
With the has-name
modifier combined with the file-name
element, you can add a
placeholder for the selected file name.
<div class="file has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
You can move the CTA to the right side with the is-right
modifier.
<div class="file has-name is-right">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
You can also expand the name to fill up the space with the is-fullwidth
modifier.
<div class="file has-name is-fullwidth">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
You can have a boxed block with the is-boxed
modifier.
<div class="file is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
</label>
</div>
You can combine has-name
and is-boxed
.
<div class="file has-name is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
Colors
#
You can style the file element by appending one of the
0 color modifiers:
HTML
<div class="file is-primary">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Primary fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-info has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Info fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-warning is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-cloud-upload-alt"></i>
</span>
<span class="file-label"> Warning fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-danger has-name is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-cloud-upload-alt"></i>
</span>
<span class="file-label"> Danger fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
Sizes
#
You can append one of the 4 available sizes:
-
is-small
is-normal
(default)
-
is-medium
-
is-large
HTML
<div class="file is-small">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-normal">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-medium">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-large">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-small has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-normal has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-medium has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-large has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-small is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-normal is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-medium is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-large is-boxed">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large fileā¦ </span>
</span>
</label>
</div>
HTML
<div class="file is-small is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Small fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-normal is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Normal fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-medium is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Medium fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-large is-boxed has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Large fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
Alignment
#
You can align the file input:
- to the center with the
is-centered
modifier
- to the right with the
is-right
modifier
HTML
<div class="file is-centered is-boxed is-success has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Centered fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
HTML
<div class="file is-right is-info">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Right fileā¦ </span>
</span>
<span class="file-name"> Screen Shot 2017-07-29 at 15.54.25.png </span>
</label>
</div>
JavaScript
#
A file upload input requires JavaScript to retrieve the selected file name. Here
is an example of how this could be done:
HTML
<div id="file-js-example" class="file has-name">
<label class="file-label">
<input class="file-input" type="file" name="resume" />
<span class="file-cta">
<span class="file-icon">
<i class="fas fa-upload"></i>
</span>
<span class="file-label"> Choose a fileā¦ </span>
</span>
<span class="file-name"> No file uploaded </span>
</label>
</div>
<script>
const fileInput = document.querySelector("#file-js-example input[type=file]");
fileInput.onchange = () => {
if (fileInput.files.length > 0) {
const fileName = document.querySelector("#file-js-example .file-name");
fileName.textContent = fileInput.files[0].name;
}
};
</script>
Sass and CSS variables
#
Sass Variable
|
CSS Variable
|
Value
|
$file-radius
|
var(--bulma-file-radius)
|
var(--bulma-radius)
|
$file-cta-color
|
var(--bulma-)
|
var(--bulma-text)
|
$file-cta-hover-color
|
var(--bulma-)
|
var(--bulma-text-strong)
|
$file-cta-active-color
|
var(--bulma-)
|
var(--bulma-text-strong)
|
$file-name-border-color
|
var(--bulma-file-name-border-color)
|
var(--bulma-border)
|
$file-name-border-style
|
var(--bulma-file-name-border-style)
|
solid
|
$file-name-border-width
|
var(--bulma-file-name-border-width)
|
1px 1px 1px 0
|
$file-name-max-width
|
var(--bulma-file-name-max-width)
|
16em
|