Skip to content

Instantly share code, notes, and snippets.

@dehsilvadeveloper
Last active January 9, 2025 12:01
Show Gist options
  • Save dehsilvadeveloper/fb5ed20bb09eec2dee75735792e3406c to your computer and use it in GitHub Desktop.
Save dehsilvadeveloper/fb5ed20bb09eec2dee75735792e3406c to your computer and use it in GitHub Desktop.
Simple admin panel page using HTML and CSS (Flexbox, mobile-first approach and responsivity)

Simple admin panel page using HTML and CSS (Flexbox, mobile-first approach and responsivity)

Painel admin simples feito com HTML e CSS (Flexbox, abordagem mobile-first e responsividade)

HTML for admin panel layout with header, footer and left sidebar

Obs: Icons of Font Awesome library/toolkit were also used.

[index.html]

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Application Name</title>

    <link rel="stylesheet" href="https://use.fontawesome.com/releases/v6.5.0/css/all.css">
    <link rel="stylesheet" href="reset.css" />
    <link rel="stylesheet" href="index.css />
  </head>
  <body>
    
    <div class="two-column-layout">
      <header>
        <div class="box-brand">
          <h2 class="brand">Application Name</h2>
        </div>

        <nav class="secondary-navigation">
          <ul>
              <li><a href="#">Link A</a></li>
              <li><a href="#">Link B</a></li>
              <li><a href="#">Link C</a></li>
          </ul>
        </nav>
      </header>

      <aside class="left-sidebar">
        <nav class="navigation">
          <ul>
              <li class="active"><a href="#">Link 1</a></li>
              <li><a href="#">Link 2</a></li>
              <li><a href="#">Link 3</a></li>
          </ul>
        </nav>
      </aside>
  
      <main>
        <div class="card-deck">
          <div class="card">
            <div class="card-body">
              <div class="card-content">
                <h2>R$ 56.956,00</h2>

                Total Income
              </div>
              <div class="card-icon-space bg-green">
                <i class="fa-solid fa-hand-holding-dollar"></i>
              </div>
            </div>
          </div>

          <div class="card">
            <div class="card-body">
              <div class="card-content">
                <h2>R$ 20.320,00</h2>

                Total Expense
              </div>
              <div class="card-icon-space bg-red">
                <i class="fa-solid fa-money-bill-transfer"></i>
              </div>
            </div>
          </div>

          <div class="card">
            <div class="card-body">
              <div class="card-content">
                <h2>R$ 36.636,00</h2>

                Balance
              </div>
              <div class="card-icon-space bg-blue">
                <i class="fa-solid fa-sack-dollar"></i>
              </div>
            </div>
          </div>
        </div>

        <div class="container">
          <h2>Welcome</h2>

          <p>
            Content comes here.
          </p>
        </div>

        <div class="container">
          <div class="section-box">
            <div class="section-box-header">
              <h2>Lorem Ipsum</h2>
            </div>

            <div class="section-box-body">
              <p>
                Lorem ipsum <b>dolor</b> sit amet, consectetur adipiscing elit. Morbi non erat auctor, viverra nisi id, interdum sapien. Suspendisse aliquam consequat tellus, a rhoncus metus vestibulum nec. Aenean fermentum vel odio id tempus. Sed tempor velit vel volutpat dapibus. Integer enim metus, convallis a finibus id, interdum consequat mi. Duis et vulputate augue. Ut pulvinar luctus ante non fermentum. Aenean dapibus, urna eget pretium accumsan, enim nunc congue nisl, et euismod mauris neque in ipsum. In hac habitasse platea dictumst. Vestibulum justo erat, tincidunt ac nibh in, porttitor tempor sapien.
              </p>

              <p>
                Maecenas consequat vitae ligula eu vehicula. Quisque vehicula lobortis tellus, in elementum dui luctus vel. Donec maximus velit nibh, vel pretium erat bibendum porta. Sed et nulla ex. Suspendisse interdum quam ligula, eu fermentum dui egestas sed. Donec quis nibh dapibus, lobortis mauris quis, consectetur neque. Pellentesque a mauris purus. Ut ut mi vitae nunc scelerisque vehicula. Interdum et malesuada fames ac ante ipsum primis in.
              </p>
            </div>
          </div>
        </div>

        <div class="container">
          <h2>Table Sample</h2>

          <div class="table-wrapper">
            <table class="table" role="table" summary="Financial recent activity report table">
              <caption>Financial Recent Activity</caption>
              <thead>
                <tr>
                  <th scope="col">Type</th>
                  <th scope="col">Title</th>
                  <th scope="col">Category</th>
                  <th scope="col">Amount (R$)</th>
                  <th scope="col">Date</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td><span class="badge-pill badge-danger">Expense</span></td>
                  <td>Personal mobile phone</td>
                  <td>Phone</td>
                  <td>200,00</td>
                  <td>2024-02-14</td>
                </tr>
                <tr>
                  <td><span class="badge-pill badge-danger">Expense</span></td>
                  <td>Monthly supply</td>
                  <td>Food</td>
                  <td>200,00</td>
                  <td>2024-02-06</td>
                </tr>
                <tr>
                  <td><span class="badge-pill badge-success">Income</span></td>
                  <td>Fev 2024</td>
                  <td>Salary</td>
                  <td>1.500,00</td>
                  <td>2024-02-05</td>
                </tr>
              </tbody>
              <tfoot>
                <tr>
                  <td>Type</td>
                  <td>Title</td>
                  <td>Category</td>
                  <td>Amount (R$)</td>
                  <td>Date</td>
                </tr>
              </tfoot>
            </table>
          </div>
        </div>
      </main>

      <footer>
        <span>
          Copyright &copy; 2024
        </span>
      </footer>
    </div>

  </body>
