Wie strukturiere ich ein CSS File?

Posted . Visible to the public.

Aufbau eines CSS Files

Wieso?

Eine einheitliche und saubere Struktur bei einem CSS File, sowie auch bei jedem anderen Code ist kein Hexenwerk, vereinfacht jedem das Lesen und sorgt für eine deutlich bessere Übersicht.
Bei Webseiten kann man sich zwischen dem Mobile- oder Desktop-First Ansatz entscheiden. Hier wird der Mobile-First Ansatz verwendet.

Struktur

  • Definition der lokalen Variablen (in dem größten umschließenden "Container")

    .container:local {
      --headline-font-size: 16px;
      --headline-line-height: 24px;
      
      --text-font-size: 14px;
      --text-line-height: 20px;
    }
    
  • Definition der Media Query(s) mit entsprechenden Änderungen der Variablen. Die Breakpoints müssen hierbei durch das jeweilige Design selbst festgelegt werden. (768px ~ normales iPad)

    @media(min-width: 768px) {
      .container:local {
        --headline-font-size: 20px;
        --headline-line-height: 28px;
      
        --text-font-size: 16px;
        --text-line-height: 24px;
      }
    }
    
  • Definition der Selektoren

    .headline {
      font-size: var(--headline-font-size);
      line-height: var(--headline-line-height);
      color: blue
    }
    
    .text {
      font-size: var(--text-font-size);
      line-height: var(--text-line-height);
      color: cornflowerBlue
    }
    

    (Don't judge the color, I'm not a designer)

Welche Werte sind Variablen und welche nicht?

Als Variablen werden nur Werte definiert, die sich auch tatsächlich mit der Bildschirmgröße ändern. (Wie es der Name auch schon sagt, lat. variabilis -> "sich verändern")
Im obigen Beispiel ändert sich der Wert der Farbe nicht mit der Textgröße, somit braucht er auch nicht lokal definiert werden.

Beispiel

JS/TS:

export const Example = ({headline, description}: exampleProps) => (
  <div className="container">
    <p className="headline">{headline}</p>
    <p className="description">{description}</p>
  </div>
)

interface exampleProps {
  headline: string
  description: string
}

CSS:

.container:local {
  --container-padding: 40px 16px 32px;

  --headline-font-size: 24px;
  --headline-line-height: 32px;

  --description-margin-top: 20px;
  --description-font-size: 16px;
  --description-line-height: 24px;
}

@media(min-width: 768px) {
  .container:local {
    --container-padding: 64px 0 32px;

    --headline-font-size: 32px;
    --headline-line-height: 40px;

    --description-margin-top: 24px;
    --description-font-size: 20px;
    --description-line-height: 32px;
  }
}

.container {
  display: flex;
  flex-direction: column;
  align-items: center;
  padding: var(--container-padding);
}

.headline {
  font-size: var(--headline-font-size);
  line-height: var(--headline-line-height);
}

.description {
  font-size: var(--description-font-size);
  line-height: var(--description-line-height);
  max-width: 736px;
  text-align: center;
  margin-top: var(--description-margin-top);
}
Frederic Forster
Last edit
Frederic Forster
Posted by Frederic Forster to Appdafuer (2018-10-04 07:46)