Enfoque
Conoce las principales directrices, las estrategias y las técnicas utilizadas para crear y mantener Bootstrap para que puedas personalizarlo y ampliarlo más fácilmente.
😎 Esta traducción es parte del proyecto esdocu.com.
Si bien las páginas de inicio brindan un recorrido introductorio del proyecto y lo que ofrece, este documento se enfoca en por qué hacemos las cosas que hacemos en Bootstrap. Explica nuestra filosofía de construir en la web para que otros puedan aprender de nosotros, contribuir con nosotros y ayudarnos a mejorar.
¿Ves algo que no suena bien, o quizás se podría hacer mejor? Abre un issue: nos encantaría que lo discutamos.
Resumen
Nos sumergiremos más a fondo en cada uno de estos puntos, pero en general, esto es lo que guía nuestro enfoque.
- Los componentes deben ser responsive y mobile-first
- Los componentes deben construirse con una clase base y extenderse a través de clases modificadoras
- Los estados de los componentes deben obedecer a una escala de z-index común
- Siempre que sea posible, se prefiere una implementación de HTML y CSS sobre JavaScript
- Siempre que sea posible, se usan utilidades sobre estilos personalizados
- Siempre que sea posible, se evita aplicar requisitos HTML estrictos (selectores hijos)
Responsive
Los estilos responsive de Bootstrap están diseñados para ser responsive, un enfoque que a menudo se denomina mobile-first. Usamos este término en nuestros documentos y en gran parte estamos de acuerdo con él, pero a veces puede ser demasiado amplio. Si bien no todos los componentes deben ser completamente responsive en Bootstrap, este enfoque responsive trata de reducir las sobrescrituras de CSS al presionarlo para agregar estilos a medida que el viewport se vuelve más grande.
En Bootstrap, verás esto más claramente en nuestras media queries. En la mayoría de los casos, usamos
consultas min-width
que comienzan a aplicarse en un breakpoint específico y continúan a través de
los breakpoints más altos. Por ejemplo, un .d-none
se aplica desde min-width: 0
hasta el infinito. Por otro lado, un .d-md-none
se aplica desde el breakpoint medium y hacia
arriba.
A veces usaremos max-width
cuando la complejidad inherente de un componente lo requiere. A
veces, estas sobrescrituras son funcional y mentalmente más claras de implementar y admitir que reescribir la
funcionalidad principal de nuestros componentes. Nos esforzamos por limitar este enfoque, pero lo usaremos de
vez en cuando.
Clases
Además de nuestro Reboot, una hoja de estilo de normalización entre navegadores, todos nuestros estilos
apuntan a usar clases como selectores. Esto significa evitar los selectores de tipo (p. ej.,
input[type="text"]
) y las clases primarias extrañas (p. ej., .parent .child
) que
hacen que los estilos sean demasiado específicos para ser sobrescritos fácilmente.
Como tales, los componentes deben construirse con una clase base que albergue pares de valor de propiedad
comunes, que no deben sobrescribirse. Por ejemplo, .btn
y .btn-primary
. Usamos
.btn
para todos los estilos comunes como display
, padding
y
border-width
. Luego usamos modificadores como .btn-primary
para agregar el color,
color de fondo, color de borde, etc.
Las clases modificadoras solo deben usarse cuando hay múltiples propiedades o valores para cambiar en múltiples variantes. Los modificadores no siempre son necesarios, así que asegúrate de ahorrar líneas de código y evitar sobrescrituras innecesarias al crearlas. Buenos ejemplos de modificadores son nuestras clases de colores temáticos y variantes de tamaño.
Escalas z-index
Hay dos escalas de z-index
en Bootstrap: elementos dentro de un componente y componentes
superpuestos.
Elementos de componentes
- Algunos componentes en Bootstrap están construidos con elementos superpuestos para evitar bordes dobles
sin modificar la propiedad
border
. Por ejemplo, grupos de botones, grupos de inputs y paginación. - Estos componentes comparten una escala de
z-index
estándar de0
a3
. 0
es el predeterminado (inicial),1
es:hover
,2
es:active
/.active
, y3
es:focus
.- Este enfoque coincide con nuestras expectativas de máxima prioridad de usuario. Si un elemento está enfocado, está a la vista y a la atención del usuario. Los elementos activos son los segundos más altos porque indican estado. El desplazamiento es el tercero más alto porque indica la intención del usuario, pero se puede desplazar casi cualquier cosa.
Componentes superpuestos
Bootstrap incluye varios componentes que funcionan como una superposición de algún tipo. Esto incluye, en
orden de z-index
más alto, menús desplegables, barras de navegación fijas y pegajosas, modales,
tooltips y popovers. Estos componentes tienen su propia escala de z-index
que comienza en
1000
. Este número inicial se eligió arbitrariamente y sirve como un pequeño búfer entre nuestros
estilos y los estilos personalizados de tu proyecto.
Cada componente de superposición aumenta ligeramente su valor de z-index
de tal manera que los
principios comunes de la interfaz de usuario permiten que los elementos centrados o sobrevolados por el
usuario permanezcan a la vista en todo momento. Por ejemplo, un modal es un bloqueo de documentos (por
ejemplo, no puedes realizar ninguna otra acción excepto la acción del modal), por lo que lo colocamos encima
de nuestras barras de navegación.
Obtén más información sobre esto en nuestra página de diseño
z-index
.
HTML y CSS sobre JS
Siempre que sea posible, preferimos escribir HTML y CSS sobre JavaScript. En general, HTML y CSS son más prolíficos y accesibles para más personas de todos los niveles de experiencia. HTML y CSS también son más rápidos en tu navegador que JavaScript, y tu navegador generalmente te brinda una gran cantidad de funciones.
Este principio es nuestra API de JavaScript de
primera clase que usa atributos
data
. No necesitas escribir casi nada de JavaScript para usar nuestros complementos de
JavaScript;
en su lugar, escribe HTML. Lee más
sobre esto en nuestra página de
descripción
general de JavaScript.
Por último, nuestros estilos se basan en los comportamientos fundamentales de los elementos web comunes.
Siempre que sea posible, preferimos utilizar lo que proporciona el navegador. Por ejemplo, puedes poner una
clase .btn
en casi cualquier elemento, pero la mayoría de los elementos no proporcionan ningún
valor semántico o funcionalidad de navegador. Entonces, en su lugar, usamos <button>
s y
<a>
s.
Lo mismo ocurre con los componentes más complejos. Si bien podríamos escribir nuestro propio
complemento de validación de formularios para agregar clases a un elemento padre en función del estado de un
input, lo que nos permite diseñar el texto como rojo, preferimos usar los pseudoelementos
:valid
/:invalid
que cada navegador nos proporciona.
Utilidades
Las clases de utilidad, anteriormente helpers en Bootstrap 3, son un poderoso aliado para combatir la
sobrecarga de CSS y el bajo rendimiento de la página. Una clase de utilidad suele ser un par propiedad-valor
único e inmutable expresado como una clase (por ejemplo, .d-block
representa
display: block;
). Su atractivo principal es la velocidad de uso al escribir HTML y limitar la
cantidad de CSS personalizado que tienes que escribir.
Específicamente en lo que respecta a CSS personalizado, las utilidades pueden ayudar a combatir el aumento del tamaño del archivo al reducir los pares de propiedad-valor que se repiten con más frecuencia en clases únicas. Esto puede tener un efecto dramático a escala en tus proyectos.
HTML flexible
Si bien no siempre es posible, nos esforzamos por evitar ser demasiado dogmáticos en nuestros requisitos HTML
para los componentes. Por lo tanto, nos enfocamos en clases individuales en nuestros selectores CSS y tratamos
de evitar los selectores hijos inmediatos (>
). Esto te brinda más flexibilidad en tu
implementación y ayuda a mantener nuestro CSS más simple y menos específico.
Convenciones de código
Guía de código (del cocreador de Bootstrap, @mdo) documenta cómo escribimos nuestro HTML y CSS en Bootstrap. Especifica pautas para formato general, valores predeterminados de sentido común, órdenes de propiedades y atributos, y más.
Usamos Stylelint para hacer cumplir estos estándares y más en nuestro Sass/CSS. Nuestra configuración personalizada de Stylelint es de código abierto y está disponible para que otros la usen y amplíen.
Usamos vnu-jar para aplicar HTML estándar y semántico, así como para detectar errores comunes.
😎 Esta traducción es parte del proyecto esdocu.com.