Startpagina » Coding » Hoe maak je een Cut-out Border Design met CSS

    Hoe maak je een Cut-out Border Design met CSS

    Met een ontwerp met uitgesneden randen we kunnen aan gebruikers laten zien wat er te vinden is onder het randgebied van een HTML-element. Deze taak wordt meestal opgelost door het stapelen van twee of meer blokelementen (in de meeste gevallen divs) van verschillende grootte boven op elkaar. Allereerst lijkt dit een moeiteloze oplossing, maar het wordt nog frustrerender als je de lay-out meerdere keren wilt hergebruiken, rond de elementen wilt bewegen, het ontwerp voor mobiel wilt optimaliseren of de code wilt behouden.

    In deze post laat ik je een elegante CSS-only oplossing zien die gebruikt slechts één HTML-element om hetzelfde effect te bereiken. Deze techniek is ook geweldig voor toegankelijkheid, zoals het laadt de achtergrondafbeelding in de CSS, gescheiden van de HTML.

    Aan het einde van dit bericht weet je hoe een achtergrondafbeelding weergeven in het grensgebied om het te maken ontwerp met uitgesneden randen je ziet het hieronder. Ik zal ook laten zien hoe je het ontwerp responsive kunt maken met behulp van viewport-eenheden.

    Initiële code

    De enige vereiste op het HTML-front is a blokelement:

     

    We zullen het moeten doen hergebruik de afmetingen (breedte & hoogte) en grensbreedte van de div, dus ik introduceer ze als CSS-variabelen. De variabele --w staat voor de breedte van de .cb blokelement, --h geeft het aan hoogte, --b gaat voor de grensbreedte, en --b2 voor de grensbreedte vermenigvuldigd met 2. We zullen later het gebruik van de laatste variabele zien.

    Ik verklein de

    relatief aan de breedte van de viewport, vandaar het gebruik van de vw eenheid (u kunt vaste eenheden gebruiken als u dat wilt).

     .cb --w: 35vw; --h: 40vw; --b: 4vw; - b2: calc (var (- b) * 2);  
    Snelle uitleg - vw en vh units

    De eenheid vw vertegenwoordigt de 1/100th van de breedte van de viewport. Bijvoorbeeld, 50vw is 50 delen van een viewport-breedte verticaal in 100 gelijke delen gesneden, terwijl 50vh is 50 delen van een kijkvensterhoogte horizontaal in 100 gelijke delen gesneden.

    Laten we de bovenstaande code verbeteren door een achtergrond toe te voegen en de rand, hoogte en breedte in te stellen door onze vooraf gedefinieerde CSS-variabelen te gebruiken.

     .cb --w: 35vw; --h: 40vw; --b: 4vw; - b2: calc (var (- b) * 2); achtergrond: url (bg.jpg); rand: var (- b) vast transparant; hoogte: var (- h); breedte: var (- w);  

    Hier is hoe de demo er op dit moment uitziet:

    Bepaal de achtergrondafbeelding

    We hebben de achtergrondafbeelding nodig om bestrijk het hele gebied van de

    inclusief het grensgebied, dus de achtergrondafbeelding moet zijn dienovereenkomstig aangepast.

    Als je de achtergrondafbeelding een vaste grootte wilt geven, zorg er dan voor dat het formaat dat je geeft het mogelijk maakt om het randgebied van de achtergrond af te dekken

    ook. Wat betreft de code die tot nu toe in de post is gebruikt, hier is de achtergrond waarde die ik het geef:

     .cb --w: 35vw; --h: 40vw; --b: 4vw; - b2: calc (var (- b) * 2); achtergrond: url (bg.jpg) centrum / calc (var (- w) + var (- b2)) calc (var (- h) + var (- b2)); rand: var (- b) vast transparant; hoogte: var (- h); breedte: var (- w);  

    De breedte van de achtergrondafbeelding [calc (var (- w) + var (- b2))] is de som van de breedte van de div [var (- s)] en de breedte van de linker en rechter randen [var (- b2)].

    Evenzo, de hoogte van de achtergrondafbeelding [calc (var (- h) + var (- b2))] is de som van de hoogte van de div [var (- h)] en de breedte van de boven- en onderranden [var (- b2)].

    Op deze manier hebben we de achtergrondafbeelding aangepast aan een gebied dat hetzelfde is als het formaat div (inclusief het grensgebied).

    De centrum trefwoord lijnt de achtergrondafbeelding uit naar het midden van de div.

    Notitie: Als u opvulling toevoegt aan de div, Onthoud om inclusief het opvulgebied ook naar de achtergrondgrootte, hetzelfde als het randgebied.

    Dit is wat we nu hebben:

    Bedek het exclusieve gebied aan de rand

    Nu we het grens omvattende gebied hebben bedekt met de achtergrondafbeelding, is het enige dat overblijft bedek het middengebied binnen de rand (grens exclusief gebied) met een effen kleur, waarvoor we reiken naar een box-shadow inzet.

     .cb --w: 35vw; --h: 40vw; --b: 4vw; - b2: calc (var (- b) * 2); achtergrond: url (bg.jpg) centrum / calc (var (- w) + var (- b2)) calc (var (- h) + var (- b2)); rand: var (- b) vast transparant; vakschaduw: inzet var (- w) 0 0 rgba (0,120,237, .5); hoogte: var (- h); breedte: var (- w);  

    De horizontale schaduw met waarde var (- s) bestrijkt de volledige breedte van de div. Het gebruik van RGBA kleurfunctie maakt het mogelijk enige transparantie om in de mix te worden toegevoegd, maar u kunt ook een dekkende kleur gebruiken als u het middengebied volledig wilt bedekken.

    Voeg een extra rand toe met box-shadow

    In de demo van Codepen kon je een witte rand rond de afbeelding zien. Er is een beroemde truc van met behulp van vakschaduwen om meerdere randen te maken-we kunnen dezelfde techniek gebruiken om voeg een of meer effen gekleurde randen toe naar ons ontwerp.

    De bijgewerkte box-shadow waarde is:

     .cb --w: 35vw; --h: 40vw; --b: 4vw; - b2: calc (var (- b) * 2); achtergrond: url (bg.jpg) centrum / calc (var (- w) + var (- b2)) calc (var (- h) + var (- b2)); rand: var (- b) vast transparant; box-shadow: inzet var (- w) 0 0 rgba (0,120,237, .5), 0 0 0 calc (var (- b) / 2) wit; hoogte: var (- h); breedte: var (- w);  

    De calc (var (- b) / 2) functie maakt een schaduw van de de helft van de randbreedte.

    Optioneel: aparte lay-out en esthetiek

    In mijn definitieve Codepen-demo heb ik de code voor de achtergrondafbeelding en de doosschaduwkleur geplaatst in een aparte klas. Dit is facultatief, maar kan erg handig zijn als je dat wilt hergebruik de lay-out van het ontwerp met de uitgesneden randen in meerdere elementen en voeg de esthetiek (achtergrondafbeelding + kleur) voor elk element afzonderlijk toe.

    Ik heb een klasse met de naam toegevoegd .poster1 naar de

    om dit doel te bereiken.

     .poster1 --tbgc: rgba (0,120,237, .5); background-image: url ("http://bit.ly/2eQBij2");  

    Sinds achtergrond is een verkorte eigenschap, zijn eigenschappen met de lange hand kunnen worden overschreven / afzonderlijk worden ingesteld. Vandaar dat we kunnen instellen achtergrond afbeelding in .poster1, en verwijder de urlwaarde van de achtergrond eigendom in .cb.

    Om de waarde van de in te stellen box-shadow, we kunnen gebruiken een andere CSS-variabele. De --tbgc veranderlijk houdt de kleurwaarde vast we willen geven aan de doosschaduw (lichtblauw in de demo), dus een van de stijlregels voor .cb wij vervang de kleurwaarde van de box-shadow eigendom met var (- tbgc).

     .cb --w: 35vw; --h: 40vw; --b: 4vw; - b2: calc (var (- b) * 2); achtergrond: centrum / calc (var (- w) + var (- b2)) calc (var (- h) + var (- b2)); rand: var (- b) vast transparant; vakschaduw: inzet var (- w) 0 0 var (- tbgc), 0 0 0 calc (var (- b) / 2) wit; hoogte: var (- h); breedte: var (- w);  

    Code voor portretmodus

    Omdat de dimensies allemaal in de eenheid zitten vw, het zal ziet er te klein uit wanneer u het ontwerp bekijkt in de staande modus (kleinere breedte ten opzichte van de hoogte), waarbij alle mobiele apparaten standaard zijn ingeschakeld. Om dit probleem op te lossen, schakelaar vw met vh, en verklein het ontwerp zoals je ziet voor portretten.

     @media (oriëntatie: portret) .cb --w: 35vh; --h: 40vh; --b: 4vh;  

    Notitie: Vergeet het niet voeg de metatag van de viewport toe naar uw HTML-pagina als u heeft besloten om deze voor mobiele weergave te optimaliseren.

    © Savtec
    Nuttige informatie en tips voor webontwikkeling. Programmering, webdesign, CSS, HTML, JAVASCRIPT. Configureer en installeer WINDOWS opnieuw. Creëren van sites en applicaties vanuit het niets.