¿Cuál es el propósito de los puntos de interrupción definidos en `breakpoints.yml?
¿Por qué las consultas de medios se definen en breakpoints.yml y no en archivos CSS?
¿Cuál es el propósito de los puntos de interrupción definidos en `breakpoints.yml?
¿Por qué las consultas de medios se definen en breakpoints.yml y no en archivos CSS?
Respuestas:
No hay forma de usar los puntos de interrupción definidos en un archivo breakpoints.yml en CSS sin procesamiento previo o posterior. Como no utilizamos procesadores para diseñar en el núcleo, los puntos de interrupción todavía están codificados en los archivos CSS. Sin embargo, en un tema personalizado puede usar herramientas como Gulp o Grunt y, en teoría, sería posible usar la entrada breakpoints.yml para su generación de CSS.
Actualmente, breakpoints.yml es principalmente interesante para JavaScript (JS). Eche un vistazo al módulo de la barra de herramientas en el núcleo. La información del punto de interrupción se agrega al objeto JS 'drupalSettings' en 'src / Element / Toolbar.php' así:
$breakpoints = static::breakpointManager()->getBreakpointsByGroup('toolbar');
if (!empty($breakpoints)) {
$media_queries = array();
foreach ($breakpoints as $id => $breakpoint) {
$media_queries[$id] = $breakpoint->getMediaQuery();
}
$element['#attached']['drupalSettings']['toolbar']['breakpoints'] = $media_queries;
}
Luego, en JS, se lee la configuración del tiempo de ejecución como se definió anteriormente.
var options = $.extend(
{
breakpoints: {
'toolbar.narrow': '',
'toolbar.standard': '',
'toolbar.wide': ''
}
},
drupalSettings.toolbar
);
Más tarde, se agrega un detector de eventos por punto de interrupción para que se pueda hacer "algo" cuando cambia el tamaño de la pantalla.
for (var label in options.breakpoints) {
if (options.breakpoints.hasOwnProperty(label)) {
var mq = options.breakpoints[label];
var mql = Drupal.toolbar.mql[label] = window.matchMedia(mq);
mql.addListener(Drupal.toolbar.mediaQueryChangeHandler.bind(null, model, label));
}
}
En caso de cambio, se pueden realizar diferentes acciones por punto de interrupción.
Drupal.toolbar = {
mediaQueryChangeHandler: function (model, label, mql) {
switch (label) {
case 'toolbar.narrow':
model.set({
isOriented: mql.matches,
isTrayToggleVisible: false
});
break;
case 'toolbar.standard':
// Logic
break;
case 'toolbar.wide':
// Logic
break;
default:
break;
}
}
};
Nota : los ejemplos de código se toman del módulo Drupal Toolbar y se eliminan. Úselo como inspiración, no como código funcional.
Puede encontrar una buena explicación sobre el uso de JS mediaQueries en general aquí: https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Testing_media_queries