bone.css

17 de enero de 2024 Project thumbnail

Un boilerplate de CSS para mis proyectos personales. Ha sido creado para mis propias necesidades, pero quién sabe, puede serte útil.

GitHub

Tabla de Contenidos

Lo básico

El layout se basa en un contenedor de 500px de ancho, inspirado en theminimalists.com. Lo especial es que no uso márgenes ni displays para centrar el contenido, sino ✨padding✨.

/* Con un ancho de viewport de 1000px,           */
/* y un ancho máximo de 500px,                   */
/* y un margen de 20px,                          */
/* obtenemos max((1000px-500px)/2, 20px) = 250px */

.boned {

    --max-width: 500px;
    --margin: 20px;

    width: 100%;
    padding: 0 max(
        calc((100% - var(--max-width)) / 2),
        var(--margin)
    );

}

Usando padding para centrar

Porque estoy loco. Y porque quería una forma de centrar un elemento sin depender de un contenedor padre. Quería centrar el elemento en sí mismo. Lo llamé boned porque es como un hueso, el hueso del viewport.

Puedes aplicar “bone” a un elemento con la clase .boned. El header, main y footer del body están afectados por esta clase por defecto.

Colores

Hay 3 tipos de colores: white, gray y black. La intensidad se indica con darker, dark, light o lighter.

--white#ffffff
--white-dark#f5f5f5
--white-darker#e3e3e3
--gray-lighter#cdcdcd
--gray-light#b7b7b7
--gray#808080
--gray-dark#414141
--gray-darker#2f2f2f
--black-lighter#222222
--black-light#1a1a1a
--black#111111

Los colores cambiarán automáticamente dependiendo de la preferencia del sistema del usuario, pero si quieres forzar un tema necesitas añadir las clases .theme-dark o .theme-light.

Este es un ejemplo sencillo de implementación de cambio de temas con JavaScript:

const activeThemeDark = () => {
	document.body.classList.remove("theme-light");
	document.body.classList.add("theme-dark");
};

const activeThemeLight = () => {
	document.body.classList.remove("theme-dark");
	document.body.classList.add("theme-light");
};

const activeThemePrefersColorScheme = () => {
	document.body.classList.remove("theme-dark");
	document.body.classList.remove("theme-light");
};

Código

Los snippets de código se muestran con una fuente monoespaciada y un fondo simple, como los elementos <code>.

const password = "1234";
<pre>
    <code>
        const <var>password</var> = "1234";
    </code>
</pre>

Botones

Simple. Uno está activo, el otro está deshabilitado.

<button>Activo</button>
<button disabled>Deshabiltado</button>

Es fácil añadir iconos y emojis

</button>
    <span>📸🤨</span>
    Seguro?
</button>
<button>
    Pedir
    <span>🍕</span>
</button>

Listas

Lista sin ordenar

<ul>
    <li>Zapabunga!</li>
    <li>Petrocombo!</li>
    <li>Treparamas!</li>
    <li>Catalejo!</li>
    <li>Mozirrante!</li>
</ul>

Tablas

Una tabla con filas y columnas

Nombre Animal Acciones
Pelusilla Cat ✏️
Bolo Dog ✏️
Trocito Rabbit ✏️
Cosita Ferret ✏️
Juan Guinea Pig ✏️
<div class="bordered">
    <table>
        <thead>
            <tr>
                <th>Nombre</th>
                <th>Animal</th>
                <th style="text-align: end;">Acciones</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>Pelusilla</td>
                <td>Cat</td>
                <td style="text-align: end;">
                    <a href="#tablas">✏️</a>
                    <a href="#tablas">❌</a>
                </td>
            </tr>
            <tr>
                <td>Bolo</td>
                <td>Dog</td>
                <td style="text-align: end;">
                    <a href="#tablas">✏️</a>
                    <a href="#tablas">❌</a>
                </td>
            </tr>
            <tr>
                <td>Trocito</td>
                <td>Rabbit</td>
                <td style="text-align: end;">
                    <a href="#tablas">✏️</a>
                    <a href="#tablas">❌</a>
                </td>
            </tr>
            <tr>
                <td>Cosita</td>
                <td>Ferret</td>
                <td style="text-align: end;">
                    <a href="#tablas">✏️</a>
                    <a href="#tablas">❌</a>
                </td>
            </tr>
            <tr>
                <td>Juan</td>
                <td>Guinea Pig</td>
                <td style="text-align: end;">
                    <a href="#tablas">✏️</a>
                    <a href="#tablas">❌</a>
                </td>
            </tr>
        </tbody>
    </table>
</div>

Grids

Los uso con frecuencia

Gato mono Gato mono Gato mono Gato mono Gato mono Gato mono
<div class="grid">
    <img src="/assets/images/cat-1.webp" alt="cute cat" />
    <img src="/assets/images/cat-2.webp" alt="cute cat" />
    <img src="/assets/images/cat-3.webp" alt="cute cat" />
    <img src="/assets/images/cat-4.webp" alt="cute cat" />
    <img src="/assets/images/cat-5.webp" alt="cute cat" />
    <img src="/assets/images/cat-6.webp" alt="cute cat" />
</div>

Formularios

<form onsubmit="return false;">
    <label for="text">
        Comida favorita
        <input
            type="text"
            name="text"
            placeholder="Galletas, bananas, arena..."
        />
    </label>
    <label for="textarea">
        Demuestra que no eres un gato
        <textarea
            name="textarea"
            cols="30"
            rows="10"
            placeholder="Miau miau miau">
        </textarea>
    </label>
</form>

Clases extra

Algunas clases útiles.

.boned

Para centrar el elemento en el centro de la página usando padding. Header, main y footer están boned por defecto.

.full

Aplica un ancho del 100% al elemento. Útil para botones, tablas o elementos con display flex.

.center

Mi forma favorita de centrar elementos. Aplica display: flex, justify-content: center y align-items: center.

.note

Útil para advertencias, errores o mensajes importantes.

.bordered

Útil para aplicar un borde estándar.