CSS Grid Flexbox vs CSS Grid

css-grid practice

by allen Yu

HTML

<link rel="stylesheet" href="https://cdn.rawgit.com/shunnien/css-grid25day/master/assets/style.css">
<h1>Axis Flipping!</h1>
<button onclick="flip()">Flip It</button>
<div class="flipper">
  <div class="item">1</div>
  <div class="item">2</div>
  <div class="item">3</div>
  <div class="item">4</div>
  <div class="item">5</div>
  <div class="item">6</div>
  <div class="item">7</div>
  <div class="item">8</div>
  <div class="item">9</div>
  <div class="item">10</div>
</div>
<hr>

<h1>Controls on Right!</h1>
<div class="tracks">
  <div class="track">
    <h2>The Future (Ft. The R.O.C.)</h2>
    <button>⭐</button>
    <button>❤️</button>
    <button>❌</button>
  </div>
  <div class="track">
    <h2>Bounce With Me (Ft. Jermaine Dupri & Xscape)</h2>
    <button>⭐</button>
    <button>❤️</button>
    <button>❌</button>
  </div>
  <div class="track">
    <h2>Puppy Love (Ft. Jagged Edge & Jermaine Dupri)</h2>
    <button>⭐</button>
    <button>❤️</button>
    <button>❌</button>
  </div>
  <div class="track">
    <h2>You Know Me (Ft. Da Brat & Jermaine Dupri)</h2>
    <button>⭐</button>
    <button>❤️</button>
    <button>❌</button>
  </div>
  <div class="track">
    <h2>The Dog in Me</h2>
    <button>⭐</button>
    <button>❤️</button>
    <button>❌</button>
  </div>
  <div class="track">
    <h2>Bow Wow (That's My Name) (Ft. Snoop Dogg)</h2>
    <button>⭐</button>
    <button>❤️</button>
    <button>❌</button>
  </div>
</div>
<style>


</style>
<hr>

<h1>Flex on Item!</h1>
<!-- The Longer Item in the middle -->
<div class="controls">
  <button>⏯️</button>
  <button>🐢</button>
  <button>🐰</button>
  <div class="scrubber"></div>
  <button>💬</button>
  <button>🔽</button>
</div>
<hr>

<h1>Perfectly Centered!</h1>
<!-- Perfectly Centered Multiple Elements -->
<div class="hero">
  <h2>Something Big Is Coming</h2>
  <p>Get Ready...</p>
</div>
<hr>

<h1>Self Control!</h1>
<!-- Self Contol on box Axis -->
<div class="corners">
  <div class="corner item">1</div>
  <div...

CSS

/* Axis Flipping! */

.flipper {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(50px, 1fr));
}

.flipper.flip {
  grid-template-columns: 1fr;
}

/* Controls on Right! */

.track {
  background: white;
  padding: 10px;
  border-bottom: 1px solid rgba(0, 0, 0, 0.1);
  display: grid;
  grid-template-columns: 1fr;
  grid-auto-flow: column;
}

/* Flex on Item! */

.controls {
  margin: 200px 0;
  display: grid;
  grid-template-columns: auto auto auto 1fr auto auto;
  /* display:flex; */
  align-items: center;
}

.scrubber {
  background: #BADA55;
  height: 10px;
  min-width: 100px;
  border-radius: 10px;
  /* flex: 1; */
}

/* Perfectly Centered! */

.hero {
  height: 200px;
  background: rgba(255, 255, 255, 0.2);
  /* display: grid;
            align-content: center;
            justify-items: center; */
  display: flex;
  align-items: center;
  justify-content: center;
  flex-direction: column;
}

/* Self Control! */

.corners {
  display: grid;
  height: 200px;
  width: 200px;
  border: 10px solid var(--yellow);
  grid-template: 1fr 1fr/1fr 1fr;
  align-items: end;
  justify-items: end;
}

.corner:nth-child(1),
.corner:nth-child(2) {
  align-self: start;
}

.corner:nth-child(1),
.corner:nth-child(3) {
  justify-self: start;
}

/* Stacked Layout! */

.stacked {
  display: flex;
  flex-wrap: wrap;
  justify-content: space-around;
}

.stacked>* {
  width: 30%;
  margin-bottom: 20px;
}

/* Unknown Content Size! */

.known {
  margin: 100px 0;
  display: grid;
  grid-template-columns: repeat(5, auto);
  grid-gap: 20px;
  justify-content: center;
}

/* Unknown Number of Items! */

.unknown {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(50px, 1fr));
  grid-gap: 20px;
}

/* Variable Widths on Each Row! */

.flex-container {
  display: flex;
  flex-wrap: wrap;
  border: 1px solid black;
}

.flex-container>* {
  margin: 10px;
  flex: 1;
}

JavaScript

function flip(e) {
  const flipper = document.querySelector('.flipper');
  flipper.classList.toggle('flip');
}

/* Unknown Number of Items! */
function addItem() {
  const unknown = document.querySelector('.unknown');
  unknown.innerHTML += `<div class="item">${unknown.childElementCount}</div>`;
}