Skip to content

Features

Features are content blocks that editors place inside layout areas. Each feature renders a specific type of content — rich text, images, FAQs, navigation, etc.

Element TypeDisplay NameComponent Composition
featureRichTextEditorRich Text EditorfeatureComponentRichTextEditor
featureImageImagefeatureComponentImage
featureImageSlideshowImage SlideshowfeatureComponentImageSlideshow
featureCodeCodefeatureComponentCode
featureHTMLHTMLfeatureComponentHtml
featureFaqsFAQsfeatureComponentFaqs
featureTabsTabsfeatureComponentTabs
featureInternalLinksInternal Links - SelectedfeatureComponentsInternalLinks
featureInternalLinksChildrenInternal Links - ChildrenfeatureComponentsInternalLinks
featureInternalLinksPaginationInternal Links - PaginationfeatureComponentsInternalLinks
featureInternalLinksSlideshowInternal Links - SlideshowfeatureComponentInternalLinksSlideshow
featureFormContactUsForm - Contact Us(inline form fields)
featurePageTitleDescriptionPage Title and Description(reads from page properties)
featureNavigationDescendantsNavigation - DescendantsfeatureComponentNoConfiguration
featureNavigationInPageNavigation - In PagefeatureComponentNavigationInPage
featureNavigationTableOfContentsNavigation - Table of ContentsfeatureComponentNoConfiguration

All feature element types follow the pattern feature{Name}.

Each feature is an element type in the Umbraco backoffice (Settings > Document Types > Features). A feature element type:

  • Is marked as Is Element: true
  • Has no own properties — all properties come from compositions
  • Composes the standard compositions (title, description, summary) plus one specific component
  • Lives in the Features folder

Features use a consistent composition pattern with two groups:

Standard compositions (shared by most features):

CompositionPropertyPurpose
featureComponentFeatureTitlefeaturePropertyFeatureTitleHeading above the content
featureComponentFeatureDescriptionfeaturePropertyFeatureDescriptionLead text below the heading
featureComponentFeatureSummaryfeaturePropertyFeatureSummaryFooter text below the content

Specific component (one per feature type):

Each feature has its own component composition that provides the content-specific property (e.g. featureComponentRichTextEditor provides the rich text field).

All component properties use SortOrder 50 on the featureContent tab.

No-configuration features (e.g. featureNavigationDescendants) compose only featureComponentNoConfiguration — they derive their content from the page context rather than editor input.

Most features set Layout = "_Layout_Features.cshtml", which provides the standard feature rendering structure:

<section id="feature-{ContentKey}" class="feature-item {alias}">
<header class="feature__header">
<h2>{featureTitle}</h2>
<p class="lead">{featureDescription}</p>
</header>
<div class="feature__body">
{feature-specific content via @RenderBody()}
</div>
<footer class="feature__footer">
<p><small>{featureSummary}</small></p>
</footer>
</section>

The layout wrapper handles:

  • Rendering the <section> with the feature’s ContentKey as its id
  • Conditionally showing header (title + description) only when populated
  • Rendering the feature-specific content via @RenderBody()
  • Conditionally showing footer (summary) only when populated
  • Applying background colour from feature settings
  • Respecting the featureSettingsHideDisplay toggle

Exception: Some features skip the shared layout — navigation features typically render their own container directly.

The feature’s own .cshtml view is minimal — it only renders the content-specific part. The standard header/body/footer structure comes from the shared layout.

For example, featureRichTextEditor.cshtml:

@inherits UmbracoViewPage<BlockGridItem<FeatureRichTextEditor>>
@{
Layout = "_Layout_Features.cshtml";
}
@Model.Content.RichTextContent

Features use settings blocks to provide editor-configurable options. There are two levels:

Shared settingsfeatureSettings (used by most features):

CompositionPropertyPurpose
featureSettingsComponentColorPickerfeatureSettingsColourPickerBackground colour picker
featureSettingsComponentHideDisplayfeatureSettingsHideDisplayHide/display toggle

Per-feature settings — for features that need additional options:

Settings TypeUsed ByExtra Compositions
featureSettingsNavigationfeatureNavigationDescendants, featureNavigationInPagefeatureSettingsComponentStickyNav (sticky toggle)

Per-feature settings types compose the same shared components (colour picker, hide/display) plus feature-specific ones.

To create a per-feature settings type:

  1. Create the settings component (e.g. featureSettingsComponentStickyNav) — an element type with the feature-specific property
  2. Create the settings type (e.g. featureSettingsNavigation) — composes featureSettingsComponentColorPicker + featureSettingsComponentHideDisplay + your new component
  3. Update the Block Grid DataType — change the settings element type for the relevant feature blocks from featureSettings to your new type
  4. Update the views — read the new property from Model.Settings

Features without custom settings stay on the generic featureSettings. Migrate incrementally as needs arise.

Features get live previews automatically in the backoffice via BlockPreview. Any element type whose alias does not start with layout is included.

  1. Create the component composition (e.g. featureComponentMyWidget) with the content-specific property on the featureContent tab at SortOrder 50
  2. Create the feature element type (e.g. featureMyWidget) in the Features folder, composing:
    • featureComponentFeatureTitle
    • featureComponentFeatureDescription
    • featureComponentFeatureSummary
    • Your new featureComponentMyWidget
  3. Create the Razor view at Views/Partials/blockgrid/Components/featureMyWidget.cshtml:
    • Set Layout = "_Layout_Features.cshtml"
    • Render only the content-specific part (title/description/summary are handled by the layout)
  4. Add it to the Block Grid DataType as a Feature Block:
    • Link featureSettings as the settings type
    • Assign it to the appropriate layout areas
  5. BlockPreview automatically includes it — no configuration needed