When I need a small icon for a website, I often start with UXWing. I search for the idea I need, open an icon, choose Copy SVG Code, and paste the result directly into my HTML. That gives me a usable vector icon without downloading an image, setting up an icon package, or recreating the shape myself.
This is not a full design system. It is a quick, practical workflow for adding an icon to a page while keeping the markup close to the component that uses it.
Why I use SVG icons in HTML
SVG is a good fit for interface icons because it is a vector format. The same icon can stay sharp when it is rendered at different sizes, and I can often change its color with CSS instead of preparing a separate image for every theme or state.
Inline SVG also gives me direct control over the element. I can add an accessible label when the icon communicates meaning, hide it from assistive technology when it is decorative, and place it inside a link or button without managing a separate asset path.
There are other good options. A project may already use an icon library, a sprite, or a component package. For a small number of one-off icons, though, copying the SVG into the template is often the simplest option.
My UXWing workflow
The workflow is short:
- Search UXWing for a word that describes the icon, such as
search,arrow,help, orcalendar. - Browse the result and check the related category if the first search is too broad.
- Open the icon page and look at the SVG preview before choosing it.
- Select Copy SVG Code.
- Paste the code into the HTML, Django template, or component where the icon belongs.
- Adjust the surrounding class, accessible label, or color if the project needs it.
UXWing also offers SVG and PNG downloads, but the copy-code button is the part I use most. It removes the small gap between finding an icon and trying it in the page.
<a class="project-link" href="/projects/">
<svg aria-hidden="true" viewBox="0 0 24 24" focusable="false">
<!-- Paste the SVG markup copied from UXWing here. -->
</svg>
<span>View projects</span>
</a>
The parts of UXWing I find useful
The main UXWing page combines search with broad categories. That is useful when I know what an icon should represent but do not yet know its exact name. The current site lists more than 150 categories, including arrows, communication, computers, locations, SEO, settings, shopping, and web development.
The icon pages expose the actions I normally need: download the SVG, download a PNG, copy the SVG code, and open the SVG icon editor. The editor can also import an existing SVG, which makes it useful when I need to make a small adjustment rather than start from a blank canvas.
UXWing describes its SVGs as optimized and its homepage says the icons are available for personal and commercial projects without required attribution. I still check the license page when an icon is going into a client project, especially when it is a brand logo. Brand marks remain trademarks of their respective owners, and the license does not allow reselling or redistributing the original files as a competing resource.
UXWing free SVG icons UXWing documents its search, categories, formats, editor, optimization, and general usage terms.
How I place copied SVG code in a page
The copied code is ordinary SVG markup. I can paste it inside a button, link, heading, card, or empty-state message just like any other HTML element. I usually leave the path data alone and make changes around it: the class, the accessible attributes, and sometimes the width, height, or viewBox when the icon needs to fit a specific component.
For a decorative icon next to visible text, I use aria-hidden="true" and keep the text as the label. For an icon-only control, the button or link needs an accessible name, usually with visible text that is visually hidden or an aria-label that describes the action.
Here is the kind of structure I might use for an icon-only control. The path is intentionally abbreviated; the real path data is what I paste from the UXWing icon page.
<button class="icon-button" type="button" aria-label="Open search">
<svg class="icon" aria-hidden="true" viewBox="0 0 24 24" focusable="false">
<!-- Full path data copied from the selected UXWing icon. -->
</svg>
</button>
What I check before keeping an icon
Copying an icon is quick, but I still do a small review before committing it. I check that the shape makes sense at the size where it will appear, that it matches the other icons in the same interface, and that the SVG does not contain unnecessary editor metadata or an unexpected embedded image.
I also check the HTML around it. Decorative icons should not become noisy screen-reader content, icon-only controls need a useful accessible name, and a clickable icon should still have a sensible focus style. Finally, I keep the UXWing source link or icon name in my project notes when the asset is important enough that someone else may need to trace it later.
- The icon is still clear at its rendered size.
- The visual style fits the surrounding interface.
- Decorative SVGs are hidden from assistive technology.
- Icon-only controls have an accessible name.
- The copied markup does not include unnecessary editor data.
- The license and any brand-use restrictions fit the project.
- Repeated icons live in a shared partial or component when that is easier to maintain.