How to Create a Responsive, Full-Height File Uploader in Blazor?
When building modern web applications, a seamless user experience is crucial. For components like the Blazor File Upload, layout challenges can arise when a large number of files are added. A common issue is the upload button scrolling out of view, forcing users to scroll back up to manage their files. This article demonstrates how to create a responsive, full-height Uploader in Blazor, ensuring the action buttons remain visible while the file list is independently scrollable.
This solution uses modern CSS Flexbox to create a flexible and user-friendly layout. It is essential that the parent container has a defined height for this layout to function correctly.
The Challenge
By default, the Blazor File Upload component’s height adjusts to its content. When many files are selected, the entire component becomes taller, and the “Browse” or “Upload” button may scroll off-screen. The goal is to create a layout where the Uploader intelligently fills the available vertical space, the action buttons remain fixed, and only the file list scrolls.
A Flexbox-Powered Layout
The solution involves structuring the Uploader and its parent container with CSS Flexbox. This allows precise control over how space is distributed, making it easy to create a main area that expands and contracts while keeping other elements, like headers and footers, at a fixed size.
Implementation
Here is the Blazor and CSS code required to implement the responsive layout.
Prerequisites
Before implementing this solution, ensure the development environment meets the following requirements:
-
Syncfusion Blazor Components: Version 25.1 or later
-
.NET Framework: .NET 6.0 or higher for optimal performance
-
Development Environment: Visual Studio 2022 or Visual Studio Code with C# extension
For detailed system requirements, refer to the Syncfusion Blazor System Requirements documentation.
Blazor Component Markup
Add the File Upload to a Razor component and wrap it in a container div. Assign a custom class (uploader-full) to the component for styling.
@using Syncfusion.Blazor.Inputs
<div class="full-page">
<SfUploader ID="fileUpload" CssClass="uploader-full" AutoUpload="false">
</SfUploader>
</div>
CSS Styles
Add the following styles to the application’s stylesheet (e.g., wwwroot/css/site.css).
/* Sets the parent container to use flexbox and defines a viewport-based height. */
.full-page {
display: flex;
flex-direction: column;
height: 95vh; /* Or any specific height. The parent container must have a defined height. */
padding: 20px;
box-sizing: border-box;
}
/* Configures the Uploader component to fill its parent flex container. */
.uploader-full.e-upload {
display: flex;
flex-direction: column;
height: 100%;
}
/* Allows the file list to grow and shrink, with scrolling for overflow. */
.uploader-full .e-upload-files {
flex: 1 1 auto;
overflow-y: auto;
height: 100%; /* Fallback for older browsers */
}
/* Fixes the browse button row to its natural height. */
.uploader-full .e-file-select-wrap {
flex: 0 0 auto;
}
/* Fixes the action buttons bar to its natural height at the bottom. */
.uploader-full .e-upload-actions {
flex: 0 0 auto;
position: relative;
}
Here is a breakdown of the CSS classes:
- Parent Container (
full-page): This container usesdisplay: flexandflex-direction: columnto stack its children vertically.height: 95vhallows it to fill most of the viewport, with padding for spacing. A defined height is required. - Uploader Container (
.uploader-full.e-upload): This class is applied to the Uploader component itself.display: flexandflex-direction: columnare used so its internal elements can be controlled.height: 100%ensures it fills its parent’s defined height. - Button Row (
.e-file-select-wrap): This element contains the “Browse” button.flex: 0 0 autoensures it takes only the space it needs and does not grow or shrink. - File List (
.e-upload-files): This is the scrollable area for the uploaded files. Theflex: 1 1 autoproperty instructs this element to expand and take up all available free space.overflow-y: autoensures a vertical scrollbar appears only when the content exceeds the available height. - Actions Bar (
.e-upload-actions): This contains the “Upload” and “Clear” buttons. Like the button row, it is set toflex: 0 0 autoto keep its size fixed at the bottom of the component.
Experience the Live Demo Demo Here!
Related Links
- Syncfusion Blazor File Upload Component Documentation
- Syncfusion Blazor File Upload Live Demo
- Syncfusion Blazor File Upload - CssClass
Conclusion
By leveraging CSS Flexbox, a highly responsive and user-friendly Syncfusion Blazor File Uploader can be created. This approach ensures that essential actions are always accessible, improving the overall user experience. The same principles can be applied to other components to build dynamic and professional-looking layouts in Blazor applications.
I hope you enjoyed learning about how to create a responsive, full-height File Uploader in Blazor.
You can refer to our Blazor File Upload feature tour page to learn about its other groundbreaking feature representations. You can also explore our Blazor File Upload Documentation to understand how to present and manipulate data.
For current customers, you can check out our Blazor components on the License and Downloads page. If you are new to Syncfusion, you can try our 30-day free trial to explore our Blazor File Upload and other Blazor components.
If you have any queries or require clarifications, please let us know in the comments below. You can also contact us through our support forums, Direct-Trac or feedback portal, or the feedback portal. We are always happy to assist you!