Usando unità relative invece di px seguendo i principi di DRY

2

Sono relativamente nuovo nello sviluppo web, ma cerco sempre di trovare il modo migliore e rendere il mio codice pulito anche da CSS e HTML. Quindi ho iniziato a esplorare le migliori pratiche.

Innanzitutto, iniziamo con em e rem . Oggigiorno la maggior parte dei siti utilizza ancora pixel anziché unità relative. Funziona correttamente, i telefoni cellulari possono ridimensionare i pixel ai pixel reali in base alla densità e ad altri fattori.
Innanzitutto i pixel sono unità statiche. E la maggior parte dei siti non viene ridimensionata quando le dimensioni dei caratteri cambiano nelle impostazioni del browser.
Personalmente ho trovato em e rem utili per il layout di pagina modulare.
Ogni modulo di livello superiore ha dimensioni di carattere specificate in unità rem , ma quasi tutte le dimensioni di elementi figli sono specificate in unità em .
Ecco un piccolo esempio

  #home {
  font-size: 1.5rem;

}
.overlay-intro {
  display: table;
}
   .intro {
      padding: 1em 1em;
      display: table-cell;
      text-align: center;
      vertical-align: middle;
    }
    .intro .highlighted-title {
      color: #FFC107;
    }
    .intro h1 {
      margin-bottom: 0.2em;
      font-size: 3.5em;
    }
    .intro .firtst-title-part {
      color: #52b3d9;
    }
    .intro .second-title-part {
      color: #68c3a3;
    }
    .intro .code-char {
      font-size: 1.3em;
      color: #68c3a3;
    }
    .intro p {
      font-size: 1.3em;
      color: #f7f7f7;
      margin-bottom: 2em;
    }
    .intro .primary-color-title {
      color: #52b3d9;
    }
    .intro-sub {
      color: #fff;
      font-size: 1.5em;
      margin-bottom: 1em;
    }

Sto usando unità relative quasi ovunque anche per impostare altezza e larghezza

.social-icons a i {
  position: relative;
  color: #fff;
  font-size: 1.2em;
  margin: 0 7px;
  line-height: @socialIconSize;
  text-align: center;
  width: @socialIconSize;
  height: @socialIconSize;
}

E penso che forse sia troppo?

E HTML

<!-- Intro Section -->
<section id="home">
<div class="overlay-intro">
   <div class="intro">
    <div class="intro-sub">
    </div>
    <div class="intro-title">
      <h1></h1>
    </div>
    <div class="intro-description">
      <p></p>
    </div>
    <div class="social-icons">
      <ul class="list-inline">
        <li><a href="#"><i class="fa fa-github"></i></a></li>
        <li><a href="#"><i class="fa fa-linkedin"></i></a></li>
      </ul>
    </div> <!-- /.social-icons -->
  </div>
</div>
</section>

Come puoi vedere tutto è specificato in em solo root div #home ha font-size in rem .

Quando ha senso?

@media only screen and (max-width : 768px) {
    #home {
        font-size : 1.4rem;
    }
}

Ho bisogno di cambiare solo una proprietà della classe per rendere intero modulo (#home) per cambiare la dimensione dei suoi componenti e funziona piuttosto bene, in caso di pixel ho dovuto scavalcare molte proprietà, ma nel caso delle unità relative crea una sorta di relazione tra i blocchi all'interno del modulo.

D'altra parte, da DRY, OOCSS, BEM, questo approccio viola la maggior parte delle regole importanti come styles separation from content , rare using of location-dependent styles , avoid nesting , using single class for common properties e altre.

Ma nel mio caso ho violato la maggior parte di queste regole, perché i miei stili css dipendono in qualche modo dalla struttura html, perché ho usato unità relative, e se applicate alcuni di questi stili a un altro elemento all'interno di un altro modulo (root container) con dimensione del carattere diversa, non otterrò il risultato desiderato.
Quindi nel mio esempio la maggior parte delle classi non è assolutamente inutilizzabile, ovviamente posso usare LESS e mixin e aggiungere specifici mixin dove ne ho bisogno, ma alla fine verrà convertito in semplici vecchi CSS.

Aiutatemi a trovare il modo giusto per seguire, dovrei sbarazzarmi delle unità relative a causa di DRY, OOCSS, BEM ... o non seguire affatto questi approcci e lasciare così com'è? Forse sto usando le unità relative in modo errato o usandole troppo spesso, e dovrebbero essere usate solo con classi specifiche per la dimensione del font, non per impostare la larghezza e l'altezza degli elementi? Qualsiasi aiuto è molto apprezzato.

    
posta CROSP 31.07.2016 - 16:03
fonte

1 risposta

1

Lo stai pensando troppo.

Quando si utilizzano le unità relative, è necessario chiedersi: "relativo a cosa?" Nel caso di rem , l'unità è relativa alla dimensione del carattere di <html> elemento. Nel caso di em , l'unità è relativa alla dimensione del carattere dell'elemento attualmente in stile. In entrambi i casi, la dimensione del carattere del padre diretto è irrilevante, il che significa che un elemento come:

span.highlight {
    font-size: 2rem;
    padding: .5em;
}

apparirà lo stesso ogni volta che si trova nella pagina, sarebbe in un titolo, in un piè di pagina o in un elenco ordinato. A differenza di quanto affermato nella tua domanda, il codice è perfettamente riutilizzabile; mentre lo si utilizza su una pagina diversa e in un contesto diverso potrebbe portare a una visualizzazione diversa, questo è semplicemente il modo in cui i CSS funzionano; se hai bisogno di un layout perfetto per i pixel, devi inserire il contenuto in un documento PDF, non in una pagina HTML.

When does this make sense ?

@media only screen and (max-width : 768px) {
    #home {
        font-size : 1.4rem;
    }
}

Anche se rem / em viene utilizzato in modo coerente, le query multimediali basate sulla larghezza della pagina hanno senso anche se è necessario che il layout sia reattivo. Non si tratta di zoom e ridimensionamento, si tratta di visualizzare informazioni diverse o di visualizzare le stesse informazioni in modo diverso in base alla larghezza della pagina. Un layout ampio può visualizzare tre o più colonne; un layout ristretto non sarà nemmeno in grado di mostrare due colonne affiancate pur rimanendo utilizzabile.

    
risposta data 24.12.2016 - 20:28
fonte

Leggi altre domande sui tag