Vue - работа с динамическими и inline стилями

Vue - работа с динамическими и inline стилями

Vue 3 представляет новый функционал, который  о, v-bind(), для использования стилей без тега style. Мы используем эту функцию для создания односторонней ссылки
между локальными данными и значением CSS.

Под капотом движок Vue использует пользовательские свойства CSS (или CSS переменные) для вычисления динамических стилей, полученных от v-bind(). для
каждых v-bind(), он генерирует хешированное пользовательское свойство (с префиксом --)
и добавляет его в корневой элемент компонента. Все пользовательские свойства добавлены как встроенные статические стили и будут обновляться всякий раз, когда меняется связанное  локальный значение данных меняется.
Например, у нас есть компонент, который выводит заголовок и содержит локальное свойство данных, headingStyles. Объект данных headingStyles содержит несколько параметров, таких как marginTop, textAlign и color, указывающих соответствующие свойства CSS:

<template>
  <h1>{{ title }}</h1>
</template>
<script>
  export default {
    data() {
      return {
        title: 'Binding with v-bind example',
        headingStyles: {
          marginTop: '10px',
          textAlign: 'center',
          color: '#4fc08d',
       }
     }
   }
 }
</script>

После того, как мы установили стили в секции data, мы можем использовать внутри секции style эти стили:

<style>
h1 {
  margin-top: v-bind(headingStyles.marginTop);
  text-align: v-bind(headingStyles.textAlign);
  color: v-bind(headingStyles.color);
}
</style>

Теперь, если вы посмотрите на результат, вы увидите, что стили применились. А если посмотреть инструментами разработчика, мы увидим, каким образом добавлены инлайновые стили:

<h1 style="--60540b83-headingStyles\.marginTop: 10px; --60540b83-headingStyles\.textAlign: center; --60540b83-headingStyles\.color: #4fc08d;">Binding with v-bind example</h1>