ComponentPorchlight CSS

File Upload

Drag-and-drop file upload zone. Native input hidden, CSS-only state management via :has().

51 components9 patterns46 stable5 experimental

Command

Search Porchlight

File Upload

The .pl-c-file-upload is a drag-and-drop zone wrapping a native <input type="file">. The input is visually hidden; the zone is the click target. Uses :has() for drag-over and disabled states.

Semantic HTML

<label class="pl-c-file-upload">
  <input type="file" class="pl-c-file-upload__input" multiple />
  <span class="pl-c-file-upload__zone">
    <svg class="pl-c-file-upload__icon">...</svg>
    <span class="pl-c-file-upload__text">
      <strong>Drag files here</strong> or click to browse
    </span>
  </span>
</label>

Class contract

Selector Role
.pl-c-file-upload Label wrapper (click target).
.pl-c-file-upload__input Hidden native file input.
.pl-c-file-upload__zone The visible drop zone.
.pl-c-file-upload__icon Upload icon.
.pl-c-file-upload__text Instruction text.
[data-dragging] Drag-over state (set via JS).