Tips og inspirasjon
Ting å tenke på før du skal bygge terrasse
Terrassetrender
Gjennomtenkte materialvalg, skjulte skruer, soneinndeling og utekjøkken på terrassen er noe av det som er populært i år.
Slik bygger du enkelt terrasse
Her er løsningen på hvordan du kan forenkle arbeidet med å bygge terrasse. Hvordan velge riktig skrue? Hvordan takle vridde bord? Hvordan få avstanden mellom bordene riktig?
Velg syrefast skrue til terrassen
Syrefaste skruer har høyest mulig rustbeskyttelse og kan brukes uansett klima og størrelse på terrassen. I noen tilfeller er syrefaste skruer et krav når du bygger terrasse. Les mer om når og hvorfor syrefaste skruer er det riktige valget.
Velg riktig terrassebord
Det visuelle inntrykket på terrassen er viktig for mange, men det er også andre ting å ta hensyn til når du skal velge terrassebord. Hvor god råtebeskyttelse har materialet? Hva slags vedlikehold kreves? Hvordan velge riktige skruer til terrassebordet?
Trendy terrasse med skjulte skruer
Bygg terrasse med skjult montering! Bygger du terrasse med skjulte skruer får du et jevnt og pent terrassegulv - for når skruene monteres i siden av terrassebordene blir det ingen fliser eller sprekker.
Terrasseskruen proffen velger
Essdeck Max er en sterk skrue som gjør det lettere for deg å bygge terrasse.
Buede former gir eksklusivt uttrykk
Runde former på terrassen gir et kreativt og lekent uttrykk i hagen. For en ekstra fin finish kan du ramme inn plattingen ved å legge et terrassebord på høykant langs kanten. Sjekk hva mer håndverker Nikolaisen har gjort med uteplassen i Ås.
Unngå fliser i foten med skjulte terrasseskruer
Ingen får flis i foten når terrasseskruene er skjult. Skruene festes i siden av terrassebordet og resultatet blir en flisefri platting som er glatt og behagelig å gå barbeint på.
Bare bytte terrassebord? Slik gjør du det.
Istedenfor å bytte hele terrassen kan du heller erstatte gamle, slitne bord. Slik går du frem for å bytte terrassebord.
5 steg til en holdbar og solid terrasse
Å bygge terrasse tilpasset grunnforholdene er et av de viktigste valgene du kan ta for lage en platting som er bærekraftig - både for deg og miljøet. Står terrassen stødig er den solid og du slipper å skifte ut materialene så ofte.
Terrassetips og inspirasjon fra proffen
ESSDECK Max - perfeksjonistens favorittskrue!
Skruen løser tre store utfordringer som er vanlige når terrasser bygges; oppflising, endetre som sprekker og vridde terrassebord. "Det finnes ingen skrue som matcher ESSDECK Max. Jeg bruker den til propellvirke i ALLE sammenhenger!"
Proffens 10 beste terrassetips
Dette er håndverkernes beste tips for hvordan du bygger terrasse enklest og mest mulig effektivt.
Boblebad på terrassen? 6 ting å tenke på
Boblebadet eller basseng på terrassen er populært. For at platting med jacuzzi skal holde seg over tid må du blant annet tenke på at skruene skal tåle klorvann. Vi har samlet seks tips til deg.
Proffens tips til å bygge pergola og spilerekkverk
Skal du bygge terrasse, pergola og spilerekkverk? Les møbelsnekker Joakims smarte triks for å få et litt mer eksklusivt uttrykk på terrassen og uteplassen.
8000 usynlige terrasseskruer
Tømrer Tom bygget 135 kvm terrasse, spilerekkverk, pergola og utekjøkken uten en eneste synlig skrue.
Enkelt å bygge terrasse med skjulte skruer
Tømrermester Mikkel Degland i Smarte Rom hevder de to største fordelene med å bruke HDS-systemet for skjult innfesting er fornøyde kunder og enkel montering.
Detaljene som gir det beste resultatet
Med skjult innfesting, terrassebord i hele lengder og fokus på å bruke rester på en smart måte har snekker Joakim Berge og kollegaene levert fine uteplasser til to boliger i Drøbak.
Rett og slett en superskrue
Stor klemkraft, lite skruehode og stilrene resultater, det er terrasseskruen Essdeck Max. Når snekker Evensen skal skru terrasse er valget derfor enkelt.
ESSDECK Max er den sterkeste terrasseskruen
Når du bygger en terrasse som skal stå i 20-30 år er det viktig å velge det beste. Terrasseskruen ESSDECK Max er både sterk og tåler norsk klima uten å ruste, forteller snekker Daniel Mork.
Ting å tenke på når terrassen er ferdig
Error executing template "Designs/Swift/Paragraph/Swift_ArticleList.cshtml" System.Text.Json.JsonException: The JSON value could not be converted to System.Int32. Path: $[0] | LineNumber: 0 | BytePositionInLine: 4. ---> System.InvalidOperationException: Cannot get the value of a token type 'String' as a number. at System.Text.Json.ThrowHelper.ThrowInvalidOperationException_ExpectedNumber(JsonTokenType tokenType) at System.Text.Json.Serialization.JsonCollectionConverter`2.OnTryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, TCollection& value) at System.Text.Json.Serialization.JsonConverter`1.TryRead(Utf8JsonReader& reader, Type typeToConvert, JsonSerializerOptions options, ReadStack& state, T& value, Boolean& isPopulatedValue) at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) --- End of inner exception stack trace --- at System.Text.Json.ThrowHelper.ReThrowWithPath(ReadStack& state, Utf8JsonReader& reader, Exception ex) at System.Text.Json.Serialization.JsonConverter`1.ReadCore(Utf8JsonReader& reader, JsonSerializerOptions options, ReadStack& state) at System.Text.Json.Serialization.Metadata.JsonTypeInfo`1.DeserializeAsObject(Utf8JsonReader& reader, ReadStack& state) at System.Text.Json.JsonSerializer.ReadFromSpanAsObject(ReadOnlySpan`1 json, JsonTypeInfo jsonTypeInfo) at System.Text.Json.JsonSerializer.Deserialize(String json, Type returnType, JsonSerializerOptions options) at Dynamicweb.Content.Items.Editors.UserEditor.GetUsers(Object value) at Dynamicweb.Content.Items.Editors.UserEditor.RenderValue(EditorRenderingContext context) at Dynamicweb.Content.Items.Rendering.Renderer.RenderValueInternal(Object value, Type valueType, Template template, String tagName, ItemField meta, Boolean tryRenderLinkedItem, ItemEntry itemEntry) at Dynamicweb.Content.Items.Rendering.Renderer.RenderItemField(ItemField field, Object value, Dictionary`2 validationErrors, Template template, String tagPrefix, ItemEntry itemEntry) at Dynamicweb.Content.Items.Rendering.Renderer.RenderItem(ItemEntry item, ItemSettings settings) at Dynamicweb.Content.Items.Rendering.Renderer.RenderItems(IEnumerable`1 items, ItemListSettings settings) at Dynamicweb.Frontend.ItemPublisher.Frontend.List() at Dynamicweb.Frontend.ItemPublisher.Frontend.GetContentBySettings(String settings) at Dynamicweb.Rendering.TemplateBase`1.RenderItemList(Object settings) at CompiledRazorTemplates.Dynamic.RazorEngine_47b6d454bcb6469d8cb44770df007255.GetArticles(String itemType) at CompiledRazorTemplates.Dynamic.RazorEngine_47b6d454bcb6469d8cb44770df007255.ExecuteAsync() at RazorEngine.Templating.TemplateBase.Run(ExecuteContext context, TextWriter reader) at RazorEngine.Templating.RazorEngineCore.RunTemplate(ICompiledTemplate template, TextWriter writer, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.DynamicWrapperService.Run(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag) at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass23_0.<Run>b__0(TextWriter writer) at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter) at RazorEngine.Templating.RazorEngineServiceExtensions.Run(IRazorEngineService service, String name, Type modelType, Object model, DynamicViewBag viewBag) at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template) at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template) at Dynamicweb.Rendering.Template.RenderRazorTemplate()
1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 3 @functions 4 { 5 private object GetArticles(string itemType) 6 { 7 string listSource = Model.Item.GetRawValueString("ListSource", Model.PageID.ToString()); 8 string articleListSortOrder = Model.Item.GetRawValueString("ArticleListSortOrder", "Descending"); 9 var parent = Dynamicweb.Context.Current.Request.QueryString.Get("list"); 10 var query = string.IsNullOrEmpty(parent) ? listSource : parent; 11 var includeAllChildren = Model.Item.GetRawValueString("ListDepth", "all") == "all" ? true : false; 12 var listContext = Model.Item?.GetList("ListContext")?.GetRawValue().OfType<string>(); 13 var filterString = string.Join(" or ", listContext.Select(item => $"Tags == \"{item}\" or Tags ends with \",{item}\" or Tags starts with \"{item},\" or Tags contains \",{item},\"")); 14 int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; 15 16 return RenderItemList(new 17 { 18 ItemType = itemType, 19 ListTemplate = "ItemPublisher/List/List.cshtml", 20 ItemFieldsList = "*", 21 ListSourceType = "Page", 22 ListSourcePage = query, 23 ListPageSize = maxItemsInList, 24 IncludeParagraphItems = true, 25 ListOrderBy = "PublishedDate", 26 ListSecondOrderBy = "Updated", 27 ListOrderByDirection = articleListSortOrder, 28 IncludeAllChildItems = includeAllChildren, 29 Filter = itemType == "Swift_Article" ? filterString : null // Filter only if "articles only" 30 }); 31 } 32 } 33 34 @{ 35 string listBehaviour = Model.Item.GetRawValueString("ListBehaviour", "articles"); 36 string articleListLayout = Model.Item.GetRawValueString("ArticleListLayout", "grid"); 37 string columnTheme = Model.Item.GetRawValueString("ColumnTheme", string.Empty).ToString().Replace(" ", "").Trim().ToLower(); 38 string columnThemeClass = columnTheme != string.Empty ? " theme " + columnTheme + " p-3" + (articleListLayout == "carousel" ? " px-lg-4" : string.Empty) : string.Empty; 39 40 int maxItemsInList = !string.IsNullOrEmpty(Model.Item.GetInt32("MaxItemsInList").ToString()) ? Model.Item.GetInt32("MaxItemsInList") : 10; 41 42 <div class="h-100@(columnThemeClass) item_@Model.Item.SystemName.ToLower()"> 43 <div id="@Model.ID" class="user-select-none" style="scroll-margin-top:var(--header-height,150px)"></div> 44 45 @switch (articleListLayout) 46 { 47 case "grid": 48 49 { 50 if (listBehaviour == "articles") 51 { 52 @GetArticles("Swift_Article") 53 } 54 if (listBehaviour == "lists") 55 { 56 @GetArticles("Swift_ArticleListPage") 57 } 58 } 59 60 break; 61 62 case "carousel": 63 var carouselSettings = Model.Item.GetRawValueString("CarouselSettings", "4"); 64 string slidesPerPage = $"slider-item-show{carouselSettings}"; 65 string navigationStyle = $"{Model.Item.GetRawValueString("NavigationStyle", "slider-nav-round")}"; 66 string navigationPlacement = $"{Model.Item.GetRawValueString("NavigationPlacement", "slider-nav-on-slides")}"; 67 string indicatorStyle = $"{Model.Item.GetRawValueString("IndicatorStyle", string.Empty)}"; 68 string revealSlides = Model.Item.GetRawValueString("RevealSlides", "reveal") == "reveal" ? "slider-item-reveal" : string.Empty; 69 string sliderItemsGap = Model.Item.GetRawValueString("SliderItemsGap", "slider-item-gap") == "slider-item-nogap" ? "slider-item-nogap" : string.Empty; 70 string navigationAlwaysVisible = (Model.Item.GetBoolean("NavigationAlwaysVisible")) ? "slider-nav-visible" : string.Empty; 71 string navigationVisibleOnTouch = (Model.Item.GetBoolean("NavigationVisibleOnTouch")) ? "slider-nav-touch" : string.Empty; 72 string navigationShowScrollbar = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "slider-nav-scrollbar" : string.Empty; 73 string scrollBarForceMobile = (Model.Item.GetBoolean("NavigationShowScrollbar")) ? "--swiffy-slider-track-height:0.5rem !important;" : string.Empty; 74 string navigationSmall = (Model.Item.GetBoolean("NavigationSmall")) ? "slider-nav-sm" : string.Empty; 75 string navigationInvertColors = (Model.Item.GetBoolean("NavigationInvertColors")) ? "slider-nav-dark" : string.Empty; 76 string navigationSlideEntirePage = (Model.Item.GetBoolean("NavigationSlideEntirePage")) ? "slider-nav-page" : string.Empty; 77 string navigationNoLoop = (Model.Item.GetBoolean("NavigationNoLoop")) ? "slider-nav-noloop" : string.Empty; 78 string indicatorsOutsideSlider = (Model.Item.GetBoolean("IndicatorsOutsideSlider") && indicatorStyle != string.Empty) ? "slider-indicators-outside" : string.Empty; 79 string indicatorsHighlightActive = (Model.Item.GetBoolean("IndicatorsHighlightActive")) ? "slider-indicators-highlight" : string.Empty; 80 string indicatorsInvertColors = (Model.Item.GetBoolean("IndicatorsInvertedColors")) ? "slider-indicators-dark" : string.Empty; 81 string indicatorsVisibleOnSmallDevices = (Model.Item.GetBoolean("IndicatorsVisibleOnSmallDevices")) ? "slider-indicators-sm" : string.Empty; 82 string animation = Model.Item.GetRawValueString("Animation", string.Empty) != string.Empty ? $"slider-nav-animation {Model.Item.GetRawValueString("Animation")}" : string.Empty; 83 string autoplay = (Model.Item.GetBoolean("Autoplay")) ? "slider-nav-autoplay" : string.Empty; 84 string autoplayInterval = Model.Item.GetRawValueString("AutoplayInterval", string.Empty); 85 bool hideSliderNavigation = false; 86 87 if (navigationStyle == "slider-nav-none") 88 { 89 hideSliderNavigation = true; 90 } 91 92 <div id="Slider_@Model.ID" class="swiffy-slider @(slidesPerPage) @(navigationStyle) @(revealSlides) @(navigationPlacement) @(navigationAlwaysVisible) @(navigationVisibleOnTouch) @(sliderItemsGap) @(indicatorStyle) @(navigationShowScrollbar) @(navigationSmall) @(navigationInvertColors) @(indicatorsOutsideSlider) @(navigationNoLoop) @(indicatorsHighlightActive) @(indicatorsInvertColors) @(indicatorsVisibleOnSmallDevices) @(navigationSlideEntirePage) @(animation) @(autoplay) item_@Model.Item.SystemName.ToLower()" style="--swiffy-slider-nav-light:var(--swift-foreground-color);--swiffy-slider-nav-dark:var(--swift-background-color);visibility:hidden;opacity:0;@(scrollBarForceMobile)" data-slider-nav-autoplay-interval="@(autoplayInterval)"> 93 <div class="slider-container pb-3 py-lg-3 px-lg-3 mt-lg-n3 mx-lg-n3"> 94 @{ 95 if (listBehaviour == "articles") 96 { 97 @GetArticles("Swift_Article") 98 } 99 if (listBehaviour == "lists") 100 { 101 @GetArticles("Swift_ArticleListPage") 102 } 103 } 104 </div> 105 106 @if (!hideSliderNavigation) 107 { 108 <button type="button" title="@Translate("Previous slide")" class="slider-nav" style="z-index:1;"> 109 <span class="visually-hidden">@Translate("Previous slide")</span> 110 </button> 111 <button type="button" title="@Translate("Next slide")" class="slider-nav slider-nav-next" style="z-index:1;"> 112 <span class="visually-hidden">@Translate("Next slide")</span> 113 </button> 114 } 115 @if (indicatorStyle != "slider-indicators-hidden") 116 { 117 <div class="slider-indicators" style="z-index:1;"></div> 118 } 119 120 <script type="module" src="/Files/Templates/Designs/Swift/Assets/js/swiffy-slider.js"></script> 121 <script> 122 window.addEventListener("load", () => { 123 swift.AssetLoader.Load('/Files/Templates/Designs/Swift/Assets/css/swiffy-slider.min.css', 'css'); 124 window.swiffyslider.initSlider(document.querySelector('#Slider_@Model.ID')); 125 document.querySelector('#Slider_@Model.ID').style.opacity = 1; 126 document.querySelector('#Slider_@Model.ID').style.visibility = "visible"; 127 }); 128 </script> 129 130 @if (indicatorStyle != "slider-indicators-hidden") 131 { 132 <script type="module"> 133 const slider = document.querySelector('#Slider_@Model.ID'); 134 const sliderContainer = slider.querySelector('.slider-container'); 135 let slides = sliderContainer.querySelectorAll('article'); 136 const sliderIndicators = slider.querySelector('.slider-indicators'); 137 138 slides.forEach((slide,index) => { 139 const indicator = document.createElement('template'); 140 indicator.innerHTML = ` 141 <button type="button" class="${index == 0 ? "active" : ""}" title='@Translate("Go to slide") ${index + 1}'> 142 <span class="visually-hidden">@Translate("Go to slide") ${index + 1}</span> 143 </button> 144 `; 145 sliderIndicators.appendChild(indicator.content); 146 }); 147 </script> 148 } 149 </div> 150 151 break; 152 } 153 </div> 154 } 155