【Sass】便利! extendでwidthを指定するとレスポンシブで小さな幸せが訪れる

width: 100%;

最近はヘッダーやフッターの幅が100%のサイトが主流になりました。

そのため、全体を囲むwrapperを固定幅にすることができなくなり、
要素ごと、個別に幅を指定することが多くなりましたよね。

例えば以下のような構成のページです。

161014
この場合ヘッダーとフッターは100%ですが、その中に入る文字などはmainの幅、
つまり白線の内側に収めなくてはなりません。

すると以下のようなマークアップになります。

HTML

  1. <div id="wrap">
  2.  
  3. <heade>
  4. <div class="inner"></div>
  5. </heade>
  6. <main></main>
  7. <footer>
  8. <div class="inner"></div>
  9. </footer>
  10. </div>

SCSS

  1. header {
  2. width: 100%;
  3. .inner {
  4. width: 1200px; //幅を指定
  5. }
  6. }
  7.  
  8. main {
  9. width: 1200px; //幅を指定
  10. }
  11.  
  12. footer {
  13. width: 100%;
  14. .inner {
  15. width: 1200px; //幅を指定
  16. }
  17. }
  18.  
  19. @media screen and (max-width: 768px) {
  20.  
  21. header {
  22. .inner {
  23. width: auto; //幅を指定
  24. }
  25. }
  26.  
  27. main {
  28. width: auto; //幅を指定
  29. }
  30.  
  31. footer {
  32. .inner {
  33. width: auto; //幅を指定
  34. }
  35. }
  36.  
  37. }

上の例では幅を指定する箇所がレスポンシブを含め、計6回出てきました。
これだと修正が入ったときにはひとつずつ、手作業で数値を直していくことになります。
大変面倒ですよね。

カンマ区切りで繋げて書いてもよいのですが、
同じセレクタがあちこちに散らばると、それはそれで管理が面倒になります。

extendで対応!

個別に値を指定するのは面倒なので、extendで対応しました。
以下のようにシンプルになりました。

SCSS

  1. %siteWidth {
  2. width: 1200px;
  3. }
  4.  
  5. header {
  6. width: 100%;
  7. .inner {
  8. @extend %siteWidth;
  9. }
  10. }
  11.  
  12. main {
  13. @extend %siteWidth;
  14. }
  15.  
  16. footer {
  17. width: 100%;
  18. .inner {
  19. @extend %siteWidth;
  20. }
  21. }
  22.  
  23. @media screen and (max-width: 768px) {
  24.  
  25. %siteWidth {
  26. width: auto;
  27. }
  28.  
  29. }

数値が変わっても一番上の %siteWidth を変更するだけで済みます。

レスポンシブ時には %siteWidth に auto を指定すれば良いだけなので、
個別に設定する必要がなくなり、ちょっと幸せになります。

Writer

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Contact

ご提案依頼、ご相談、お見積もりなど
お気軽にお問合わせください。

03-6403-3259

平日 10:00~19:00

「Web制作について」とお伝え頂ければ
担当者に取次させていただきます。

Mailform

contact@trym.jp
でも受け付けております。