Soenneker.Blazor.MediaQuery
4.0.1732
Prefix Reserved
dotnet add package Soenneker.Blazor.MediaQuery --version 4.0.1732
NuGet\Install-Package Soenneker.Blazor.MediaQuery -Version 4.0.1732
<PackageReference Include="Soenneker.Blazor.MediaQuery" Version="4.0.1732" />
<PackageVersion Include="Soenneker.Blazor.MediaQuery" Version="4.0.1732" />
<PackageReference Include="Soenneker.Blazor.MediaQuery" />
paket add Soenneker.Blazor.MediaQuery --version 4.0.1732
#r "nuget: Soenneker.Blazor.MediaQuery, 4.0.1732"
#:package Soenneker.Blazor.MediaQuery@4.0.1732
#addin nuget:?package=Soenneker.Blazor.MediaQuery&version=4.0.1732
#tool nuget:?package=Soenneker.Blazor.MediaQuery&version=4.0.1732
Soenneker.Blazor.MediaQuery
A Blazor component that conditionally renders content from a browser CSS media query, plus an interop service for one-time matchMedia checks.
Installation
dotnet add package Soenneker.Blazor.MediaQuery
using Soenneker.Blazor.MediaQuery.Registrars;
builder.Services.AddMediaQueryInteropAsScoped();
Add the component namespace to _Imports.razor:
@using Soenneker.Blazor.MediaQuery
Conditional content
<MediaQuery Query="(min-width: 768px)">
<nav aria-label="Desktop navigation">
...
</nav>
</MediaQuery>
<MediaQuery Query="(prefers-reduced-motion: reduce)">
<p>Animations are disabled.</p>
</MediaQuery>
Query accepts any expression supported by window.matchMedia, including viewport, orientation, pointer, color-scheme, and reduced-motion queries. It is required and cannot be blank.
The component initially renders its wrapper with no child content, then updates after browser interop reports the first match. This avoids guessing browser state during server prerendering but can cause content to appear after hydration. Do not use it as the only authorization or data-access control; it changes rendering based on client presentation state.
The listener remains active, so the content updates when the query result changes. Changing Query replaces the old listener. Component disposal removes both the browser listener and its DOM observer.
One-time check
Inject IMediaQueryInterop when code needs the current result without rendering the component:
@using Soenneker.Blazor.MediaQuery.Abstract
@inject IMediaQueryInterop MediaQueries
@code {
private bool _usesCoarsePointer;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (!firstRender)
return;
_usesCoarsePointer = await MediaQueries.IsMediaQueryMatched("(pointer: coarse)");
StateHasChanged();
}
}
The one-time method does not subscribe to changes. Call it only after JavaScript interop is available; use the component when ongoing updates are required.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Soenneker.Blazor.Utils.Ids (>= 4.0.22)
- Soenneker.Blazor.Utils.ModuleImport (>= 4.0.1858)
- Soenneker.Lepton.Suite (>= 4.0.56)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 4.0.1732 | 0 | 8/29/2026 |
| 4.0.1729 | 0 | 8/29/2026 |
| 4.0.1728 | 0 | 8/29/2026 |
| 4.0.1727 | 42 | 8/26/2026 |
| 4.0.1726 | 45 | 8/26/2026 |
| 4.0.1725 | 44 | 8/26/2026 |
| 4.0.1724 | 47 | 8/25/2026 |
| 4.0.1723 | 85 | 8/22/2026 |
| 4.0.1722 | 86 | 8/21/2026 |
| 4.0.1721 | 85 | 8/18/2026 |
| 4.0.1720 | 85 | 8/18/2026 |
| 4.0.1719 | 94 | 8/13/2026 |
| 4.0.1718 | 90 | 8/13/2026 |
| 4.0.1717 | 97 | 8/12/2026 |
| 4.0.1716 | 93 | 8/9/2026 |
| 4.0.1715 | 91 | 8/8/2026 |
| 4.0.1714 | 93 | 8/8/2026 |
| 4.0.1713 | 94 | 8/8/2026 |
| 4.0.1712 | 89 | 8/7/2026 |
| 4.0.1711 | 88 | 8/7/2026 |
Improve media query usage and listener safety