/ Gists / CSS

Gists - CSS

On gists

Css scrollable centered modal

CSS CSS trick

style.css #

/* to the body element */
.noscroll { 
	overflow: hidden; 
}

.overlay { 
   	position: fixed; 
   	overflow-y: scroll;
   	inset: 0;
	place-items: center;

}

[aria-hidden="true"] { display: none; }
[aria-hidden="false"] { display: grid; }




/* this code is not strictly necessary: just to make this demo a bit pleasant */

.overlay div {
   width: 80%;
   max-width: 650px;
   padding: 30px;
   background: rgba(255,255,255, .95);
}

.overlay {
    background:  rgba(40,40,40, .75);
}




* { box-sizing: border-box; }
button { padding: 1.5em 4em; cursor: pointer;}
pre { background: #fafafa; padding: 15px; border: 1px #ccd dashed; }
pre + p { margin: 5vh 0; }

On gists

Flexbox Solver

CSS CSS trick

solver.css #

/*

https://kentondejong.medium.com/this-css-1-liner-will-improve-your-flexbox-7e40e977ef5c

*/

.parent {
  --gap: 20px;
  --columns: 5;
  display: flex;
  gap: var(--gap);
  flex-wrap: wrap;
		
}

.child {
	
flex: 0 1 calc((100% / var(--columns)) - var(--gap) + (var(--gap) / var(--columns)));
	
}

On gists

custom css scrollbar

CSS

custom.css #

div {
	height: 300px;
	overflow-y: auto;
	
}

div::-webkit-scrollbar {
  width: 8px;
  background-color: #f5f5f5;
}

div::-webkit-scrollbar-thumb {
  background-color: #888;
  border-radius: 4px;
}

div::-webkit-scrollbar-thumb:hover {
  background-color: #555;
}

On gists

Prevent Body Scrolling on iOS

JavaScript CSS CSS trick

ios-prevent-scroll-fix.js #

const $body = document.querySelector('body');
let scrollPosition = 0;

export default {
  enable() {
    scrollPosition = window.pageYOffset;
    $body.style.overflow = 'hidden';
    $body.style.position = 'fixed';
    $body.style.top = `-${scrollPosition}px`;
    $body.style.width = '100%';
  },
  disable() {
    $body.style.removeProperty('overflow');
    $body.style.removeProperty('position');
    $body.style.removeProperty('top');
    $body.style.removeProperty('width');
    window.scrollTo(0, scrollPosition);
  }
};

On gists

Pure css paralax

CSS CSS trick

index.html #

<!-- https://codepen.io/keithclark/pen/ndEygj -->

<div id="title" class="slide header">
  <h1>Pure CSS Parallax</h1>
</div>

<div id="slide1" class="slide">
  <div class="title">
    <h1>Slide 1</h1>
    <p>Lorem ipsum dolor sit amet, in velit iudico mandamus sit, persius dolorum in per, postulant mnesarchum cu nam. Malis movet ornatus id vim, feugait detracto est ea, eam eruditi conceptam in. Ne sit explicari interesset. Labores perpetua cum at. Id viris docendi denique vim.</p>
  </div>
</div>

<div id="slide2" class="slide">
  <div class="title">
    <h1>Slide 2</h1>
    <p>Lorem ipsum dolor sit amet, in velit iudico mandamus sit, persius dolorum in per, postulant mnesarchum cu nam. Malis movet ornatus id vim, feugait detracto est ea, eam eruditi conceptam in. Ne sit explicari interesset. Labores perpetua cum at. Id viris docendi denique vim.</p>
  </div>
  <img src="https://picsum.photos/980/600">
  <img src="https://picsum.photos/960/600"> 
</div>

<div id="slide3" class="slide">
  <div class="title">
    <h1>Slide 3</h1>
    <p>Lorem ipsum dolor sit amet, in velit iudico mandamus sit, persius dolorum in per, postulant mnesarchum cu nam. Malis movet ornatus id vim, feugait detracto est ea, eam eruditi conceptam in. Ne sit explicari interesset. Labores perpetua cum at. Id viris docendi denique vim.</p>
  </div>
</div>

<div id="slide4" class="slide header">
    <h1>The End</h1>
</div>

On gists

CSS - animated gradient background

CSS CSS trick

index.html #

<!-- https://codepen.io/mitchobert/pen/ogYBLo -->

<div id="gradient">
  <div class="headline">
    <h1>GRADIENT</h1>
  </div>
</div>

On gists

Image from edge to container

Tailwind CSS CSS

index.html #

<!--
@sources
https://play.tailwindcss.com/om6YbfPx0J
https://www.setrimsmalinou.cz/
-->

<!-- FROM LEFT TO RIGHT -->
<div class="relative h-[500px] border-2 border-black">
  <!-- image -->
  <div class="absolute inset-y-0 w-1/2 bg-red-300">
    <img src="https://picsum.photos/id/237/1500/1500" class="h-full w-full object-cover object-center" alt="" />
  </div>

  <!-- container -->
  <div class="mx-auto flex h-full max-w-6xl justify-end border-2 border-green-500">
    <div class="w-1/2">Content ...</div>
  </div>
</div>

<!-- FROM RIGHT TO LEFT -->
<div class="relative h-[500px] border-2 border-black">
  <!-- image -->
  <div class="absolute inset-y-0 right-0 w-1/2 bg-red-300">
    <img src="https://picsum.photos/id/237/1500/1500" class="h-full w-full object-cover object-center" alt="" />
  </div>

  <!-- container -->
  <div class="mx-auto flex h-full max-w-6xl justify-start border-2 border-green-500">
    <div class="w-1/2">Content ...</div>
  </div>
</div>

On gists

Page without scrollbar

CSS

index.css #

html {
    scrollbar-width: none;  /* Firefox */
}
body {
    -ms-overflow-style: none;  /* IE and Edge */
}
body::-webkit-scrollbar { 
    display: none; /* Chrome, Safari, Opera */ 
}

On gists

triangles in CSS (3 ways)

CSS CSS trick

index.css #

/* https://htmixl.medium.com/how-to-create-triangles-in-css-three-easy-ways-49bd6dce7810 */

/* 1. borders */
.triangle{
 width: 0;
 height: 0;
 border-left: 150px solid red;
 border-top: 150px solid transparent;
}

/* 2. clip-path */
.triangle{
  width: 150px;
  height: 150px;
  background-color: blue;
  clip-path: polygon(0 0, 0 100%, 100% 100%);
}

/* 3. gradient */
.triangle{
  width: 150px;
  height: 150px;
  background-image: 
    linear-gradient(to top right, green 50%, transparent 0);
  background-repeat: no-repeat;
}

On gists

CSS Clamp builder (responsive fluid typography)

JavaScript CSS CSS trick

clampBuilder.js #

// https://css-tricks.com/linearly-scale-font-size-with-css-clamp-based-on-the-viewport/#for-those-who-dont-mind-that-edge-case
// https://royalfig.github.io/fluid-typography-calculator/
// https://fluid-typography.netlify.app/

function clampBuilder( minWidthPx, maxWidthPx, minFontSize, maxFontSize ) {
  const root = document.querySelector( "html" );
  const pixelsPerRem = Number( getComputedStyle( root ).fontSize.slice( 0,-2 ) );

  const minWidth = minWidthPx / pixelsPerRem;
  const maxWidth = maxWidthPx / pixelsPerRem;

  const slope = ( maxFontSize - minFontSize ) / ( maxWidth - minWidth );
  const yAxisIntersection = -minWidth * slope + minFontSize

  return `clamp( ${ minFontSize }rem, ${ yAxisIntersection }rem + ${ slope * 100 }vw, ${ maxFontSize }rem )`;
}


console.log(clampBuilder(320, 1920, 1, 3)); // "clamp( 1rem, 0.6rem + 2vw, 3rem )"