</html>

Reseting default style of browsers

[reset.css]

/* RESET CSS */

/*
  1. Use a more-intuitive box-sizing model.
*/
*,
*::before,
*::after {
  box-sizing: border-box;
}

/*
  2. Remove default margin and padding
*/
* {
  margin: 0;
  padding: 0;
}

/*
  Typographic tweaks!
  3. Add accessible line-height
  4. Improve text rendering
*/
body {
  line-height: 1.5;
  text-rendering: optimizeLegibility;
  -moz-osxfont-smoothing: grayscale;
  -webkit-font-smoothing: antialiased;
}

/*
  5. Improve media defaults
*/
img,
picture,
video,
canvas,
svg {
  display: block;
  max-width: 100%;
}

/*
  6. Remove built-in form typography styles
*/
input,
button,
textarea,
select {
  font: inherit;
}

/*
  7. Avoid text overflows
*/
p,
h1,
h2,
h3,
h4,
h5,
h6 {
  overflow-wrap: break-word;
}

/*
  8. Create a root stacking context
*/
#root,
#__next {
  isolation: isolate;
}

Styles of the layout

[index.css]

@charset "utf-8";

@import url(http://fonts.googleapis.com/css?family=Merriweather+Sans:200,300,400);
@import url(http://fonts.googleapis.com/css?family=Roboto:100,200,300,400);

:root {
  --base-background-color: #20b2aa;
  --base-color: #333333;
  --base-font-family: 'Roboto', sans-serif;
  --base-font-size: 16px;
  --header-background-color: #4a5d23;
  --header-color: #ffffff;
  --header-link-color: #ffffff;
  --header-link-hover-color: #abc4aa;
  --header-navigation-font-size: 1em;
  --brand-color: #ffffff;
  --brand-first-letter-color: #4fffb0;
  --brand-font-family: "Merriweather Sans", sans-serif;
  --brand-font-size: 1.5em;
  --sidebar-background-color: #6b8e23;
  --sidebar-color: #ffffff;
  --sidebar-link-color: #ffffff;
  --sidebar-navigation-font-size: 1em;
  --sidebar-navigation-hover-color: #e0e0e058;
  --main-background-color: #ebe9e9;
  --footer-background-color: #4a5d23;
  --footer-color: #ffffff;
  --container-background-color: #ffffff;
  --card-background-color: #ffffff;
  --table-thead-background-color: #355e3b;
  --table-thead-color: #ffffff;
  --table-tbody-tr-hover-background-color: #dadd98;
  --table-tbody-background-color: #f2f2f2;
  --table-tbody-tr-even-background-color: #ffffff;
  --table-tfoot-background-color: #355e3b;
  --table-tfoot-color: #ffffff;
}

html, body {
  height: 100dvh;
  margin: 0;
  padding: 0;
}

body {
  background-color: var(--base-background-color);
  color: var(--base-color);
  font-family: var(--base-font-family);
  font-size: var(--base-font-size);
  display: flex;
  flex-direction: column;
}

a {
  text-decoration: none;
}

p {
  font-size: var(--base-font-size);

  &:not(:last-child)  {
    margin-bottom: 30px;
  }
}

.two-column-layout {
  display: flex;
  flex-direction: column;
  height: 100vh;
}

header {
  align-items: center;
  background-color: var(--header-background-color);
  color: var(--header-color);
  display: flex;
  flex-direction: column;
  justify-content: space-between;
  padding: 0.625em;
}

header h1 {
  color: var(--header-color);
  font-size: 2em;
}

header .box-brand {
  color: var(--brand-color);
  flex-basis: auto;
  margin-bottom: 10px;
}

header .box-brand .brand {
  color: var(--brand-color);
  font-size: var(--brand-font-size);
  font-family: var(--brand-font-family);
}

header .box-brand .brand::first-letter{
  font-size: 2rem;
  color: var(--brand-first-letter-color);
}

header nav.secondary-navigation a {
  color: var(--header-link-color);
  font-weight: bold;
}

header nav.secondary-navigation a:hover {
  color: var(--header-link-hover-color);
}

header nav.secondary-navigation ul {
  display: flex;
  list-style: none;
}

header nav.secondary-navigation ul li {
  font-size: var(--header-navigation-font-size);
  margin-left: 20px;
}

aside.left-sidebar {
  background-color: var(--sidebar-background-color);
  color: var(--sidebar-color);
  padding: 0.625em;
}

aside.left-sidebar a {
  color: var(--sidebar-link-color);
  font-weight: bold;
}

aside.left-sidebar nav.navigation ul {
  display: flex;
  flex-direction: column;
  list-style: none;
}

aside.left-sidebar nav.navigation ul li {
  border-radius: 8px;
  color: var(--sidebar-color);
  font-size: var(--sidebar-navigation-font-size);
  margin: 0.375em 0;
  padding: 1em;
  transition: all 0.5s ease-in-out;
}

aside.left-sidebar nav.navigation ul li:hover,
aside.left-sidebar nav.navigation ul li.active {
  background-color: var(--sidebar-navigation-hover-color);
  cursor: pointer;
}

main {
  background-color: var(--main-background-color);
  flex-basis: auto;
  flex-grow: 1;
  flex-shrink: 0;
  padding: 0.875em;
}

footer {
  align-items: center;
  background-color: var(--footer-background-color);
  display: flex;
  color: var(--footer-color);
  justify-content: center;
  padding: 0.125em 0.625em 0.125em 0.625em;
}

.sideways-text {
  writing-mode: vertical-lr;
  transform: rotate(180deg);
}

.container {
  background-color: var(--container-background-color);
  border-radius: 0.625em;
  padding: 1em;

  &:not(:last-child)  {
    margin-bottom: 1.25em;
  }
}

.section-box {
  align-items: start;
  display: flex;
  flex-direction: row;
  min-width: 0;
  text-align: justify;
  word-wrap: break-word;
}

.section-box .section-box-header h2 {
  writing-mode: vertical-lr;
  transform: rotate(180deg);
}

.section-box .section-box-body {
  margin-left: 10px;
}

.table-wrapper {
  width: 100%;
  overflow-x: auto;
}

.table {
  border-collapse: collapse;
  width: 100%;
}

.table thead {
  background-color: var(--table-thead-background-color);
  color: var(--table-thead-color);
}

.table thead th {
  padding: 0.938em;
  text-align: left;
}

.table tbody {
  background-color: var(--table-tbody-background-color);
}

.table tbody tr:nth-child(even) {
  background-color: var(--table-tbody-tr-even-background-color);
}

.table tbody tr:hover {
  cursor: pointer;
  background-color: var(--table-tbody-tr-hover-background-color);
}

.table tbody td {
  color: #333333;
  font-size: 0.875em;
  padding: 0.938em;
}

.table tfoot {
  background-color: var(--table-tfoot-background-color);
  color: var(--table-tfoot-color);
  font-weight: bold;
}

.table tfoot tr td {
  padding: 0.938em;
}

.card-deck {
  display: flex;
  flex-direction: column;
  flex-wrap: wrap;
  gap: 1.25em;
  justify-content: space-between;
  margin-bottom: 1.25em;
}

.card-deck .card {
  background-color: var(--card-background-color);
  border-radius: 0.625em;
  flex: 1 0 0%;
  min-width: 0;
  word-wrap: break-word;
}

.card-deck .card .card-body {
  align-items: center;
  display: flex;
  flex-direction: row;
  justify-content: space-between;
}

.card-deck .card .card-body .card-content {
  padding: 1em;
}

.card-deck .card .card-body .card-icon-space {
  font-size: 1.75em;
  min-width: 90px;
  opacity: 0.6;
  padding: 1em;
  text-align: center;
}

.bg-blue {
  background-color: #2980b9;
  color: #ffffff;
}

.bg-dark-blue {
  background-color: #34495e;
  color: #ffffff;
}

.bg-green {
  background-color: #16a085;
  color: #ffffff;
}

.bg-light-gray {
  background-color: #bdc3c7;
  color: #333333;
}

.bg-orange {
  background-color: #f39c12;
  color: #ffffff;
}

.bg-purple {
  background-color: #8e44ad;
  color: #ffffff;
}

.bg-red {
  background-color: #e74c3c;
  color: #ffffff;
}

.badge-pill {
  border-radius: 10rem;
  font-weight: bolder;
  padding-bottom: 0.4em;
  padding-left: 0.6em;
  padding-right: 0.6em;
  padding-top: 0.4em;
  text-align: center;
  vertical-align: baseline;
  white-space: nowrap;
}

.badge-danger {
  background-color: #dc3545;
  color: #ffffff;
}

.badge-dark {
  background-color: #343a40;
  color: #ffffff;
}

.badge-info {
  background-color: #17a2b8;
  color: #ffffff;
}

.badge-light {
  background-color: #f8f9fa;
  color: #212529;
}

.badge-primary {
  background-color: #007bff;
  color: #ffffff;
}

.badge-secondary {
  background-color: #6c757d;
  color: #ffffff;
}

.badge-success {
  background-color: #28a745;
  color: #ffffff;
}

.badge-warning {
  background-color: #ffc107;
  color: #212529;
}

/* Fallback for the cases when DVH is not available */
@supports not (height: 100dvh) {
  body {
    height: 100vh;
  }
}

/* Medium devices and up (landscape tablets, laptops, desktops, large laptops and etc) */
@media all and (min-width: 768px) {
  .two-column-layout {
    flex-direction: row;
    flex-wrap: wrap;
  }

  header, 
  footer {
    width: 100vw;
  }

  header {
    flex-direction: row;
  }

  header .box-brand {
    flex-basis: 13em;
    margin-bottom: 0;
    padding: 0;
    text-align: center;
  }

  main {
    min-height: 80vh;
    order: 2;
    width: 14em;
  }

  aside.left-sidebar {
    flex: 0 0 15em; /* Refer to "flex-grow", "flex-shrink" and "flex-basis", in this exact order */
    order: 1;
  }

  footer {
    order: 3;
  }

  .card-deck {
    flex-direction: row;
    flex-wrap: wrap;
    gap: 2.5em;
  }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment