Come impostare dimensioni percentuali corrette?

Mirk0

Nuovo Utente
18 Ago 2021
4
0
1
Ciao,
ho controllato gli altri post sul forum e non ho trovato risposta, comunque se sapete che c'è già la risposta da qualche parte lasciate pure il link.
Sto imparando da meno di una settimana html e css (scusate quindi se la domanda è banale) e c'è un problema che permane ad ogni pagina che cerco di creare. Io vorrei dare agli elementi (ai div ad esempio) delle dimensioni in percentuale rispetto al 'parent', se però c'è del padding la percentuale che io do non si riferisce più al parent ma alla dimensione del parent effettivamente disponibile (quindi sottraendo il padding).
C'è un modo per indicare le dimensioni senza dover stare a calcolare a mano lo spazio disponibile?
Faccio un esempio pratico per chiarire.
Su un sito di 'esercizi' di html ho iniziato a creare questa pagina
SharedScreenshot.jpg

I bottoni in questo caso hanno una larghezza del 100%, ma io vorrei che se indicassi width:100% dovrebbe ingrandirli fino a coprire ogni singola 'card', mentre ad esempio indicando 33% dovrebbe diventare 1/3 della larghezza totale di una singola card.
Vi lascio la struttura dell'html e il css (il bottone è a linea 148)
HTML:
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Challenge 2</title>
    <link rel="stylesheet" href="styles/styles.css">
    <style>@import url('https://fonts.googleapis.com/css2?family=Big+Shoulders+Display:wght@700&family=Lexend+Deca&display=swap');</style>
</head>
<body>
    <div class="container">
        <div class="card-1">
            <img class="icon" src="3-column-preview-card-component-main/images/icon-sedans.svg" alt="Sedans icon">
            <h1>Sedans</h1>
            <p>Choose a sedan for its affordability and excellent fuel economy. Ideal for cruising in the city
                or on your next road trip.</p>
            <button type="button"> Learn More </button>
        </div>
        <div class="card-2">
            <img class="icon" src="3-column-preview-card-component-main/images/icon-suvs.svg" alt="SUV icon">
            <h1>SUVs</h1>
            <p>Take an SUV for its spacious interior, power, and versatility. Perfect for your next family vacation
                and off-road adventures.</p>
            <button type="button"> Learn More </button>
        </div>
        <div class="card-3">
            <img class="icon" src="3-column-preview-card-component-main/images/icon-luxury.svg" alt="Luxury icon">
            <h1>Luxury</h1>
            <p>Cruise in the best car brands without the bloated prices. Enjoy the enhanced comfort of a luxury
                rental and arrive in style.</p>
            <button type="button"> Learn More </button>
        </div>
    </div>
</body>
</html>
CSS:
/*
    vw = 375px
    card w = 325px
    card h = 440px
    margin-top viewport = 88px
    margin lr viewport = 24px
    iconw / card = 20%
    padding inside card 45px 47px
    button 146 x 48 px
*/
* {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
}

body {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  -webkit-box-pack: center;
      -ms-flex-pack: center;
          justify-content: center;
  font-size: 15px;
  font-family: 'Lexend Deca', sans-serif;
}

.container {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  border-radius: 1rem;
  margin: 88px 6.4vw;
}

[class^=card] {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-orient: vertical;
  -webkit-box-direction: normal;
      -ms-flex-direction: column;
          flex-direction: column;
  padding: 10.23% 14.46%;
}

.card-1 {
  color: #e38826;
  background-color: #e38826;
  border-radius: 0.5rem 0.5rem 0px 0px;
}

.card-2 {
  color: #006970;
  background-color: #006970;
}

.card-3 {
  color: #004241;
  background-color: #004241;
  border-radius: 0px 0px 0.5rem 0.5rem;
}

.icon {
  max-width: 20%;
}

h1 {
  font-family: "Big Shoulders Display", sans-serif;
  text-transform: uppercase;
  font-stretch: ultra-condensed;
  color: #f2f2f2;
}

p {
  color: rgba(255, 255, 255, 0.75);
  line-height: 170%;
}

button {
  width: 44.92%;
  height: 48px;
  border: none;
  border-radius: 24px;
  background-color: #f2f2f2;
  font-family: inherit;
  color: inherit;
}

/*
1440 x 800 px
margins 171 260 129 260
card 920 x 500
padding card 46 46 46 46
button 146 x 48
*/
@media (min-width: 1000px) {
  body {
    -ms-flex-line-pack: center;
        align-content: center;
    -webkit-box-pack: center;
        -ms-flex-pack: center;
            justify-content: center;
  }
  .container {
    -webkit-box-orient: horizontal;
    -webkit-box-direction: normal;
        -ms-flex-direction: row;
            flex-direction: row;
    width: 63.89vw;
    height: 62.5vh;
    margin: 19vh 18.056vw 16.125vh 18.056vw;
  }
  [class^=card] {
    -webkit-box-align: start;
        -ms-flex-align: start;
            align-items: flex-start;
    padding: 9.2% 5%;
    -webkit-box-pack: space-evenly;
        -ms-flex-pack: space-evenly;
            justify-content: space-evenly;
  }
  .card-1 {
    color: #e38826;
    background-color: #e38826;
    border-radius: 0.5rem 0rem 0rem 0.5rem;
  }
  .card-2 {
    color: #006970;
    background-color: #006970;
  }
  .card-3 {
    color: #004241;
    background-color: #004241;
    border-radius: 0px 0.5rem 0.5rem 0rem;
  }
  .icon {
    max-width: 100%;
  }
  button {
    width: 100%;
  }
}
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
Ciao Mirk0,

