Come rendere i moduli scalabili in un elemento div

1

Mi interessa creare moduli web incapsulati da un elemento div in modo che, semplicemente ridimensionando il div, tutto in quel div si riduca proporzionalmente alle dimensioni di quel div (font, sotto-div, ecc. ).

Un paio di settimane fa, ho creato questo modulo che si adatta abbastanza bene mentre ridimensiona la pagina. Sono stato in grado di raggiungere questo risultato dimensionando le cose con le unità di dimensionamento relative del viewport CSS .

Queste unità viewport funzionano bene se il tuo modulo ha le dimensioni dell'intero viewport (la dimensione dell'intera pagina), ma queste stesse unità non funzionano se il tuo "viewport" previsto sarà solo un div che è solo una parte di un'intera pagina web e una div che intendi riutilizzare in più pagine con "dintorni" diversi.

Concettualmente, l'idea è di essere in grado di creare moduli riutilizzabili che possano essere posizionati ovunque all'interno di qualsiasi pagina web e semplicemente impostando la dimensione del contenitore div, tutti i contenuti si ridimensionano proporzionalmente in base alla dimensione del div.

Voglio creare moduli che possono essere consumati da qualsiasi webmaster, e tutto ciò che il webmaster deve fare è impostare l'altezza, la larghezza e la posizione del modulo, e il modulo si adatta perfettamente alle dimensioni desiderate del webmaster.

Qualunque consiglio su questo concetto sarebbe apprezzato.

    
posta Lonnie Best 01.02.2015 - 05:38
fonte

2 risposte

0

François REMY ha scritto:

Ciao Lonnie,

Penso che il tuo dolore sia valido e importante.

Sarai felice di sapere che al momento ci sono proposte per viewport locali simili a moduli simili a ciò che desideri. Un esempio (preso a caso, ovviamente) sarebbe la mia proposta link (che dovrebbe probabilmente menzionare che le unità "vh" e "vw" si associano alla larghezza / altezza dell'elemento che è impostato come una finestra di visualizzazione locale, per i suoi discendenti) ma alcuni articoli migliori sono stati scritti anche da persone a Google l'anno scorso sul motivo per cui vogliamo qualcosa lungo quelle linee.

Il problema a questo punto è anche alquanto discusso nel gruppo della comunità Responsive sotto forma di ": min-width /: max-width" per il quale credo che il requisito e i problemi da risolvere siano vicini se non identici a quelli di fronte a un'implementazione in grado di soddisfare le tue esigenze.

Penso che sia bello che tu abbia fornito un promemoria ai webdevelopers del css group che si preoccupano abbastanza del problema per trovare la loro strada fino a qui per esprimere la loro opinione, questo è prezioso, quindi grazie!

Cordiali saluti, François

Qui sopra c'è una risposta ricevuta dalla mailing list w3.org, al mio messaggio qui sotto:

Nei CSS, ci deve essere un modo per specificare l'elemento specifico su cui basare le unità di dimensionamento relative. Le unità di dimensionamento relative non devono necessariamente essere basate sulla dimensione dell'elemento genitore, o sulla dimensione della pagina o sul viewport. Un modulo web può avere numerosi elementi figlio di varie profondità, e l'elemento su cui vuoi basare le relative unità di dimensionamento potrebbe non essere un antenato immediato!

Ad esempio, per favore guarda la domanda che ho postato qui: Come rendere i moduli scalabili in un elemento div

Mi piace il modo in cui le unità viewport ti consentono di ridimensionare il contenuto di una pagina. io fatto questa pagina, e sono felice che anche i caratteri si stiano adattando bene su di esso: link

Tuttavia, il mio obiettivo finale è di essere in grado di creare moduli web compositi (che sono incapsulati da un elemento div, per esempio) che possono essere inseriti in qualsiasi pagina web in modo che un webmaster possa ridimensionare i contenuti di quell'elemento semplicemente impostando l'altezza e la larghezza del div. Per fare questo, ho davvero bisogno che le unità di dimensionamento relative siano basate su un particolare elemento, quello che incapsula il mio intero modulo web.

In una certa misura, questo può essere ottenuto con% unità, ma non per dimensione carattere! Non ho trovato un'unità relativa alla dimensione del carattere che può essere basata sulla dimensione di un elemento genitore. Se un webmaster ha inserito il mio modulo self-made nella sua pagina, le mie dimensioni dei caratteri si baseranno su questa dimensione della sua pagina e NON si baseranno sulla dimensione che ha deciso di impostare il mio modulo.

Le unità Viewport funzionano alla grande se il modulo web è la dimensione del viewport; il ridimensionamento della finestra rende anche i caratteri ridimensionabili in proporzione.

Il web sta diventando molto vicino a offrire gli stessi moduli scalabili di tecnologie non web come QML e WPF.

Se i CSS possono offrire un modo per un webmaster di "specificare un particolare elemento su cui le unità di dimensionamento relative devono essere basate", ciò sembra perfetto.

Ancora una volta, un modulo web può avere numerosi elementi figlio di varie profondità, e l'elemento su cui vuoi basare le relative unità di dimensionamento potrebbe non essere un antenato immediato e potrebbe non essere la pagina come intero. Per un modulo web, vuoi che la dimensione relativa dei caratteri e tutto il resto sia basata sulla dimensione del modulo (non sulla pagina nel suo insieme).

I CSS dovrebbero essere così flessibili, che posso creare un modulo indipendente e puoi inserirlo nella tua pagina e impostando semplicemente i miei moduli in altezza, larghezza e posizione: tutto ciò che è contenuto in questo modulo si adatta in modo proporzionale al tuo ambiente. Se rendi le dimensioni del mio modulo super piccole, i caratteri dovrebbero essere super piccoli, non basati sulla pagina nel suo insieme.

Lonnie Best

    
risposta data 06.02.2015 - 21:54
fonte
1
  1. Imposta lo stile del div in posizione: assoluto o posizione: relativo.
  2. Imposta i figli del div in posizione: assoluta.
  3. Posiziona i bambini utilizzando% dimensioni.

Esempio ( link ):

<div style="position: relative; border: 5px solid red; width: 100px; height: 100px">
    <div style="position: absolute; top: 0; bottom: 0; width: 50%; background-color: blue"></div>
    <div style="position: absolute; top: 0; bottom: 0; width: 50%; right: 0; background-color: green"></div>
</div>
    
risposta data 01.02.2015 - 21:36
fonte

Leggi altre domande sui tag