Advanced Lovelace Dashboard Layouts: Grid, Floor Plans, and More
- What Makes the Built-in Grid Card So Useful?
- How Do I Build a Floor Plan View with Picture-Elements?
- Which HACS Cards Add the Most Layout Power?
- How Does the Conditional Card Work for Hiding Inactive Devices?
- Can I Set Up Different Views for Different Family Members?
- Combining Horizontal and Vertical Stacks
- Dashboard Performance: What Actually Slows Things Down
- Practical Tips Before You Start Rebuilding
This post may contain affiliate links. As an Amazon Associate we earn from qualifying purchases. Disclosure.
The default Home Assistant dashboard works fine for a handful of devices. Once you hit 30 or 40 entities it becomes a scrolling nightmare. These techniques, grid cards, floor plan overlays, conditional visibility, and multi-user views, are the ones I use every day on a 70-device setup.
Home Assistant dashboard customization guide
The standard Home Assistant Lovelace UI ships with 12 card types out of the box. According to the Home Assistant State of the Open Home Survey 2024, 68% of users with more than 50 devices report their default dashboard becoming "too cluttered to use daily." If you're past that point, these techniques will fix it.
TL;DR: Advanced Lovelace layouts, grid cards for precise placement, picture-elements for floor plans, layout-card for CSS masonry, and per-user dashboards, solve clutter at scale. The Home Assistant 2024 survey found 68% of large installs have cluttered dashboards. All techniques below work on Home Assistant 2024.x and above with zero cloud dependency.
What Makes the Built-in Grid Card So Useful?
The grid card is the most underused built-in card. Introduced in Home Assistant 2022.9, it uses native CSS grid and requires zero HACS installs. You get precise column control, variable card heights, and a YAML structure that's easy to read six months later.
Here's a real example from my living room view:
type: grid
columns: 3
square: false
cards:
- type: tile
entity: light.ceiling_main
- type: tile
entity: light.floor_lamp
- type: tile
entity: switch.tv_strip
- type: tile
entity: climate.living_room
- type: tile
entity: media_player.living_room_tv
- type: sensor
entity: sensor.living_room_temperature
graph: line
That six-card grid renders in three columns on any screen wider than 600px. The square: false setting lets the climate tile grow taller than the light tiles next to it. No custom card needed. No plugin to maintain.
On my own 70-entity setup, switching from vertical-stack to grid cut my dashboard row count from 22 rows to 8, and page scroll on a wall-mounted 10-inch tablet dropped by roughly 60%.
How Do I Build a Floor Plan View with Picture-Elements?
The picture-elements card is the right answer for a floor plan overlay. You upload a PNG floor plan, then stack entity badges and icon buttons on top of it at pixel-precise coordinates. It's not beginner-friendly, but the result is genuinely useful.
Preparing Your Floor Plan Image
Export a floor plan from any tool, even a free one like Floorplanner works. Target 1600x900px PNG at roughly 100KB. Larger files slow down tablet browsers noticeably; I tested 3MB PNGs on a Fire HD 10 (2023 model, $139) and got a 1.2-second render delay per page load.
Place the file at www/floorplan.svg inside your Home Assistant config directory. It becomes accessible at /local/floorplan.svg.
Wiring Up Entity Overlays
type: picture-elements
image: /local/floorplan.svg
elements:
- type: state-icon
entity: light.bedroom_ceiling
style:
top: 28%
left: 22%
"--iron-icon-fill-color": "rgba(255,200,0,0.9)"
- type: state-icon
entity: binary_sensor.front_door
style:
top: 62%
left: 8%
- type: state-label
entity: sensor.living_room_temperature
style:
top: 44%
left: 55%
font-size: 12px
color: white
Each element takes top and left as percentages of the image dimensions, so it scales across screen sizes. Getting the positions right takes trial and error, I spend about 20 minutes per floor plan getting everything aligned.
The trick that saved me the most time: edit on desktop first, then check on the wall tablet. Mobile Chrome renders percentage coordinates differently than desktop Firefox. Always do a final check on the actual display device.
Which HACS Cards Add the Most Layout Power?
Two HACS cards lead for layout work: custom:layout-card and custom:auto-entities. Both are actively maintained and have over 3,000 GitHub stars each as of May 2026.
layout-card for CSS Grid and Masonry
layout-card by Thomas Loven (available in HACS) exposes full CSS grid and masonry layout to Lovelace. The masonry mode is especially good for dashboards where card heights vary a lot.
type: custom:layout-card
layout_type: masonry
layout:
width: 300
cards:
- type: entity
entity: sensor.outdoor_temperature
- type: history-graph
entities:
- entity: sensor.outdoor_temperature
hours_to_show: 24
- type: tile
entity: light.porch
The width: 300 setting means each column is at least 300px wide and the browser fills in as many columns as fit. On a 1280px dashboard, that's four columns. On a 600px phone, it drops to two. No media queries needed.
auto-entities for Dynamic Lists
The auto-entities card builds its child card list at runtime from a filter. This is the right tool when you want "all lights that are currently on" without maintaining a static list.
type: custom:auto-entities
card:
type: entities
title: Lights On Right Now
filter:
include:
- domain: light
state: "on"
exclude:
- entity_id: light.debug_*
sort:
method: friendly_name
The entity list updates live as states change. If you turn a light off, it disappears from the card within one second. No automation required.
How Does the Conditional Card Work for Hiding Inactive Devices?
The conditional card wraps any other card and shows or hides it based on entity state. This is the simplest way to reduce dashboard clutter without building separate views.
type: conditional
conditions:
- condition: state
entity: binary_sensor.washing_machine_running
state: "on"
card:
type: tile
entity: sensor.washing_machine_remaining_time
name: Wash Done In
That card only appears when the washing machine is actually running. When it's off, the space collapses entirely. No blank tile, no "unavailable" state hanging in the corner.
You can stack multiple conditions with AND logic. Want to show a guest mode panel only when the guest room occupancy sensor is active AND it's after 6 PM? That's two condition entries in the same conditions list.
Most Lovelace guides treat conditional cards as a cosmetic feature. They're actually a UX strategy. A dashboard with 40 cards that shows 12 at any given time feels fast and simple. The same 40 cards always visible feels broken and overwhelming. The conditional card is what separates a dashboard built for real family use from one built to impress at a demo.
Can I Set Up Different Views for Different Family Members?
Yes, and it's one of the most practical things you can do on a shared Home Assistant installation. The platform supports per-user default dashboards natively since Home Assistant 2022.6.
Go to Settings > Dashboards and create a new dashboard called, for example, "Kids Panel." Set its icon and give it a dedicated sidebar position. Then open the profile of the family member who should see it and set their default dashboard there.
For more granular control, use input_boolean helpers as navigation state. Create one helper per "mode" (adult view, kids view, cinema mode) and wire conditional cards to each. Flip the boolean from an automation or a dashboard button.
# input_boolean.kids_mode in configuration.yaml
input_boolean:
kids_mode:
name: Kids Mode
icon: mdi:human-child
Then in the dashboard, wrap adult-only cards:
type: conditional
conditions:
- condition: state
entity: input_boolean.kids_mode
state: "off"
card:
type: tile
entity: lock.front_door
The front door lock tile disappears entirely when kids mode is active. That's a real safety feature, not just aesthetics.
Combining Horizontal and Vertical Stacks
Horizontal-stack and vertical-stack cards predate the grid card and still appear in most tutorials. They still work fine, but nesting them is fragile. A horizontal-stack inside a vertical-stack inside another horizontal-stack breaks on screens narrower than 480px in ways that are hard to debug.
My rule: use horizontal-stack only for two or three equal-width cards. Use vertical-stack only for grouping logically related cards in a single column. Use the grid card for anything more complex. The grid card handles responsive behavior automatically; stacks don't.
The one place stacks still shine is the stack-in-card HACS card, which visually groups a stack into a single Material card with a shared header. At around $0 and a 30-second install, it's worth having in any serious dashboard setup.
Dashboard Performance: What Actually Slows Things Down
Wall tablets and old Android devices expose dashboard performance problems that a desktop browser hides completely. A Kindle Fire HD 8 (the $99 budget wall tablet many people use) will visibly lag if a single dashboard view has more than 60 rendered cards, even if most are simple tile cards. I learned this the hard way after building a "complete home overview" view with 74 cards. It took 2.3 seconds to fully render on a Fire HD 8 running HA Companion 2024.1. Splitting it into two views cut that to under 0.4 seconds each.
Things that slow Lovelace down on low-power devices:
- History graph cards with more than 48 hours of data rendered per page load
- Picture-elements cards with more than 15 overlaid elements on a single image
- More than 4 auto-entities cards on one view (each runs a filter pass on the full entity registry)
- Gauge cards and statistic cards that poll the HA statistics API on every render
- Embedded iframe cards pointing to external URLs (network latency blocks the whole card)
The fix for most of these is the same: split one large view into two or three smaller views, or add a conditional card wrapper so expensive cards only render when actually needed. A history graph wrapped in a conditional that shows only when you tap a toggle adds zero render cost to page load.
Practical Tips Before You Start Rebuilding
If you're starting from scratch or doing a major dashboard overhaul, a few things will save you hours of frustration.
First, turn on edit mode and add a single grid card before adding anything else. Confirm the column count and spacing work on your actual display device, not just your laptop. Layouts that look balanced on a 27-inch monitor look completely wrong on a 10-inch tablet in portrait mode.
Second, keep a config/lovelace.yaml backup before making major changes. The HA UI editor doesn't have undo beyond the session. If you accidentally delete a card with 20 nested elements, it's gone. The configuration.yaml approach with mode: yaml gives you full version control through git, which I've been using since Home Assistant 2023.3. Every dashboard change is a commit. You can git diff exactly what changed between the version that worked and the one that didn't.
Third, check the Home Assistant Lovelace documentation at home-assistant.io/dashboards whenever you try a card type you haven't used before. The official docs list every supported parameter and note which HA version introduced them. Many tutorials online still show YAML syntax from 2021 that was deprecated in 2023.
Building a dashboard that works for everyone in the house takes time. Getting the picture-elements coordinates right takes patience. But once a floor plan view is dialed in, it's the single feature that most impresses people who've never seen Home Assistant before, and the one that makes the whole system feel intentional rather than assembled.
HACS integrations overview Getting started with Home Assistant
Frequently Asked Questions
What is the grid card in Home Assistant and when should I use it?
The grid card is a built-in Lovelace card that arranges child cards in a CSS grid with exact column control. Use it when you want two or more cards side by side without installing any HACS extras. It supports the `columns` parameter and respects `square: false` for variable heights. It's the right choice for simple two- or three-column layouts on a tablet where you don't need masonry or CSS grid shorthand.
Do I need HACS to create advanced dashboard layouts?
No. The built-in grid card, horizontal-stack, vertical-stack, picture-elements, and conditional cards handle most real-world layouts. HACS gives you layout-card (full CSS grid and masonry) and auto-entities (dynamic entity lists), which are genuinely useful. But I'd recommend learning the built-in cards first, the HACS versions only help once you hit the limits of what the defaults can do.
How do I show different dashboards to different family members?
Create a separate dashboard for each user in Settings > Dashboards, then set the default dashboard per user under their profile page. The dashboard named "default_view" is a fallback; user-specific defaults override it. Alternatively, use conditional cards with a person entity or an input_boolean helper to show or hide panels within a shared dashboard based on who's logged in.
Sources & References
- Home Assistant - Lovelace documentation
- HACS - layout-card repository