Sobes.tech
Middle

Kako ste organizovali izolaciju CSS u Vue komponentama u vašim projektima?

sobes.tech АИ

Одговор од АИ

Koristio sam nekoliko pristupa u zavisnosti od veličine projekta i zahteva:

  1. Scoped CSS: Najčešći metod u Vue. Stilovi se primenjuju samo na elemente trenutnog komponenta zahvaljujući automatskom dodavanju jedinstvenih atributa CSS selektorima i DOM elementima.

    <template>
      <div class="container">
        Zdravo, Vue!
      </div>
    </template>
    
    <style scoped>
    /* Ovaj stil će se primenjivati samo na div sa klasom container unutar ovog komponenta */
    .container {
      color: blue;
    }
    </style>
    
  2. CSS Modules: Omogućavaju kreiranje lokalnih CSS klasa koje se automatski generišu sa jedinstvenim imenima. Uvoze se kao objekat u JavaScript.

    <template>
      <div :class="$style.container">
        Zdravo, Modules!
      </div>
    </template>
    
    <style module>
    /* Klasa 'container' će imati jedinstveno ime pri build-u */
    .container {
      color: green;
    }
    </style>
    
  3. CSS-in-JS (sa bibliotekama poput Emotion ili Styled Components putem dodataka): Stilovi se pišu direktno u JavaScript/TypeScript. Obuhvataju snažnu izolaciju i dinamičke stilove, ali mogu povećati veličinu bundle-a i dodati složenost.

    // Primer u pseudokodu sa hipotetičkom bibliotekom
    import styled from 'vue-styled-components'; // Primer uvoza
    
    const StyledDiv = styled.div` // Kreiranje styled komponente
      color: purple;
    `;
    
    export default {
      components: {
        StyledDiv,
      },
      template: `<styled-div>Zdravo, CSS-in-JS!</styled-div>`,
    };
    
    
  4. Naming Conventions (BEM): Upotreba strogih pravila imenovanja klasa, poput Block-Element-Modifier. Ne obezbeđuje tehničku izolaciju sredstvima framework-a, ali poboljšava čitljivost i predvidivost.

Izbor metode zavisio je od:

  • Veličine tima.
  • Složenosti komponenti.
  • Potrebe za ponovnom upotrebom stilova.
  • Prihvaćenih standarda u projektu.

Najčešće sam koristio scoped za većinu komponenti zbog njegove jednostavnosti i efikasnosti. CSS Modules sam primenjivao za složenije slučajeve gde je bila potrebna stroža lokalizacija ili dinamički klasovi. CSS-in-JS retko, uglavnom u projektima gde je već bio u upotrebi ili je bila jasna potreba. Naming Conventions uvek su dopunjavali druge pristupe.