Qual é o propósito dos pontos de interrupção definidos em `breakpoints.yml?
Por que as consultas de mídia são definidas em breakpoints.yml e não em arquivos CSS?
Qual é o propósito dos pontos de interrupção definidos em `breakpoints.yml?
Por que as consultas de mídia são definidas em breakpoints.yml e não em arquivos CSS?
Respostas:
Não há como usar os pontos de interrupção definidos em um arquivo breakpoints.yml no CSS sem pré ou pós-processamento. Como não usamos processadores para estilizar o núcleo, os pontos de interrupção ainda são codificados nos arquivos CSS. No entanto, em um tema personalizado, você é livre para usar ferramentas como Gulp ou Grunt e, teoricamente, seria possível usar a entrada breakpoints.yml para sua geração de CSS.
Atualmente, o breakpoints.yml é principalmente interessante para JavaScript (JS). Veja, por exemplo, o módulo Barra de ferramentas no núcleo. As informações do ponto de interrupção são adicionadas ao objeto JS 'drupalSettings' em 'src / Element / Toolbar.php' da seguinte maneira:
$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;
}
Em JS, as configurações de tempo de execução, conforme definidas acima, são lidas.
var options = $.extend(
{
breakpoints: {
'toolbar.narrow': '',
'toolbar.standard': '',
'toolbar.wide': ''
}
},
drupalSettings.toolbar
);
Posteriormente, um ouvinte de evento é adicionado por ponto de interrupção, para que 'algo' possa ser feito quando o tamanho da tela for alterado.
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));
}
}
No caso de uma mudança, diferentes ações podem ser realizadas por ponto de interrupção.
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 : os exemplos de código são retirados do módulo Drupal Toolbar e removidos. Use como inspiração, não como código funcional.
Uma boa explicação sobre o uso do JS mediaQueries em geral pode ser encontrada aqui: https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Testing_media_queries