Web

Web制作

hero

シンプルで効率的なコード短縮テクニック

 

CSSは日々進化しています。

うまく使えば、便利にコードも少なく実装できますので、紹介していきます。

 

 

プロパティの省略

margin

# Before
margin: 10px 0 10px 0;

# After
margin: 10px 0;

ージンのショートハンドでは、上下と左右が同じ値の場合に省略することができます。

 

border

# Before
border-width: 1px;
border-style: solid;
border-color: #333;

# After
border: 1px solid #333;

borderプロパティで一行にまとめて指定可能です。

 

transitionの利用

# Before
.element {
  transition-property: all;
  transition-duration: 0.3s;
  transition-timing-function: ease-in-out;
}

# After
.element {
  transition: all 0.3s ease-in-out;
}

ショートハンドで簡潔にアニメーションの指定ができます。

 

 

個別のトランスフォームプロパティ

# before
transform: translate(5rem);
transform: rotate(45deg);
transform: scale(2);

# after
translate: 5rem;
rotate: 45deg;
scale: 2;

 

 

display: noneの代替としてのvisibility: hidden

表示・非表示を切り替える場合、displayの代わりにvisibilityを使うことで、スペースを保持しつつ非表示にできます。

# Before
.hidden {
  display: none;
}

# After
.hidden {
  visibility: hidden;
}

要素を一時的に非表示にしつつ、レイアウトに影響を与えない場合は、visibility: hiddenが便利です。

 

 

 CSS変数(Custom Properties)

:root {
  --main-color: #3498db;
}

h1, p {
  color: var(--main-color);
}

CSS変数は一度定義すればどこでも再利用でき、変更が容易になります。複数の箇所に同じスタイルを適用する際に非常に有効です。

 

 

calc() 関数

CSSでは、動的な計算をcalc()関数で簡単に行うことができます。

# Before
.width-half {
  width: 50%;
  padding: 10px;
}

# After
.width-half {
  width: calc(50% - 20px);
}

calc()を使うことで、パーセンテージとピクセル値を組み合わせた動的な計算が可能です。これにより、より精密なレイアウト調整ができます。

 

 

clamp()関数でレスポンシブなフォントサイズ

# Before
h1 {
  font-size: 2vw;
}
@media (min-width: 768px) {
  h1 {
    font-size: 24px;
  }
}
@media (min-width: 1200px) {
  h1 {
    font-size: 32px;
  }
}

# After
h1 {
  font-size: clamp(16px, 4vw, 32px);
}

clamp()を使うと、フォントサイズが最小値・最大値の範囲内で可変となり、デバイスに応じたレスポンシブなスタイルが簡単に実現できます。

 

 

min()・max() 関数

# Before
max-width: 400px;
width: 100%;

# After
width: min(400px, 100%);

 

 

aspect-ratio プロパティ

aspect-ratioプロパティを使用することで、画像やビデオの縦横比を簡単に指定でき、従来のように余計なpaddingやpositionプロパティを使わずに済みます。

# Before
.image-container {
  position: relative;
  padding-bottom: 56.25%; /* 16:9 ratio */
  height: 0;
}

.image-container img {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}

# After
.image-container {
  aspect-ratio: 16 / 9;
}

 

 

inset

# Before
top: 0;
bottom: 0;
left: 0;
right: 0;

# After(要素は親要素の四辺にピタリと接するようになる)
inset: 0;

insetプロパティで上下左右の位置調整を一括で指定でき、コードが短くなります。

 

is()・where()関数でセレクタの簡略化

# Before
button:hover,
button:focus {
	opacity: .5;
}

# After
button:is(:hover, :focus) {
	opacity: .5;
}

:is() は、複数のセレクタをグループ化するための疑似クラスです。このグループに含まれるいずれかの条件が真であれば、そのスタイルが適用されます。以前は :matches() と呼ばれていましたが、現在は :is() が標準です。