In questo momento i bottoni sono all'interno dei div="card-..." quindi per loro il 100% è corretto stanno occupato tutto il contenitore.

Una possibile soluzione sarebbe andare ad azzerare il padding laterale [class^=card] in questo modo vai a sfruttare tutto il div, i bottoni occuperanno il 100% come hai intenzione di fare.

Poi per fare un lavoro più pulito all'interno del div="card" andrai a creare un sotto contenitore <div> che includerà immagine, h1 e paragrafo a cui andrai a dare i tuo padding per allinearlo al centro come avevi in precedenza.


Fammi sapere

Ciao
Elia
 

Mirk0

Nuovo Utente
18 Ago 2021
4
0
1
Ho trovato una soluzione che mi permette di indicare le percentuali rispetto all'elemento parent senza fare calcoli. Ho eliminato tutti i padding dalla classe .card e ho aggiunto i margini ai child di .card in questo modo il calcolo percentuale viene fatto comunque sulla larghezza totale del genitore, e il posizionamento è assicurato dai margini. Non ho aggiunto un altro div perchè non è stato necessario almeno per quello che serviva a me.
 

bubino8

Utente Attivo
28 Apr 2017
360
20
28
31
BZ
benissimo,

l'importante è risolvere ed arrivarci con le proprie competenze e sempre una soddisfazione.

Buon lavoro ;)
 
Discussioni simili
Autore Titolo Forum Risposte Data
K impostare dimensioni HTML e CSS 0
S impostare un testo e una img nella stessa riga con jsPDF Javascript 0
K Impostare scala di proporzione (Indesign) Webdesign e Grafica 0
S Impostare attributo "onclick" Javascript 5
G Impostare suggerimenti campo text di un form Javascript 2
K [MySQL] Impostare Database MySQL 2
Tommy03 Variabile PHP per impostare una proprietà CSS PHP 2
Cosina [PHP] Impostare colore singolo elemento in fwrite PHP 2
P impostare due Vlan su router - dhcp su seconda sottorete e statico su prima Reti LAN e Wireless 0
G [HTML] Impostare dimensione immagini in un div HTML e CSS 2
D Consiglio su come impostare IP statico Reti LAN e Wireless 0
G [PHP] composer: impostare l'autoloading più facilmente PHP 0
A [Javascript] Impostare immagine sfondo da checkbox, sito web Javascript 1
Trapano [PHP] come impostare un if else PHP 10
M [Photoshop] impossibile impostare Profilo colori Photoshop 1
booklisa [PHP] Impostare constanti nelle url PHP 7
ANDREA20 [PHP] Non riesco ad impostare reset password invio via email PHP 6
S impostare colore sfondo di ogni cella di una datagridview Visual Basic 1
A impostare una query con operatori condizionali MySQL 1
LuigiDonato Come Impostare Tabelle MySQL 2
R Problema impostare valore textbox MS Access 0
D Select concatenate impostare di default dato memorizzato Javascript 4
M Consiglio su come impostare intervista conoscitiva con cliente per sito ad un gruppo musicale. Discussioni Varie 3
M Impostare sfondo Sviluppo app per Android 1
F [RISOLTO]js function per impostare minimo totale Javascript 8
Emix [RISOLTO]Impostare focus su textbox dopo foreach jQuery 16
A impostare la posizione iniziale di un blocco Javascript 0
giancadeejay Impostare tempo per vedere un immagine nell'array. Javascript 2
A hover impostare bordo HTML e CSS 9
B Impostare cartella temporaea immagine Javascript 1
B Impostare permessi su XAMPP Apache 0
N Impostare il tempo jQuery 5
T Impostare un controllo da database, di dati immessi in un form asp Classic ASP 6
T impostare il controllo dei dati immessi dagli utenti su form asp Classic ASP 8
G Come impostare il formato data per mysql MySQL 11
nim Impostare gli area tag HTML e CSS 3
S Come posso impostare a grandi linee questa tabella? PHP 8
P impostare e salvare impaginazione sito PHP 0
A Impostare tabelle per forum e codice php PHP 6
S Come impostare campi non obbligatori php PHP 5
SolidSnake4 impostare htaccess su aruba Hosting 1
A impostare un immagine con css HTML e CSS 17
H Creare una pagina che si collega a keepvid. come impostare il form? HTML e CSS 3
B Impostare un DIV in primo piano e un'altro DIV in secondo piano HTML e CSS 2
B impostare media player 11 Windows e Software 3
B impostare una pagina coi css HTML e CSS 1
G chido aiuto per impostare rete wifi Reti LAN e Wireless 0
S [VB.NET 2005 Express] Impostare una variabile Programmazione 0
Y impostare excel PHP 0
S impostare la index page HTML e CSS 3

Discussioni simili