<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ホームページ制作 マークアップ | 東京のホームページ制作・Web制作会社 フライング・ハイ・ワークス</title>
	<atom:link href="https://www.flying-h.co.jp/media/category/website/markup/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.flying-h.co.jp/media</link>
	<description>東京のホームページ制作・Web制作会社 フライング・ハイ・ワークス</description>
	<lastBuildDate>Tue, 16 Sep 2025 22:43:35 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://www.flying-h.co.jp/media/wp-content/uploads/2018/10/cropped-logo-32x32.png</url>
	<title>ホームページ制作 マークアップ | 東京のホームページ制作・Web制作会社 フライング・ハイ・ワークス</title>
	<link>https://www.flying-h.co.jp/media</link>
	<width>32</width>
	<height>32</height>
</image> 
<atom:link rel="hub" href="https://pubsubhubbub.appspot.com"/><atom:link rel="hub" href="https://pubsubhubbub.superfeedr.com"/><atom:link rel="hub" href="https://websubhub.com/hub"/>	<item>
		<title>Nuxt3でuseAsyncDataを自動的に再フェッチさせる</title>
		<link>https://www.flying-h.co.jp/media/2025/08/28/nuxt3-use-async-data/</link>
		
		<dc:creator><![CDATA[y_arai]]></dc:creator>
		<pubDate>Thu, 28 Aug 2025 01:13:32 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">https://www.flying-h.co.jp/media/?p=10880</guid>

					<description><![CDATA[<p>環境 課題 動的ページのパンくずリストを各ページのslugなどをキーにしてAPIからデータを取得、それを基に生成するようなやり方で実装していました。これに、「ページ遷移時にちゃんと切り替わってほしい」「SSGビルドした後 [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2025/08/28/nuxt3-use-async-data/">Nuxt3でuseAsyncDataを自動的に再フェッチさせる</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<h2 class="wp-block-heading">環境</h2>



<ul class="wp-block-list">
<li>Nuxt3（3.17.4）</li>



<li>TypeScript</li>



<li>SSG</li>
</ul>



<h2 class="wp-block-heading">課題</h2>



<p>動的ページのパンくずリストを各ページのslugなどをキーにしてAPIからデータを取得、それを基に生成するようなやり方で実装していました。これに、「ページ遷移時にちゃんと切り替わってほしい」「SSGビルドした後はAPIリクエストが飛ばないようにしたい」という要件があったのですが、、<img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f975.png" alt="🥵" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-lang="TypeScript"><code>const { data: breadCrumbs } = await useAsyncData(
  &#39;breadcrumbs&#39;,
  async () =&gt; await getBreadCrumbList(),
);

watch(
  () =&gt; route.path,
  async ()=&gt; {
    breadCrumbs.value = await getBreadCrumbList();
  },
</code></pre></div>



<p>脳直でルートをwatchしてました。良い子は真似しないでください。<br>これだと、SSGビルド後もページ遷移時にAPIリクエストが飛んでしまい、よくありません<img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f644.png" alt="🙄" class="wp-smiley" style="height: 1em; max-height: 1em;" /> watchはクライアントサイドで実行されるので当たり前ですよねえ。。。。。</p>



<h2 class="wp-block-heading">解決策</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-ts" data-lang="TypeScript"><code>const { data: breadCrumbs } = await useAsyncData(
  () =&gt; `breadcrumbs-${route.fullPath}`,
  () =&gt; getBreadCrumbList(),
);</code></pre></div>



<p>キーを動的にしたことで、ルートが変わると自動的にデータが再取得されるようになりました<img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f44f.png" alt="👏" class="wp-smiley" style="height: 1em; max-height: 1em;" /><br>SSGビルド後はビルド時のキャッシュが使われるため、実行時に新たなAPIリクエストは発生しません<img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f973.png" alt="🥳" class="wp-smiley" style="height: 1em; max-height: 1em;" /></p>



<h2 class="wp-block-heading">参考</h2>



<p>ちゃんと公式のドキュメントに目を通しましょう…（自戒）<br><a href="https://nuxt.com/docs/3.x/api/composables/use-async-data#reactive-keys" target="_blank" rel="noopener" title="useAsyncData · Nuxt Composables v3">https://nuxt.com/docs/3.x/api/composables/use-async-data#reactive-keys</a></p><p>The post <a href="https://www.flying-h.co.jp/media/2025/08/28/nuxt3-use-async-data/">Nuxt3でuseAsyncDataを自動的に再フェッチさせる</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scss/flocssで自作ユーティリティー color / background-color編</title>
		<link>https://www.flying-h.co.jp/media/2024/10/20/scss-utility-background-color/</link>
		
		<dc:creator><![CDATA[松田治人]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 07:55:54 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=10058</guid>

					<description><![CDATA[<p>u-bg-grayやu-c-primaryなど「u-c」及び「u-bg」の接頭辞がついた、ユーティリティーを作成します フォルダ構成やutilityの適用順などはflocssを基準にしています 社内のコーディング共通フォ [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-background-color/">Scss/flocssで自作ユーティリティー color / background-color編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>u-bg-grayやu-c-primaryなど「u-c」及び「u-bg」の接頭辞がついた、ユーティリティーを作成します</p>



<p>フォルダ構成やutilityの適用順などはflocssを基準にしています</p>



<p>社内のコーディング共通フォーマットとして少しずつ独自の改良をしてきた設定です</p>



<p>下記もあわせてご覧ください</p>



<ul class="wp-block-list">
<li><a href="/media/2024/10/20/scss-utility-margin-padding/" title="">Scss/floccsで自作ユーティリティー margin / padding編</a></li>



<li><a href="/media/2024/10/20/scss-utility-display-gap/" title="Scssで自作ユーティリティー display / gap編">Scss/floccsで自作ユーティリティー display / gap編</a></li>



<li><a href="/media/2024/10/20/scss-utility-font-size-weight/" title="Scssで自作ユーティリティー font-size / font-weight編">Scss/floccsで自作ユーティリティー font-size / font-weight編</a></li>



<li><a href="/media/2024/10/20/scss-utility-border/" title="Scssで自作ユーティリティー border編">Scss/floccsで自作ユーティリティー border編</a></li>



<li><a href="/media/2024/10/20/scss-utility-width/" title="Scssで自作ユーティリティー width編">Scss/floccsで自作ユーティリティー width編</a></li>



<li>Scss/floccsで自作ユーティリティー color / background-color編</li>
</ul>



<h2 class="wp-block-heading">ゴール</h2>



<ul class="wp-block-list">
<li>カラー名で設定できること</li>
</ul>



<h2 class="wp-block-heading">前提</h2>



<h4 class="wp-block-heading">foundation/variable</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$colors: (
  primary: #F48C40,
  danger: #E88E7D,
  info: #00B187,
  secondary: #E88E7D,
  success: #00B187,
  warning: #ffc107,
  black: #000000,
  white: #ffffff,
  gray: #CCCCCC,
);</code></pre></div>



<h2 class="wp-block-heading">使用法</h2>



<h4 class="wp-block-heading">color設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-c-{$colors}</code></pre></div>



<h4 class="wp-block-heading">background-color設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-bg-{$colors}</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{$colors}は、上記前提を参照</p>



<h2 class="wp-block-heading">使用例</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-b-primary u-bg-gray u-c-primary u-mt-50 u-mx-auto u-w-80p u-py-40&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>他のユーティリティーと組み合わせ上記のようなclassを設定すると下記のようになります。上記classは視認性のため、abc順で記載しています</p>



<ul class="wp-block-list">
<li>u-b-primary：div要素が1pxの#F48C40のボーダーで囲まれる</li>



<li>u-bg-gray：background-colorが#CCCCCC</li>



<li>u-c-primary：div要素内のテキストの色が#F48C40</li>



<li>u-mt-50：margin-topが5rem</li>



<li>u-mx-auto：margin-inlineがauto</li>



<li>u-w-80p：widthが80%</li>



<li>u-py-40：padding-blockが4rem</li>
</ul>



<h2 class="wp-block-heading">最終形</h2>



<p>上記の前提は、各環境にあわせ別ファイルとして振り分け、下記ファイルで読み込んでください</p>



<h3 class="wp-block-heading">color設定</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Color
// -----------------------------------------------------------------
.u-c {
  @each $key, $color in $colors {
    &-#{&quot;&quot;+$key} {
      color: $color !important;
    }
  }
}</code></pre></div>



<h3 class="wp-block-heading">background-color設定</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Background Color
// -----------------------------------------------------------------
.u-bg {
  @each $key, $color in $colors {
    &-#{&quot;&quot;+$key} {
      background-color: $color !important;
    }
  }
}
</code></pre></div>



<h2 class="wp-block-heading">解説</h2>



<p>今回の設定はそれほど複雑ではないので、公開のみとさせていただきます</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>以上でcolor及びbackground-colorのユーティリティーの完成となります</p>



<p>全設定が吐き出されてしまうと膨大な量になってしまいますが、弊社では、vite＋@fullhuman/postcss-purgecssなどを使って、余計なclassは入らないようにしていますので、そういった工夫も必要になるかと思います</p>



<p>コーディングの省力化に貢献できれば幸いです</p>


<div data-post-id="7460" class="insert-page insert-page-7460 ">
<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img fetchpriority="high" decoding="async" width="500" height="500" src="/media/wp-content/uploads/2023/07/IMG_8326.png" alt="" class="wp-image-7461 size-full" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326.png 500w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-300x300.png 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-120x120.png 120w" sizes="(max-width: 500px) 100vw, 500px" /></figure><div class="wp-block-media-text__content">
<p>文責：<a href="https://www.flying-h.co.jp/" target="_blank" rel="noreferrer noopener">フライング・ハイ・ワークス</a>代表 松田 治人（まつだ はるひと）<br>会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによる東京でWebシステムの制作やホームページ制作をしています。<br>エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。</p>
</div></div>
</div>

<div data-post-id="6328" class="insert-page insert-page-6328 ">
<h2 class="wp-block-heading">フライング・ハイ・ワークスの紹介</h2>



<p class="has-small-font-size"><a href="https://www.flying-h.co.jp/" target="_blank" rel="noopener" title="フライング・ハイ・ワークス">フライング・ハイ・ワークス</a>は、東京のホームページ制作・Web制作会社・Webシステム制作会社です。東京都及びその近郊（首都圏）を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース（レスポンシブ対応）で制作します。</p>



<h4 class="wp-block-heading">実績</h4>



<p class="has-small-font-size">デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。</p>



<p class="has-small-font-size">また、SEOやランディングページ（LP）、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。</p>



<p class="has-small-font-size">500点以上の<a href="https://www.flying-h.co.jp/works" target="_blank" rel="noopener" title="フライング・ハイ・ワークスの制作実績">フライング・ハイ・ワークスの制作実績</a>ページをご覧ください。</p>
</div><p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-background-color/">Scss/flocssで自作ユーティリティー color / background-color編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scss/flocssで自作ユーティリティー width編</title>
		<link>https://www.flying-h.co.jp/media/2024/10/20/scss-utility-width/</link>
		
		<dc:creator><![CDATA[松田治人]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 07:48:11 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=10051</guid>

					<description><![CDATA[<p>u-w-fullやu-w-50pなど「u-w」の接頭辞がついた、ユーティリティーを作成します フォルダ構成やutilityの適用順などはflocssを基準にしています 社内のコーディング共通フォーマットとして少しずつ独自 [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-width/">Scss/flocssで自作ユーティリティー width編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>u-w-fullやu-w-50pなど「u-w」の接頭辞がついた、ユーティリティーを作成します</p>



<p>フォルダ構成やutilityの適用順などはflocssを基準にしています</p>



<p>社内のコーディング共通フォーマットとして少しずつ独自の改良をしてきた設定です</p>



<p>下記もあわせてご覧ください</p>



<ul class="wp-block-list">
<li><a href="/media/2024/10/20/scss-utility-margin-padding/" title="">Scss/floccsで自作ユーティリティー margin / padding編</a></li>



<li><a href="/media/2024/10/20/scss-utility-display-gap/" title="Scssで自作ユーティリティー display / gap編">Scss/floccsで自作ユーティリティー display / gap編</a></li>



<li><a href="/media/2024/10/20/scss-utility-font-size-weight/" title="Scssで自作ユーティリティー font-size / font-weight編">Scss/floccsで自作ユーティリティー font-size / font-weight編</a></li>



<li><a href="/media/2024/10/20/scss-utility-border/" title="Scssで自作ユーティリティー border編">Scss/floccsで自作ユーティリティー border編</a></li>



<li>Scss/floccsで自作ユーティリティー width編</li>



<li><a href="/media/2024/10/20/scss-utility-background-color/" title="Scssで自作ユーティリティー color / backgroun編">Scss/floccsで自作ユーティリティー color / background-color編</a></li>
</ul>



<h2 class="wp-block-heading">ゴール</h2>



<ul class="wp-block-list">
<li>media queryのサイズによる階層的な適用が確実にされること</li>



<li>オリジナル名称の設定を作成すること</li>



<li>100% / fit-content設定ができること</li>



<li>ピクセル単位で設定ができること</li>



<li>％で設定ができること
<ul class="wp-block-list">
<li></li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">前提</h2>



<h4 class="wp-block-heading">foundation/variable</h4>



<p>使用しないbreak pointを入れておくと無駄な設定ができてしまいますので、注意してください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;

$widths: (
  sm: (100, 98, 96),
  md: (150, 148, 146),
  lg: (200, 198, 196),
);</code></pre></div>



<h4 class="wp-block-heading">foundation/mixin</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;
@use &#39;sass:math&#39;;

@function Rem($size) {
  @return math.div($size, 10) + rem;
}

@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">使用法</h2>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-w-{$widths}</code></pre></div>



<h4 class="wp-block-heading">100%設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-w-full
.u-w-{$break-points}-full</code></pre></div>



<h4 class="wp-block-heading">fit-content設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-w-fit
.u-w-{$break-points}-fit</code></pre></div>



<h4 class="wp-block-heading">ピクセル設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-w-{数値}
.u-w-{$break-points}-{数値}</code></pre></div>



<h4 class="wp-block-heading">%設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-w-{%数値}p
.u-w-{$break-points}-{%数値}p</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{数値} … 0~1000</p>



<p>{%数値} … 1～99</p>



<p>{$widths}は、上記前提を参照</p>



<h2 class="wp-block-heading">使用例</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-w-50p u-w-lg-80p u-w-md-full&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：widthが50%</li>



<li>821～1024px：widthが80%</li>



<li>820px以下：widthが100%</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;button type=&quot;button&quot; class=&quot;u-w-sm&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：widthが10rem</li>



<li>821～1024px：widthが9.8rem</li>



<li>820px以下：widthが9.6rem</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$widths: (
  sm: (100, 98, 96),
  md: (150, 148, 146),
  lg: (200, 198, 196),
);</code></pre></div>



<p>$widthsの設定は、この名称は自由に作成できるため、例えば、button-submitやbutton-returnなどの設定を作成することで、複数の幅設定も作成できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;button type=&quot;button&quot; class=&quot;u-w-sm u-w-md-full&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>break pointのmdだけ100％にしたい場合は、試していませんが、上記で書き順的には行けると思います</p>



<h2 class="wp-block-heading">最終形</h2>



<p>上記の前提は、各環境にあわせ別ファイルとして振り分け、下記ファイルで読み込んでください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

.u-w {
  @each $breakpoint, $query in $break-points {

    // $widthsのkey名で設定
    @each $name, $values in $widths {
      $num: index(map.keys($break-points), $breakpoint);
      &-#{$name} {
        width: #{Rem(nth($values, $num))} !important;
      }
    }

    // 100% / fit
    @include mq($breakpoint) {
      @if $breakpoint==&#39;all&#39; {
        &-full {
          width: 100% !important;
        }
        &-fit {
          width: fit-content !important;
        }
      } @else {
        &-#{$breakpoint}-full {
          width: 100% !important;
        }
        &-#{$breakpoint}-fit {
          width: fit-content !important;
        }
      }
    }

    // 0～100rem
    @for $i from 0 through 1000 {
      @if $breakpoint==&#39;all&#39; {
        &-#{$i} {
          width: Rem($i) !important;
        }
      } @else {
        &-#{$breakpoint}-#{$i} {
          width: Rem($i) !important;
        }
      }
    }

    // 1～99%
    @for $i from 1 through 99 {
      @if $breakpoint==&#39;all&#39; {
        &-#{$i+&quot;p&quot;} {
          width: #{$i+&quot;%&quot;} !important;
        }
      } @else {
        &-#{$breakpoint}-#{$i+&quot;p&quot;} {
          width: #{$i+&quot;%&quot;} !important;
        }
      }
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">解説</h2>



<p>上記最終系を一つずつ見ていきます。</p>



<h3 class="wp-block-heading">ループ設定</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;</code></pre></div>



<p>上記$break-pointsをループして展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-w {
  @each $breakpoint, $query in $break-points {
・・・
}</code></pre></div>



<p>展開されるイメージは下記の通りです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-w {
 // all
 // lg
　@media &#39;screen and (max-width: 1024px)&#39; {
 }
 // md
　@media &#39;screen and (max-width: 820px)&#39; {
 }
}</code></pre></div>



<p>最初の$breakpointは「all」となりますが、下記mixinでは、allの場合は、特に処理を行っていませんので空になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<p>ここでのポイントは、「$break-points」を大きいサイズから設定していことです</p>



<h2 class="wp-block-heading">詳細クラスの設定</h2>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<p>配列「$font-sizes」を展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$widths: (
  sm: (100, 98, 96),
  md: (150, 148, 146),
  lg: (200, 198, 196),
);</code></pre></div>



<p>$widthsにある各変数のカッコ内の数字は、$break-pointsの数と同じ数設定しています</p>



<p>したがって、ここは、左から「all」「lg」「md」のpxサイズを数値のみで設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-w {
  @each $breakpoint, $query in $break-points {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    @each $name, $values in $widths {
      $num: index(map.keys($break-points), $breakpoint);
      &-#{$name} {
        width: #{Rem(nth($values, $num))} !important;
      }
    }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $name, $values in $widths {</code></pre></div>



<p>$widthsをeach文で展開していますが、ここでは、最初は「$name」に「sm」が、「$values」には「(100, 98, 96)」が入ることになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$num: index(map.keys($break-points), $breakpoint);</code></pre></div>



<p>map.keysで$break-pointsのkeyだけの配列を作成しています。結果は「all, lg, md」となります</p>



<p>そしてindex関数で、「all, lg, md」の中でall（二つ目のループで最初の$breakpointは「all」）の位置を取得しています。ここでは「1」が$numとして設定されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>&-#{$name} {</code></pre></div>



<p>「&amp;-#{$name} {」は、$marginsの最初のキーのsmを使用して「&amp;-sm {」となり、結果として「.u-w-sm」が作成されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>width: #{Rem(nth($values, $num))} !important;</code></pre></div>



<p>「nth($values, $num)」では、nth関数で、$values、つまり「(14, 13, 12)」のうち、$numの値の順番（最初は「1」）にある値を取得し、Rem関数でremの値に変換しています</p>



<p>結果として「width: 20rem !important;」という記述が作成されます</p>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-w-sm {
 width: 10rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-w-sm {
  width: 9.8rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-w-sm {
  width: 9.6rem !important;
 }
}
・・・</code></pre></div>



<h3 class="wp-block-heading">100% / fit-content 設定</h3>



<p>したがって、ここは、左から「all」「lg」「md」のpxサイズを数値のみで設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-w {
  @each $breakpoint, $query in $break-points {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    @include mq($breakpoint) {
      @if $breakpoint==&#39;all&#39; {
        &-full {
          width: 100% !important;
        }
        &-fit {
          width: fit-content !important;
        }
      } @else {
        &-#{$breakpoint}-full {
          width: 100% !important;
        }
        &-#{$breakpoint}-fit {
          width: fit-content !important;
        }
      }
    }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>  }
}</code></pre></div>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-w-full {
 width: 100% !important;
}
.u-w-fit {
 width: fit-content !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-w-lg-full {
  width: 100% !important;
 }
 .u-w-lg-fit {
  width: fit-content !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-w-md-full {
  width: 100% !important;
 }
 .u-w-md-fit {
  width: fit-content !important;
 }
}</code></pre></div>



<h3 class="wp-block-heading">ピクセルごとの設定</h3>



<p>次にピクセル単位の設定を行います</p>



<p>下記のループ部分は、上記と同じです。2番目のブロックについて解説します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-w {
  @each $breakpoint, $query in $break-points {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    @for $i from 0 through 1000 {
      @if $breakpoint==&#39;all&#39; {
        &-#{$i} {
          width: Rem($i) !important;
        }
      } @else {
        &-#{$breakpoint}-#{$i} {
          width: Rem($i) !important;
        }
      }
    }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>  }
}</code></pre></div>



<p>今回は、10～1000の数値で設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 1 through 1000 {</code></pre></div>



<p>「@for $i from 1 through 1000」が0～1000までの数値をループし$iに1から順に数字を代入しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {</code></pre></div>



<p>上記同様allの場合の振り分けをしています</p>



<p>下記が展開イメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-w-1 {
 width: 0.1rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-w-lg-1 {
   width: 0.1rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-fs-md-1 {
   width: 0.1rem !important;
 }
}
・・・</code></pre></div>



<h3 class="wp-block-heading">%設定</h3>



<p>次にピクセル単位の設定を行います</p>



<p>下記のループ部分は、上記と同じです。2番目のブロックについて解説します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-w {
  @each $breakpoint, $query in $break-points {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    @for $i from 1 through 99 {
      @if $breakpoint==&#39;all&#39; {
        &-#{$i+&quot;p&quot;} {
          width: #{$i+&quot;%&quot;} !important;
        }
      } @else {
        &-#{$breakpoint}-#{$i+&quot;p&quot;} {
          width: #{$i+&quot;%&quot;} !important;
        }
      }
    }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>  }
}</code></pre></div>



<p>今回は、1～99の数値で設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 1 through 99 {</code></pre></div>



<p>「@for $i from 1 through 1000」が0～1000までの数値をループし$iに1から順に数字を代入しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {</code></pre></div>



<p>上記同様allの場合の振り分けをしています</p>



<p>下記が展開イメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-w-1p {
 width: 1% !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-w-lg-1p {
   width: 1% !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-fs-md-1p {
   width: 1% !important;
 }
}
・・・</code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>以上でwidthのユーティリティーの完成となります</p>



<p>全設定が吐き出されてしまうと膨大な量になってしまいますが、弊社では、vite＋@fullhuman/postcss-purgecssなどを使って、余計なclassは入らないようにしていますので、そういった工夫も必要になるかと思います</p>



<p>コーディングの省力化に貢献できれば幸いです</p>


<div data-post-id="7460" class="insert-page insert-page-7460 ">
<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="500" height="500" src="/media/wp-content/uploads/2023/07/IMG_8326.png" alt="" class="wp-image-7461 size-full" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326.png 500w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-300x300.png 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-120x120.png 120w" sizes="(max-width: 500px) 100vw, 500px" /></figure><div class="wp-block-media-text__content">
<p>文責：<a href="https://www.flying-h.co.jp/" target="_blank" rel="noreferrer noopener">フライング・ハイ・ワークス</a>代表 松田 治人（まつだ はるひと）<br>会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによる東京でWebシステムの制作やホームページ制作をしています。<br>エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。</p>
</div></div>
</div>

<div data-post-id="6328" class="insert-page insert-page-6328 ">
<h2 class="wp-block-heading">フライング・ハイ・ワークスの紹介</h2>



<p class="has-small-font-size"><a href="https://www.flying-h.co.jp/" target="_blank" rel="noopener" title="フライング・ハイ・ワークス">フライング・ハイ・ワークス</a>は、東京のホームページ制作・Web制作会社・Webシステム制作会社です。東京都及びその近郊（首都圏）を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース（レスポンシブ対応）で制作します。</p>



<h4 class="wp-block-heading">実績</h4>



<p class="has-small-font-size">デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。</p>



<p class="has-small-font-size">また、SEOやランディングページ（LP）、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。</p>



<p class="has-small-font-size">500点以上の<a href="https://www.flying-h.co.jp/works" target="_blank" rel="noopener" title="フライング・ハイ・ワークスの制作実績">フライング・ハイ・ワークスの制作実績</a>ページをご覧ください。</p>
</div><p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-width/">Scss/flocssで自作ユーティリティー width編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scss/flocssで自作ユーティリティー border編</title>
		<link>https://www.flying-h.co.jp/media/2024/10/20/scss-utility-border/</link>
		
		<dc:creator><![CDATA[松田治人]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 07:20:34 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=10039</guid>

					<description><![CDATA[<p>u-b-grayやu-bt-primary-1など「u-b」の接頭辞がついた、ユーティリティーを作成します フォルダ構成やutilityの適用順などはflocssを基準にしています 社内のコーディング共通フォーマットとし [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-border/">Scss/flocssで自作ユーティリティー border編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>u-b-grayやu-bt-primary-1など「u-b」の接頭辞がついた、ユーティリティーを作成します</p>



<p>フォルダ構成やutilityの適用順などはflocssを基準にしています</p>



<p>社内のコーディング共通フォーマットとして少しずつ独自の改良をしてきた設定です</p>



<p>下記もあわせてご覧ください</p>



<ul class="wp-block-list">
<li><a href="/media/2024/10/20/scss-utility-margin-padding/" title=""><a href="/media/2024/10/20/scss-utility-margin-padding/" title=""><a href="/media/2024/10/20/scss-utility-margin-padding/" title="">Scss/floccsで自作ユーティリティー margin / padding編</a></a></a></li>



<li><a href="/media/2024/10/20/scss-utility-display-gap/" title="Scssで自作ユーティリティー display / gap編">Scss/floccsで自作ユーティリティー display / gap編</a></li>



<li><a href="/media/2024/10/20/scss-utility-font-size-weight/" title="Scssで自作ユーティリティー font-size / font-weight編">Scss/floccsで自作ユーティリティー font-size / font-weight編</a></li>



<li>Scss/floccsで自作ユーティリティー border編</li>



<li><a href="/media/2024/10/20/scss-utility-width/" title="Scssで自作ユーティリティー width編">Scss/floccsで自作ユーティリティー width編</a></li>



<li><a href="/media/2024/10/20/scss-utility-background-color/" title="Scssで自作ユーティリティー color / backgroun編">Scss/floccsで自作ユーティリティー color / background-color編</a></li>
</ul>



<h2 class="wp-block-heading">ゴール</h2>



<ul class="wp-block-list">
<li>全体及び各辺のボーダーを設定できること</li>



<li>ボーダーサイズ及びボーダーカラーの設定ができること</li>



<li>border: noneでは、media queryのサイズによる階層的な適用が確実にされること
<ul class="wp-block-list">
<li></li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">前提</h2>



<h4 class="wp-block-heading">foundation/variable</h4>



<p>使用しないbreak pointを入れておくと無駄な設定ができてしまいますので、注意してください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;

$colors: (
  primary: #F48C40,
  danger: #E88E7D,
  info: #00B187,
  secondary: #E88E7D,
  success: #00B187,
  warning: #ffc107,
  black: #000000,
  white: #ffffff,
  gray: #CCCCCC,
);</code></pre></div>



<h4 class="wp-block-heading">foundation/mixin</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">使用法</h2>



<h4 class="wp-block-heading">全囲い</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-b-{$colors}
.u-b-{$colors}-{サイズ}</code></pre></div>



<h4 class="wp-block-heading">一部</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-{方向種類}-{$colors}
.u-{方向種類}-{$colors}-{サイズ}</code></pre></div>



<h4 class="wp-block-heading">非表示</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-b-none
.u-b-{$break-points}-none</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{サイズ} … 2~10（px相当）、指定ない場合1px</p>



<p>{方向種類} … bt: top / br: right / bb: bottom / bl: left</p>



<p>{color名}は、上記前提を参照</p>



<h2 class="wp-block-heading">使用例</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-b-primary u-b-lg-none&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：「u-b-primary」で色が#F48C40で、1pxのボーダーで囲われます</li>



<li>821～1024px：「u-b-lg-none」でborderは非表示になります</li>



<li>820px以下：上記継承してそのまま非表示です</li>
</ul>



<p>下記で、色名と色は自由に設定できます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$colors: (
  primary: #F48C40,
  danger: #E88E7D,
  info: #00B187,
  secondary: #E88E7D,
  success: #00B187,
  warning: #ffc107,
  black: #000000,
  white: #ffffff,
  gray: #CCCCCC,
);</code></pre></div>



<h2 class="wp-block-heading">最終形</h2>



<p>上記の前提は、各環境にあわせ別ファイルとして振り分け、下記ファイルで読み込んでください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Border
// -----------------------------------------------------------------
$array: (b: &#39;&#39;, bt: &#39;top&#39;, br: &#39;right&#39;, bb: &#39;bottom&#39;, bl: &#39;left&#39;);
@each $key, $dir in $array {
  .u-#{$key} {
    @if $key == &#39;b&#39; {
      // 囲み
      @each $name, $color in $colors {
        &-#{&quot;&quot;+$name} {
          @for $i from 1 through 10 {
            @if $i==1 {
              border: 1px solid $color !important;
            } @else {
              &-#{$i} {
                border: #{$i}px solid $color !important;
              }
            }
          }
        }
      }
    } @else {
      // 一部
      @each $name, $color in $colors {
        &-#{&quot;&quot;+$name} {
          @for $i from 1 through 10 {
            @if $i==1 {
              border-#{$dir}: 1px solid $color !important;
            } @else {
              &-#{$i} {
                border-#{$dir}: #{$i}px solid $color !important;
              }
            }
          }
        }
      }
    }
  }
}
.u-b-none {
  // 削除
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {
      @if $breakpoint==&#39;all&#39; {
        border: none !important;
      } @else {
        &-#{$breakpoint} {
          border: none !important;
        }
      }
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">解説</h2>



<p>上記最終系を一つずつ見ていきます</p>



<h3 class="wp-block-heading">ループ設定</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$array: (b: &#39;&#39;, bt: &#39;top&#39;, br: &#39;right&#39;, bb: &#39;bottom&#39;, bl: &#39;left&#39;);</code></pre></div>



<p>上記$arrayをループして展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $dir in $array {
  .u-#{$key} {
    @if $key == &#39;b&#39; {
     ・・・
    } @else {
     ・・・
    }
  }
}</code></pre></div>



<p>$keyが「b」の場合とそれ以外で設定を変えています</p>



<p>展開されるイメージは下記の通りです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-b {}
.u-bt {}
.u-br {}
・・・</code></pre></div>



<h2 class="wp-block-heading">詳細クラスの設定</h2>



<h3 class="wp-block-heading">ボーダー</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $dir in $array {
  .u-#{$key} {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    @if $key == &#39;b&#39; {
      // 囲み
      @each $name, $color in $colors {
        &-#{&quot;&quot;+$name} {
          @for $i from 1 through 10 {
            @if $i==1 {
              border: 1px solid $color !important;
            } @else {
              &-#{$i} {
                border: #{$i}px solid $color !important;
              }
            }
          }
        }
      }
    } @else {
      // 一部
      @each $name, $color in $colors {
        &-#{&quot;&quot;+$name} {
          @for $i from 1 through 10 {
            @if $i==1 {
              border-#{$dir}: 1px solid $color !important;
            } @else {
              &-#{$i} {
                border-#{$dir}: #{$i}px solid $color !important;
              }
            }
          }
        }
      }
    }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<h3 class="wp-block-heading">「b」の場合 / 全囲い</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>// 囲み
@each $name, $color in $colors {
 &-#{&quot;&quot;+$name} {
  @for $i from 1 through 10 {
   @if $i==1 {
    border: 1px solid $color !important;
   } @else {
    &-#{$i} {
     border: #{$i}px solid $color !important;
    }
   }
  }
 }
}</code></pre></div>



<p>全囲いの設定となります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $name, $color in $colors {
 &-#{&quot;&quot;+$name} {</code></pre></div>



<p>上記で下記の各色設定を展開し、「.u-b-primary」のようにclassを作成しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$colors: (
  primary: #F48C40,
  danger: #E88E7D,
  info: #00B187,
  secondary: #E88E7D,
  success: #00B187,
  warning: #ffc107,
  black: #000000,
  white: #ffffff,
  gray: #CCCCCC,
);</code></pre></div>



<p>下記で1pxをデフォルトとして10pxまでの幅に対応できるclassを作成しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 1 through 10 {
 @if $i==1 {
  border: 1px solid $color !important;
 } @else {
  &-#{$i} {
   border: #{$i}px solid $color !important;
  }
 }
}</code></pre></div>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-b-primary {
 border: 1px solid #F48C40 !important;
}
.u-b-primary-2 {
 border: 2px solid #F48C40 !important;
}
.u-b-primary-3 {
 border: 3px solid #F48C40 !important;
}
・・・
.u-b-gray {
 border: 1px solid #CCCCCC !important;
}
.u-b-gray-2 {
 border: 2px solid #CCCCCC !important;
}
.u-b-gray-3 {
 border: 3px solid #CCCCCC !important;
}
・・・</code></pre></div>



<h3 class="wp-block-heading">「b」以外の場合 / 一部</h3>



<p>各辺の設定になります</p>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-b-bt-primary {
 border-top: 1px solid #F48C40 !important;
}
.u-b-bt-primary-2 {
 border-top: 2px solid #F48C40 !important;
}
.u-b-bt-primary-3 {
 border-top: 3px solid #F48C40 !important;
}
・・・
.u-b-bt-gray {
 border-top: 1px solid #CCCCCC !important;
}
.u-b-bt-gray-2 {
 border-top: 2px solid #CCCCCC !important;
}
.u-b-bt-gray-3 {
 border-top: 3px solid #CCCCCC !important;
}
・・・</code></pre></div>



<h3 class="wp-block-heading">非表示</h3>



<p>ボーダーをすべて非表示にする設定です</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;</code></pre></div>



<p>上記$break-pointsをループしてborder: none設定をしています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-b-none {
  // 削除
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {
      @if $breakpoint==&#39;all&#39; {
        border: none !important;
      } @else {
        &-#{$breakpoint} {
          border: none !important;
        }
      }
    }
  }
}</code></pre></div>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-b-none {
 border: none
}
.u-b-none-lg {
 border: none
}
.u-b-none-md {
 border: none
}</code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>以上でborderのユーティリティーの完成となります</p>



<p>全設定が吐き出されてしまうと膨大な量になってしまいますが、弊社では、vite＋@fullhuman/postcss-purgecssなどを使って、余計なclassは入らないようにしていますので、そういった工夫も必要になるかと思います</p>



<p>コーディングの省力化に貢献できれば幸いです</p>


<div data-post-id="7460" class="insert-page insert-page-7460 ">
<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="500" height="500" src="/media/wp-content/uploads/2023/07/IMG_8326.png" alt="" class="wp-image-7461 size-full" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326.png 500w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-300x300.png 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-120x120.png 120w" sizes="(max-width: 500px) 100vw, 500px" /></figure><div class="wp-block-media-text__content">
<p>文責：<a href="https://www.flying-h.co.jp/" target="_blank" rel="noreferrer noopener">フライング・ハイ・ワークス</a>代表 松田 治人（まつだ はるひと）<br>会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによる東京でWebシステムの制作やホームページ制作をしています。<br>エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。</p>
</div></div>
</div>

<div data-post-id="6328" class="insert-page insert-page-6328 ">
<h2 class="wp-block-heading">フライング・ハイ・ワークスの紹介</h2>



<p class="has-small-font-size"><a href="https://www.flying-h.co.jp/" target="_blank" rel="noopener" title="フライング・ハイ・ワークス">フライング・ハイ・ワークス</a>は、東京のホームページ制作・Web制作会社・Webシステム制作会社です。東京都及びその近郊（首都圏）を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース（レスポンシブ対応）で制作します。</p>



<h4 class="wp-block-heading">実績</h4>



<p class="has-small-font-size">デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。</p>



<p class="has-small-font-size">また、SEOやランディングページ（LP）、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。</p>



<p class="has-small-font-size">500点以上の<a href="https://www.flying-h.co.jp/works" target="_blank" rel="noopener" title="フライング・ハイ・ワークスの制作実績">フライング・ハイ・ワークスの制作実績</a>ページをご覧ください。</p>
</div><p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-border/">Scss/flocssで自作ユーティリティー border編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scss/flocssで自作ユーティリティー font-size / font-weight編</title>
		<link>https://www.flying-h.co.jp/media/2024/10/20/scss-utility-font-size-weight/</link>
		
		<dc:creator><![CDATA[松田治人]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 06:36:27 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=10029</guid>

					<description><![CDATA[<p>font-sizeでは、u-fs-20やu-fs-md-24など「u-fs」、font-weightではu-fw-boldやu-fw-mediumなど「u-fw」の接頭辞がついた、ユーティリティーを作成します フォルダ構 [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-font-size-weight/">Scss/flocssで自作ユーティリティー font-size / font-weight編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>font-sizeでは、u-fs-20やu-fs-md-24など「u-fs」、font-weightではu-fw-boldやu-fw-mediumなど「u-fw」の接頭辞がついた、ユーティリティーを作成します</p>



<p>フォルダ構成やutilityの適用順などはflocssを基準にしています</p>



<p>社内のコーディング共通フォーマットとして少しずつ独自の改良をしてきた設定です</p>



<p>下記もあわせてご覧ください</p>



<ul class="wp-block-list">
<li><a href="/media/2024/10/20/scss-utility-margin-padding/" title="">Scss/floccsで自作ユーティリティー margin / padding編</a></li>



<li><a href="/media/2024/10/20/scss-utility-display-gap/" title="Scssで自作ユーティリティー display / gap編">Scss/floccsで自作ユーティリティー display / gap編</a></li>



<li>Scss/floccsで自作ユーティリティー font-size / font-weight編</li>



<li><a href="/media/2024/10/20/scss-utility-border/" title="Scssで自作ユーティリティー border編">Scss/floccsで自作ユーティリティー border編</a></li>



<li><a href="/media/2024/10/20/scss-utility-width/" title="Scssで自作ユーティリティー width編">Scss/floccsで自作ユーティリティー width編</a></li>



<li><a href="/media/2024/10/20/scss-utility-background-color/" title="Scssで自作ユーティリティー color / backgroun編">Scss/floccsで自作ユーティリティー color / background-color編</a></li>
</ul>



<h2 class="wp-block-heading">ゴール</h2>



<ul class="wp-block-list">
<li>media queryのサイズによる階層的な適用が確実にされること</li>



<li>font-size
<ul class="wp-block-list">
<li>オリジナル名称の設定を作成すること</li>



<li>ピクセルごとの設定を作成すること</li>
</ul>
</li>



<li>font-weight
<ul class="wp-block-list">
<li>weight名で設定できること</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">前提</h2>



<h4 class="wp-block-heading">foundation/variable</h4>



<p>使用しないbreak pointを入れておくと無駄な設定ができてしまいますので、注意してください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;

$font-sizes: (
  sm: (14, 13, 12),
  md: (20, 19, 18),
  lg: (28, 27, 26),
);

$font-weights: (
 thin: 100,
 extra-light: 200,
 light: 300,
 regular: 400,
 medium: 500,
 semibold: 600,
 bold: 700,
 extra-bold: 800,
 black: 900,
);</code></pre></div>



<h4 class="wp-block-heading">foundation/mixin</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;
@use &#39;sass:math&#39;;

@function Rem($size) {
  @return math.div($size, 10) + rem;
}

@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">使用法</h2>



<h3 class="wp-block-heading">font-size</h3>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-fs-{$font-sizes}</code></pre></div>



<h4 class="wp-block-heading">ピクセルごとの設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-fs-{数値}
.u-fs-{$break-points}-{数値}</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{数値} … 10～32</p>



<p>{$font-sizes}は、上記前提を参照</p>



<h3 class="wp-block-heading">font-weight</h3>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-fw-{重さ}
.u-fw-{$break-points}-{重さ}</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{重さ} … 上記前提の$font-weights</p>



<h2 class="wp-block-heading">使用例</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;h2 class=&quot;u-fs-sm u-fw-regular u-fw-lg-bold u-fw-md-medium&quot;&gt;
・・・
&lt;/h2&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：「u-fs-sm」でfont-sizeが1.4rem / 「u-fw-regular」でfont-weitが400</li>



<li>821～1024px：「u-fs-sm」でfont-sizeが1.3rem / 「u-fw-lg-bold」でfont-weitが700</li>



<li>820px以下：「u-fs-sm」でfont-sizeが1.2rem / 「u-fw-md-medium」でfont-weitが500</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$font-weights: (
 thin: 100,
 extra-light: 200,
 light: 300,
 regular: 400,
 medium: 500,
 semibold: 600,
 bold: 700,
 extra-bold: 800,
 black: 900,
);</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$font-sizes: (
  sm: (14, 13, 12),
  md: (20, 19, 18),
  lg: (28, 27, 26),
);</code></pre></div>



<p>上記$font-sizesの設定は、この名称は自由に作成できるため、例えば、h1variationやh2variationなどの設定を作成することで、複数の文字設定も作成できます。</p>



<h2 class="wp-block-heading">最終形</h2>



<p>上記の前提は、各環境にあわせ別ファイルとして振り分け、下記ファイルで読み込んでください</p>



<h3 class="wp-block-heading">font-size</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Font-Size
// -----------------------------------------------------------------
.u-fs {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {

      // $font-sizesのkey名で設定
      @each $name, $values in $font-sizes {
        $num: index(map.keys($break-points), $breakpoint);
        &-#{$name} {
          font-size: #{Rem(nth($values, $num))} !important;
        }
      }

      @for $i from 10 through 32 {
        @if $breakpoint==&#39;all&#39; {
          &-#{$i} {
            font-size: Rem($i) !important;
          }
        } @else {
          &-#{$breakpoint}-#{$i} {
            font-size: Rem($i) !important;
          }
        }
      }
    }
  }
}</code></pre></div>



<h3 class="wp-block-heading">font-weight</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>// 上記前提が記載されたファイル
@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Font-Weight
// -----------------------------------------------------------------
.u-fw {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {

      @each $key, $weight in $font_weights {
        @if $breakpoint==&#39;all&#39; {
          &-#{&quot;&quot;+$key} {
            font-weight: $weight !important;
          }
        } @else {
          &-#{$breakpoint}-#{&quot;&quot;+$key} {
            font-weight: $weight !important;
          }
        }
      }

    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">解説</h2>



<p>上記最終系を一つずつ見ていきます。下記はfont-size及びfont-weightで同じです</p>



<h3 class="wp-block-heading">ループ設定</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;</code></pre></div>



<p>上記$break-pointsをループして展開していきます（font-weightの場合は、u-fsの部分はu-fwとなります。以下同様）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-fs {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {
・・・
  }
}</code></pre></div>



<p>展開されるイメージは下記の通りです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-fs {
 // all
 // lg
　@media &#39;screen and (max-width: 1024px)&#39; {
 }
 // md
　@media &#39;screen and (max-width: 820px)&#39; {
 }
}</code></pre></div>



<p>最初の$breakpointは「all」となりますが、下記mixinでは、allの場合は、特に処理を行っていませんので空になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<p>ここでのポイントは、「$break-points」を大きいサイズから設定していことです</p>



<h2 class="wp-block-heading">詳細クラスの設定</h2>



<h3 class="wp-block-heading">font-size</h3>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<p>配列「$font-sizes」を展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$font-sizes: (
  sm: (14, 13, 12),
  md: (20, 19, 18),
  lg: (28, 27, 26),
);</code></pre></div>



<p>$font-sizesにある各変数のカッコ内の数字は、$break-pointsの数と同じ数設定しています</p>



<p>したがって、ここは、左から「all」「lg」「md」のpxサイズを数値のみで設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-fs {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      @each $name, $values in $font-sizes {
        $num: index(map.keys($break-points), $breakpoint);
        &-#{$name} {
          font-size: #{Rem(nth($values, $num))} !important;
        }
      }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    }
  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $name, $values in $font-sizes {</code></pre></div>



<p>$font-sizesをeach文で展開していますが、ここでは、最初は「$name」に「sm」が、「$values」には「(14, 13, 12)」が入ることになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$num: index(map.keys($break-points), $breakpoint);</code></pre></div>



<p>map.keysで$break-pointsのkeyだけの配列を作成しています。結果は「all, lg, md」となります</p>



<p>そしてindex関数で、「all, lg, md」の中でall（二つ目のループで最初の$breakpointは「all」）の位置を取得しています。ここでは「1」が$numとして設定されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>&-#{$name} {</code></pre></div>



<p>「&amp;-#{$name} {」は、$marginsの最初のキーのsmを使用して「&amp;-sm {」となり、結果として「.u-fs-sm」が作成されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>font-size: #{Rem(nth($values, $num))} !important;</code></pre></div>



<p>「nth($values, $num)」では、nth関数で、$values、つまり「(14, 13, 12)」のうち、$numの値の順番（最初は「1」）にある値を取得し、Rem関数でremの値に変換しています</p>



<p>結果として「font-size: 1.4rem !important;」という記述が作成されます</p>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-fs-sm {
 font-size: 1.4rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-fs-sm {
  font-size: 1.3rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-fs-sm {
  font-size: 1.2rem !important;
 }
}
・・・</code></pre></div>



<h3 class="wp-block-heading">ピクセルごとの設定</h3>



<p>次にピクセル単位の設定を行います</p>



<p>下記のループ部分は、上記と同じです。2番目のブロックについて解説します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-fs {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      @for $i from 10 through 32 {
        @if $breakpoint==&#39;all&#39; {
          &-#{$i} {
            font-size: Rem($i) !important;
          }
        } @else {
          &-#{$breakpoint}-#{$i} {
            font-size: Rem($i) !important;
          }
        }
      }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    }
  }
}</code></pre></div>



<p>今回は、10～32の数値で設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 10 through 32 {</code></pre></div>



<p>「@for $i from 0 through 180」が0～180までの数値をループし$iに0から順に数字を代入しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {</code></pre></div>



<p>上記同様allの場合の振り分けをしています</p>



<p>下記が展開イメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-fs-10 {
 font-size: 1rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-fs-lg-10 {
   font-size: 1rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-fs-md-0 {
   font-size: 1rem !important;
 }
}
・・・</code></pre></div>



<h3 class="wp-block-heading">font-weight</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$font-weights: (
 thin: 100,
 extra-light: 200,
 light: 300,
 regular: 400,
 medium: 500,
 semibold: 600,
 bold: 700,
 extra-bold: 800,
 black: 900,
);</code></pre></div>



<p>上記配列「$font-weights」を展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-fs {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      @each $key, $weight in $font_weights {
        @if $breakpoint==&#39;all&#39; {
          &-#{&quot;&quot;+$key} {
            font-weight: $weight !important;
          }
        } @else {
          &-#{$breakpoint}-#{&quot;&quot;+$key} {
            font-weight: $weight !important;
          }
        }
      }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    }
  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $weight in $font_weights {</code></pre></div>



<p>$font_weightsをeach文で展開していますが、ここでは、最初は「$key」に「thin」が、「$weight」には「100」が入ることになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {</code></pre></div>



<p>allの場合の振り分けをしています</p>



<p>下記が展開イメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-fw-thin {
 font-weight: 100 !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-fw-lg-thin {
   font-weight: 100 !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-fw-md-thin {
   font-weight: 100 !important;
 }
}
・・・</code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>以上でfont-sizeとfont-weightのユーティリティーの完成となります</p>



<p>全設定が吐き出されてしまうと膨大な量になってしまいますが、弊社では、vite＋@fullhuman/postcss-purgecssなどを使って、余計なclassは入らないようにしていますので、そういった工夫も必要になるかと思います</p>



<p>コーディングの省力化に貢献できれば幸いです</p>


<div data-post-id="7460" class="insert-page insert-page-7460 ">
<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="500" height="500" src="/media/wp-content/uploads/2023/07/IMG_8326.png" alt="" class="wp-image-7461 size-full" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326.png 500w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-300x300.png 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-120x120.png 120w" sizes="(max-width: 500px) 100vw, 500px" /></figure><div class="wp-block-media-text__content">
<p>文責：<a href="https://www.flying-h.co.jp/" target="_blank" rel="noreferrer noopener">フライング・ハイ・ワークス</a>代表 松田 治人（まつだ はるひと）<br>会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによる東京でWebシステムの制作やホームページ制作をしています。<br>エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。</p>
</div></div>
</div>

<div data-post-id="6328" class="insert-page insert-page-6328 ">
<h2 class="wp-block-heading">フライング・ハイ・ワークスの紹介</h2>



<p class="has-small-font-size"><a href="https://www.flying-h.co.jp/" target="_blank" rel="noopener" title="フライング・ハイ・ワークス">フライング・ハイ・ワークス</a>は、東京のホームページ制作・Web制作会社・Webシステム制作会社です。東京都及びその近郊（首都圏）を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース（レスポンシブ対応）で制作します。</p>



<h4 class="wp-block-heading">実績</h4>



<p class="has-small-font-size">デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。</p>



<p class="has-small-font-size">また、SEOやランディングページ（LP）、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。</p>



<p class="has-small-font-size">500点以上の<a href="https://www.flying-h.co.jp/works" target="_blank" rel="noopener" title="フライング・ハイ・ワークスの制作実績">フライング・ハイ・ワークスの制作実績</a>ページをご覧ください。</p>
</div><p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-font-size-weight/">Scss/flocssで自作ユーティリティー font-size / font-weight編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scss/flocssで自作ユーティリティー display / gap編</title>
		<link>https://www.flying-h.co.jp/media/2024/10/20/scss-utility-display-gap/</link>
		
		<dc:creator><![CDATA[松田治人]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 03:51:49 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=10008</guid>

					<description><![CDATA[<p>displayでは、u-d-blockやu-d-md-noneなど、「u-d」の接頭辞で、また、flex / gridで使用するgapは、u-gap-48やu-gap-r-60など「u-gap」の接頭辞で、各ユーティリテ [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-display-gap/">Scss/flocssで自作ユーティリティー display / gap編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>displayでは、u-d-blockやu-d-md-noneなど、「u-d」の接頭辞で、また、flex / gridで使用するgapは、u-gap-48やu-gap-r-60など「u-gap」の接頭辞で、各ユーティリティーを作成します</p>



<p>フォルダ構成やutilityの適用順などはflocssを基準にしています</p>



<p>社内のコーディング共通フォーマットとして少しずつ独自の改良をしてきた設定です</p>



<p>下記もあわせてご覧ください</p>



<ul class="wp-block-list">
<li><a href="/media/2024/10/20/scss-utility-margin-padding/" title="">Scss/floccsで自作ユーティリティー margin / padding編</a></li>



<li>Scss/floccsで自作ユーティリティー display / gap編</li>



<li><a href="/media/2024/10/20/scss-utility-font-size-weight/" title="Scssで自作ユーティリティー font-size / font-weight編">Scss/floccsで自作ユーティリティー font-size / font-weight編</a></li>



<li><a href="/media/2024/10/20/scss-utility-border/" title="Scssで自作ユーティリティー border編">Scss/floccsで自作ユーティリティー border編</a></li>



<li><a href="/media/2024/10/20/scss-utility-width/" title="Scssで自作ユーティリティー width編">Scss/floccsで自作ユーティリティー width編</a></li>



<li><a href="/media/2024/10/20/scss-utility-background-color/" title="Scssで自作ユーティリティー color / backgroun編">Scss/floccsで自作ユーティリティー color / background-color編</a></li>
</ul>



<h2 class="wp-block-heading">ゴール</h2>



<ul class="wp-block-list">
<li>media queryのサイズによる階層的な適用が確実にされること</li>



<li>display
<ul class="wp-block-list">
<li>grid系で均等分割の設定が行えること</li>
</ul>
</li>



<li>gap
<ul class="wp-block-list">
<li>オリジナル名称の設定を作成すること</li>



<li>ピクセルごとの設定を作成すること</li>
</ul>
</li>
</ul>



<h2 class="wp-block-heading">前提</h2>



<h4 class="wp-block-heading">foundation/variable</h4>



<p>使用しないbreak pointを入れておくと無駄な設定ができてしまいますので、注意してください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;

$gaps: (
  sm: (48, 46, 44),
  md: (60, 58, 56),
  lg: (80, 78, 76),
);</code></pre></div>



<h4 class="wp-block-heading">foundation/mixin</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">使用法</h2>



<h3 class="wp-block-heading">display</h3>



<h4 class="wp-block-heading">基本</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-d-{display値}
.u-d-{$break-points}-{display値}</code></pre></div>



<h4 class="wp-block-heading">grid / inline-grid</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-d-{display値}-{均等分割数}
.u-d-{$break-points}-{display値}-{均等分割数}</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{display値} … &#8216;none&#8217;, &#8216;block&#8217;, &#8216;inline&#8217;, &#8216;flex&#8217;, &#8216;inline-flex&#8217;, &#8216;grid&#8217;, &#8216;inline-grid&#8217;</p>



<p>{均等分割数} … grid / inline-gridの場合のみ有効 で、1及び3~10まで。指定ない場合は均等2分割</p>



<h3 class="wp-block-heading">gap</h3>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-gap-{$gaps}</code></pre></div>



<h4 class="wp-block-heading">ピクセルごとの設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-gap-{サイズ}
.u-gap-{$break-points}-{サイズ}
.u-gap-{タイプ}-{サイズ}
.u-gap-{タイプ}-{$break-points}-{サイズ}</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{display値} … &#8216;none&#8217;, &#8216;block&#8217;, &#8216;inline&#8217;, &#8216;flex&#8217;, &#8216;inline-flex&#8217;, &#8216;grid&#8217;, &#8216;inline-grid&#8217;</p>



<p>{タイプ} … c: column-gap、r: row-gap</p>



<p>{$gaps} は、上記前提を参照</p>



<h2 class="wp-block-heading">使用例</h2>



<h3 class="wp-block-heading">display</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-d-grid-4 u-d-grid-lg-3 u-d-grid-md-1&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：「u-d-grid-4」で4分割</li>



<li>821～1024px：「u-d-grid-lg-3」で3分割</li>



<li>820px以下：「u-d-grid-md-1」で1分割</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;br class=&quot;u-d-none u-d-block u-d-none&quot; /&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：改行なし</li>



<li>821～1024px：改行あり</li>



<li>820px以下：改行なし</li>
</ul>



<h3 class="wp-block-heading">gap</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-d-grid-3 u-gap-r-36 u-gap-c-24&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、gridの3分割の状態になり、下記のようになります</p>



<ul class="wp-block-list">
<li>縦方向のgap：row-gapが3.6rem</li>



<li>横方向のgap：column-gapが2.4rem</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-d-grid-3 u-gap-sm&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、gridの3分割の状態になり、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：gapが縦横4.8rem</li>



<li>821～1024px：gapが縦横4.6rem</li>



<li>820px以下：gapが縦横4.4rem</li>
</ul>



<p>$gapsの設定は、現在下記となっていますが、この自由に設定を追加できます。また、後からそれぞれの設定を変更すれば、一気に更新することもできます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$gaps: (
  sm: (48, 46, 44),
  md: (60, 58, 56),
  lg: (80, 78, 76),
);</code></pre></div>



<h2 class="wp-block-heading">最終形</h2>



<p>上記の前提は、各環境にあわせ別ファイルとして振り分け、下記ファイルで読み込んでください</p>



<h3 class="wp-block-heading">display</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Display
// -----------------------------------------------------------------
$array: (&#39;none&#39;, &#39;block&#39;, &#39;inline&#39;, &#39;flex&#39;, &#39;inline-flex&#39;, &#39;grid&#39;, &#39;inline-grid&#39;);
.u-d {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {
      @each $key in $array {
        @if $breakpoint==&#39;all&#39; {
          &-#{$key} {
            display: #{$key} !important;
            @if $key == &#39;grid&#39; or $key==&#39;inline-grid&#39; {
              @for $i from 2 through 10 {
                @if $i==2 {
                  grid-template-columns: repeat($i, 1fr) !important;
                } @else {
                  &-#{$i} {
                    display: #{$key};
                    grid-template-columns: repeat($i, 1fr) !important;
                  }
                }
              }
            }
          }
        } @else {
          &-#{$breakpoint}-#{$key} {
            display: #{$key} !important;
            @if $key == &#39;grid&#39; or $key==&#39;inline-grid&#39; {
              @for $i from 2 through 10 {
                @if $i==2 {
                  grid-template-columns: repeat($i, 1fr) !important;
                } @else {
                  &-#{$i} {
                    display: #{$key};
                    grid-template-columns: repeat($i, 1fr) !important;
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}</code></pre></div>



<h3 class="wp-block-heading">gap</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

// -----------------------------------------------------------------
// Gap
// -----------------------------------------------------------------
$array: (
  c: &#39;column&#39;,
  r: &#39;row&#39;
);
.u-gap {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {

      // オリジナル名称の設定
      @each $name, $values in $gaps {
        $num: index(map.keys($break-points), $breakpoint);
        &-#{$name} {
          #{gap}: #{Rem(nth($values, $num))} !important;
        }
        @each $key, $type in $array {
          &-#{$key}-#{$name} {
            #{$type}-gap: #{Rem(nth($values, $num))} !important;
          }
        }
      }

      // ピクセルごとの設定
      @for $i from 1 through 100 {
        @if $breakpoint == &#39;all&#39; {
          &-#{$i} {
            gap: Rem($i) !important;
          }
          @each $key, $type in $array {
            &-#{$key}-#{$i} {
              #{$type}-gap: Rem($i) !important;
            }
          }
        } @else {
          &-#{$breakpoint}-#{$i} {
            gap: Rem($i) !important;
          }
          @each $key, $type in $array {
            &-#{$key}-#{$breakpoint}-#{$i} {
              #{$type}-gap: Rem($i) !important;
            }
          }
        }
      }
    }
  }
}
</code></pre></div>



<h2 class="wp-block-heading">解説</h2>



<p>上記最終系を一つずつ見ていきます。下記はdisplay及びgapで同じです</p>



<h3 class="wp-block-heading">ループ設定</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;</code></pre></div>



<p>上記$break-pointsをループして展開していきます（gapの場合は、u-dの部分はu-gapとなります。以下同様）</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-d {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {
・・・
  }
}</code></pre></div>



<p>展開されるイメージは下記の通りです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-d {
 // all
 // lg
　@media &#39;screen and (max-width: 1024px)&#39; {
 }
 // md
　@media &#39;screen and (max-width: 820px)&#39; {
 }
}</code></pre></div>



<p>最初の$breakpointは「all」となりますが、下記mixinでは、allの場合は、特に処理を行っていませんので空になります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<p>ここでのポイントは、「$break-points」を大きいサイズから設定していことです</p>



<p>これにより、画面幅が小さくなるにつれ、後述の設定が生きてくることになります。</p>



<h2 class="wp-block-heading">詳細クラスの設定</h2>



<h3 class="wp-block-heading">display</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>$array: (&#39;none&#39;, &#39;block&#39;, &#39;inline&#39;, &#39;flex&#39;, &#39;inline-flex&#39;, &#39;grid&#39;, &#39;inline-grid&#39;);</code></pre></div>



<p>上記$arrayを展開し、各classを作成していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-d {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      @each $key in $array {
        @if $breakpoint==&#39;all&#39; {
          &-#{$key} {
            display: #{$key} !important;
            @if $key == &#39;grid&#39; or $key==&#39;inline-grid&#39; {
              @for $i from 1 through 10 {
                @if $i==2 {
                  grid-template-columns: repeat($i, 1fr) !important;
                } @else {
                  &-#{$i} {
                    display: #{$key};
                    grid-template-columns: repeat($i, 1fr) !important;
                  }
                }
              }
            }
          }
        } @else {
          &-#{$breakpoint}-#{$key} {
            display: #{$key} !important;
            @if $key == &#39;grid&#39; or $key==&#39;inline-grid&#39; {
              @for $i from 1 through 10 {
                @if $i==2 {
                  grid-template-columns: repeat($i, 1fr) !important;
                } @else {
                  &-#{$i} {
                    display: #{$key};
                    grid-template-columns: repeat($i, 1fr) !important;
                  }
                }
              }
            }
          }
        }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    }
  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key in $array {</code></pre></div>



<p>displayプロパティの値の一覧です。よく使う値があれば、追加してください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {
・・・
} @else {
・・・
}</code></pre></div>



<p>$break-points配列のキーがallの場合とそれ以外に振り分けています</p>



<p>allは、media queryに左右されない値を設定するために、独自に設定したものです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {
  &-#{$key} {
    display: #{$key} !important;
 ・・・
  }
} @else {
  &-#{$breakpoint}-#{$key} {
    display: #{$key} !important;
  }
 ・・・
}</code></pre></div>



<p>上記で、をつかった「文字列補間（String Interpolation）」の「&amp;-#{$key}」は、「#{$key}」の$keyに$arrayの値が一つずつ設定されます。</p>



<p>また、「display: #{$key} !important;」も同様に$keyに$arrayの値が一つずつ設定されます。</p>



<p>下記のように展開されるイメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-d-none {
 display: none !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-d-none {
  display: none !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-d-none {
   display: none !important;
 }
}
・・・
// all
.u-d-inline-grid
 display: inline-grid !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-d-inline-grid
   display: inline-grid !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-d-inline-grid
   display: inline-grid !important;
 }
}
</code></pre></div>



<p>さらに「grid」と「inline-grid」の場合のみ分割数を設定できるようにしています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 1 through 10 {
 @if $i==2 {
  grid-template-columns: repeat($i, 1fr) !important;
 } @else {
  &-#{$i} {
   display: #{$key};
   grid-template-columns: repeat($i, 1fr) !important;
  }
 }
}</code></pre></div>



<p>上記のループは1～10としています。1は狭いサイズの場合に使用することを想定しています</p>



<p>また、「2」をデフォルトとして設定し、1及び3～10が「-3」のように設定できるようにしています</p>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>・・・
// all
.u-d-grid-1 {
 display: grid !important;
 grid-template-columns: repeat(1, 1fr) !important;
}
.u-d-grid {
 display: grid !important;
 grid-template-columns: repeat(2, 1fr) !important;
}
.u-d-grid-3 {
 display: grid !important;
 grid-template-columns: repeat(3, 1fr) !important;
}
.u-d-grid-4 {
 display: grid !important;
 grid-template-columns: repeat(4, 1fr) !important;
}
・・・
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-d-lg-grid-1 {
  display: grid !important;
  grid-template-columns: repeat(1, 1fr) !important;
 }
 .u-d-lg-grid {
  display: grid !important;
  grid-template-columns: repeat(2, 1fr) !important;
 }
 .u-d-lg-grid-3 {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr) !important;
 }
 .u-d-lg-grid-4 {
  display: grid !important;
  grid-template-columns: repeat(4, 1fr) !important;
 }
・・・
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-d-md-grid-1 {
  display: grid !important;
  grid-template-columns: repeat(1, 1fr) !important;
 }
 .u-d-md-grid {
  display: grid !important;
  grid-template-columns: repeat(2, 1fr) !important;
 }
 .u-d-md-grid-3 {
  display: grid !important;
  grid-template-columns: repeat(3, 1fr) !important;
 }
 .u-d-md-grid-4 {
  display: grid !important;
  grid-template-columns: repeat(4, 1fr) !important;
 }
}
・・・</code></pre></div>



<h3 class="wp-block-heading">gap</h3>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<p>配列「$gaps」を展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$gaps: (
  sm: (48, 46, 44),
  md: (60, 58, 56),
  lg: (80, 78, 76),
);</code></pre></div>



<p>$gapsにある各変数のカッコ内の数字は、$break-pointsの数と同じ数設定しています</p>



<p>したがって、ここは、左から「all」「lg」「md」のpxサイズを数値のみで設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-gap {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      @each $name, $values in $gaps {
        $num: index(map.keys($break-points), $breakpoint);
        &-#{$name} {
          gap: #{Rem(nth($values, $num))} !important;
        }
        @each $key, $type in $array {
          &-#{$key}-#{$name} {
            #{$type}-gap: #{Rem(nth($values, $num))} !important;
          }
        }
      }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    }
  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $name, $values in $gaps {</code></pre></div>



<p>$gapsをeach文で展開していますが、ここでは、最初は「$name」に「sm」が、「$values」には「(48, 46, 44)」が入ることになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$num: index(map.keys($break-points), $breakpoint);</code></pre></div>



<p>map.keysで$break-pointsのkeyだけの配列を作成しています。結果は「all, lg, md」となります</p>



<p>そしてindex関数で、「all, lg, md」の中でall（二つ目のループで最初の$breakpointは「all」）の位置を取得しています。ここでは「1」が$numとして設定されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>&-#{$name} {</code></pre></div>



<p>「&amp;-#{$name} {」は、$gapsの最初のキーのsmを使用して「&amp;-sm {」となり、結果として「.u-gap-sm」が作成されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>gap: #{Rem(nth($values, $num))} !important;</code></pre></div>



<p>「nth($values, $num)」では、nth関数で、$values、つまり「(48, 46, 44)」のうち、$numの値の順番（最初は「1」）にある値を取得し、Rem関数でremの値に変換しています</p>



<p>結果として「gap: 4.8rem !important;」という記述が作成されます</p>



<p>次にcolumとrowの設定を追加しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$array: (c: &#39;column&#39;, r: &#39;row&#39;);</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $type in $array {
 &-#{$key}-#{$name} {
  #{$type}-gap: #{Rem(nth($values, $num))} !important;
 }
}</code></pre></div>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-gap-sm {
 gap: 4.8rem !important;
}
.u-gap-c-sm {
 gap: 4.8rem !important;
}
.u-gap-r-sm {
 gap: 4.8rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-gap-sm {
  gap: 4.6rem !important;
 }
 .u-gap-c-sm {
  gap: 4.6rem !important;
 }
 .u-gap-r-sm {
  gap: 4.6rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-gap-sm {
  gap: 4.4rem !important;
 }
 .u-gap-c-sm {
  gap: 4.4rem !important;
 }
 .u-gap-r-sm {
  gap: 4.4rem !important;
 }
}
・・・</code></pre></div>



<h3 class="wp-block-heading">ピクセルごとの設定</h3>



<p>次にピクセル単位の設定を行います</p>



<p>下記のループ部分は、上記と同じです。2番目のブロックについて解説します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>.u-gap {
  @each $breakpoint, $query in $break-points {
    @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      @for $i from 1 through 100 {
        @if $breakpoint == &#39;all&#39; {
          &-#{$i} {
            gap: Rem($i) !important;
          }
          @each $key, $type in $array {
            &-#{$key}-#{$i} {
              #{$type}-gap: Rem($i) !important;
            }
          }
        } @else {
          &-#{$breakpoint}-#{$i} {
            gap: Rem($i) !important;
          }
          @each $key, $type in $array {
            &-#{$key}-#{$breakpoint}-#{$i} {
              #{$type}-gap: Rem($i) !important;
            }
          }
        }
      }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>    }
  }
}</code></pre></div>



<p>今回は、0～100の数値で設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 1 through 100 {</code></pre></div>



<p>「@for $i from 0 through 180」が0～100までの数値をループし$iに0から順に数字を代入しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {</code></pre></div>



<p>上記同様allの場合の振り分けをしています</p>



<p>下記が展開イメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-gap-1 {
 gap: 0.1rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-gap-lg-1 {
  gap: 0.1rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-gap-md-1 {
  gap: 0.1rem !important;
 }
}
・・・
// all
.u-gap-100 {
 gap: 10rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-gap-lg-100 {
  gap: 10rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-gap-md-100 {
  gap: 10rem !important;
 }
}</code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>以上でdisplayとgapのユーティリティーの完成となります</p>



<p>全設定が吐き出されてしまうと膨大な量になってしまいますが、弊社では、vite＋@fullhuman/postcss-purgecssなどを使って、余計なclassは入らないようにしていますので、そういった工夫も必要になるかと思います</p>



<p>コーディングの省力化に貢献できれば幸いです</p>


<div data-post-id="7460" class="insert-page insert-page-7460 ">
<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="500" height="500" src="/media/wp-content/uploads/2023/07/IMG_8326.png" alt="" class="wp-image-7461 size-full" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326.png 500w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-300x300.png 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-120x120.png 120w" sizes="(max-width: 500px) 100vw, 500px" /></figure><div class="wp-block-media-text__content">
<p>文責：<a href="https://www.flying-h.co.jp/" target="_blank" rel="noreferrer noopener">フライング・ハイ・ワークス</a>代表 松田 治人（まつだ はるひと）<br>会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによる東京でWebシステムの制作やホームページ制作をしています。<br>エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。</p>
</div></div>
</div>

<div data-post-id="6328" class="insert-page insert-page-6328 ">
<h2 class="wp-block-heading">フライング・ハイ・ワークスの紹介</h2>



<p class="has-small-font-size"><a href="https://www.flying-h.co.jp/" target="_blank" rel="noopener" title="フライング・ハイ・ワークス">フライング・ハイ・ワークス</a>は、東京のホームページ制作・Web制作会社・Webシステム制作会社です。東京都及びその近郊（首都圏）を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース（レスポンシブ対応）で制作します。</p>



<h4 class="wp-block-heading">実績</h4>



<p class="has-small-font-size">デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。</p>



<p class="has-small-font-size">また、SEOやランディングページ（LP）、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。</p>



<p class="has-small-font-size">500点以上の<a href="https://www.flying-h.co.jp/works" target="_blank" rel="noopener" title="フライング・ハイ・ワークスの制作実績">フライング・ハイ・ワークスの制作実績</a>ページをご覧ください。</p>
</div><p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-display-gap/">Scss/flocssで自作ユーティリティー display / gap編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scss/floccsで自作ユーティリティー margin / padding編</title>
		<link>https://www.flying-h.co.jp/media/2024/10/20/scss-utility-margin-padding/</link>
		
		<dc:creator><![CDATA[松田治人]]></dc:creator>
		<pubDate>Sun, 20 Oct 2024 01:05:45 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=9970</guid>

					<description><![CDATA[<p>u-mt-20やu-pb-30など、marginでは「u-m」、paddingでは「u-p」の接頭辞がついた、margin又はpadding用ユーティリティーを作成します フォルダ構成やutilityの適用順などはflo [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-margin-padding/">Scss/floccsで自作ユーティリティー margin / padding編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>u-mt-20やu-pb-30など、marginでは「u-m」、paddingでは「u-p」の接頭辞がついた、margin又はpadding用ユーティリティーを作成します</p>



<p>フォルダ構成やutilityの適用順などはflocssを基準にしています</p>



<p>社内のコーディング共通フォーマットとして少しずつ独自の改良をしてきた設定です</p>



<p>下記もあわせてご覧ください</p>



<ul class="wp-block-list">
<li>Scss/floccsで自作ユーティリティー margin / padding編</li>



<li><a href="/media/2024/10/20/scss-utility-display-gap/" title="Scssで自作ユーティリティー display / gap編">Scss/floccsで自作ユーティリティー display / gap編</a></li>



<li><a href="/media/2024/10/20/scss-utility-font-size-weight/" title="">Scss/floccsで自作ユーティリティー font-size / font-weight編</a></li>



<li><a href="/media/2024/10/20/scss-utility-border/" title="">Scss/floccsで自作ユーティリティー border編</a></li>



<li><a href="/media/2024/10/20/scss-utility-width/" title="Scssで自作ユーティリティー width編">Scss/floccsで自作ユーティリティー width編</a></li>



<li><a href="/media/2024/10/20/scss-utility-background-color/" title="Scssで自作ユーティリティー color / backgroun編">Scss/floccsで自作ユーティリティー color / background-color編</a></li>
</ul>



<h2 class="wp-block-heading">ゴール</h2>



<ul class="wp-block-list">
<li>media queryのサイズによる階層的な適用が確実にされること</li>



<li>オリジナル名称の設定を作成すること</li>



<li>ピクセルごとの設定を作成すること</li>
</ul>



<h2 class="wp-block-heading">前提</h2>



<h4 class="wp-block-heading">foundation/variable</h4>



<p>使用しないbreak pointを入れておくと無駄な設定ができてしまいますので、注意してください</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;

$margins: (
  base: (80, 78, 76),
  sm: (50, 48, 46),
  lg: (120, 118, 116),
);</code></pre></div>



<h4 class="wp-block-heading">foundation/mixin</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;
@use &#39;sass:math&#39;;

@function Rem($size) {
  @return math.div($size, 10) + rem;
}

@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">使用法</h2>



<h4 class="wp-block-heading">左右auto設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-mx-auto</code></pre></div>



<h4 class="wp-block-heading">オリジナル名称の設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-{マージン/パディング方向}-{$margins}</code></pre></div>



<h4 class="wp-block-heading">ピクセルごとの設定</h4>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-{マージン/パディング方向}-{数値}
.u-{マージン/パディング方向}-{$break-points}-{数値}</code></pre></div>



<h4 class="wp-block-heading">パラメータ</h4>



<p>{マージン方向} … m: margin / mt: margin-top / mb: margin-bottom / mr: margin-right / ml: margin-left / my: margin-block / mx: margin-inline</p>



<p>{パディング方向} … p: padding / pt: padding-top / pb: padding-bottom / pr: padding-right / pl: padding-left / py: padding-block / px: padding-inline</p>



<p>{$margins}{$break-points}は、上記前提を参照</p>



<h2 class="wp-block-heading">使用例</h2>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-mb-30 u-mb-lg-40 u-mb-md-50&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：「u-mb-30」でmargin-bottomが3rem</li>



<li>821～1024px：「u-mb-lg-40」でmargin-bottomが4rem</li>



<li>820px以下：「u-mb-md-50」でmargin-bottomが5rem</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-html" data-lang="HTML"><code>&lt;div class=&quot;u-mt-sm&quot;&gt;
・・・
&lt;/div&gt;</code></pre></div>



<p>上記では、画面幅により下記のようになります</p>



<ul class="wp-block-list">
<li>1025px以上：margin-topが8rem</li>



<li>821～1024px：margin-topが7.8rem</li>



<li>820px以下：margin-topが7.6rem</li>
</ul>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$margins: (
  base: (80, 78, 76),
  sm: (50, 48, 46),
  lg: (120, 118, 116),
);</code></pre></div>



<p>上記$marginsの配列の名称（キー）とbreak pointごとの設定は、自由に作成できるので、例えば、buttonやblockなどの設定を作成することで、パターンにあわせた設定を作成することができる上、のち変更があれば、それぞれのmarginやpaddingを一気に更新することもできます。</p>



<p>また、これらは、下記すべてに設定を作成していますので、様々なオリジナルの設定が可能となります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$array: (
  mt: &#39;margin-top&#39;,
  mb: &#39;margin-bottom&#39;,
  mr: &#39;margin-right&#39;,
  ml: &#39;margin-left&#39;,
  my: &#39;margin-block&#39;,
  mx: &#39;margin-inline&#39;,
  m: &#39;margin&#39;,
);</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$array: (
  pt: &#39;padding-top&#39;,
  pb: &#39;padding-bottom&#39;,
  pr: &#39;padding-right&#39;,
  pl: &#39;padding-left&#39;,
  py: &#39;padding-block&#39;,
  px: &#39;padding-inline&#39;,
  p: &#39;padding&#39;,
);</code></pre></div>



<h2 class="wp-block-heading">最終形</h2>



<p>上記の前提は、各環境にあわせ別ファイルとして振り分け、下記ファイルで読み込んでください</p>



<h3 class="wp-block-heading">margin</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

// 上記前提が記載されたファイル
@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

$array: (
  mt: &#39;margin-top&#39;,
  mb: &#39;margin-bottom&#39;,
  mr: &#39;margin-right&#39;,
  ml: &#39;margin-left&#39;,
  my: &#39;margin-block&#39;,
  mx: &#39;margin-inline&#39;,
  m: &#39;margin&#39;,
);

@each $key, $property in $array {
  .u-#{$key} {
    @each $breakpoint, $query in $break-points {
      @include mq($breakpoint) {
        
        // オリジナル名称設定
        @each $name, $values in $margins {
          $num: index(map.keys($break-points), $breakpoint);
          &-#{$name} {
            #{$property}: #{Rem(nth($values, $num))} !important;
          }
        }
        
        // ピクセルごとの設定
        @for $i from 0 through 180 {
          @if $breakpoint==&#39;all&#39; {
            @if $i==0 {
              &-#{$i} {
                #{$property}: 0 !important;
              }
            } @else {
              &-#{$i} {
                #{$property}: Rem($i) !important;
              }
            }
          } @else {
            @if $i==0 {
              &-#{$breakpoint}-#{$i} {
                #{$property}: 0 !important;
              }
            } @else {
              &-#{$breakpoint}-#{$i} {
                #{$property}: Rem($i) !important;
              }
            }
          }
        }
      }
    }
  }
}

.u-mx-auto {
  margin-inline: auto !important;
}</code></pre></div>



<h3 class="wp-block-heading">padding</h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@use &#39;sass:map&#39;;

// 上記前提が記載されたファイル
@use &#39;../../foundation/variable&#39; as *;
@use &#39;../../foundation/mixin&#39; as *;

$array: (
  pt: &#39;padding-top&#39;,
  pb: &#39;padding-bottom&#39;,
  pr: &#39;padding-right&#39;,
  pl: &#39;padding-left&#39;,
  py: &#39;padding-block&#39;,
  px: &#39;padding-inline&#39;,
  p: &#39;padding&#39;,
);

@each $key, $property in $array {
  .u-#{$key} {
    @each $breakpoint, $query in $break-points {
      @include mq($breakpoint) {
        
        // オリジナル名称設定
        @each $name, $values in $margins {
          $num: index(map.keys($break-points), $breakpoint);
          &-#{$name} {
            #{$property}: #{Rem(nth($values, $num))} !important;
          }
        }
        
        // ピクセルごとの設定
        @for $i from 0 through 180 {
          @if $breakpoint==&#39;all&#39; {
            @if $i==0 {
              &-#{$i} {
                #{$property}: 0 !important;
              }
            } @else {
              &-#{$i} {
                #{$property}: Rem($i) !important;
              }
            }
          } @else {
            @if $i==0 {
              &-#{$breakpoint}-#{$i} {
                #{$property}: 0 !important;
              }
            } @else {
              &-#{$breakpoint}-#{$i} {
                #{$property}: Rem($i) !important;
              }
            }
          }
        }
      }
    }
  }
}</code></pre></div>



<h2 class="wp-block-heading">解説</h2>



<p>上記最終系を一つずつ見ていきます</p>



<h3 class="wp-block-heading">ループ設定</h3>



<p>今回のmarginとpaddingは、「m」と「p」の違いくらいでほとんど差異がないので、marginの設定で確認していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$array: (
  mt: &#39;margin-top&#39;,
  mb: &#39;margin-bottom&#39;,
  mr: &#39;margin-right&#39;,
  ml: &#39;margin-left&#39;,
  my: &#39;margin-block&#39;,
  mx: &#39;margin-inline&#39;,
  m: &#39;margin&#39;,
);</code></pre></div>



<p>接頭辞「u-」に続く名称をキーとして、それぞれにcssのプロパティ名を記載した配列となります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $property in $array {
  .u-#{$key} {
・・・
  }
}</code></pre></div>



<p>設定した配列をeach文でループし、一行ずつ設定していきます</p>



<p>#をつかった「文字列補間（String Interpolation）」を使うことで、$arrayのキーで、class名を作成していきます。下記のように展開されるイメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-mt {
}
.u-mb {
}
・・・
.u-m {
}</code></pre></div>



<p>次にmedia queryを設定していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$break-points: (
  all: &#39;&#39;,
  lg: &#39;screen and (max-width: 1024px)&#39;,
  md: &#39;screen and (max-width: 820px)&#39;,
) !default;</code></pre></div>



<p>foundation/variableに設定している上記配列を前提にeach分で展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $property in $array {
  .u-#{$key} {
    @each $breakpoint, $query in $break-points {
      @include mq($breakpoint) {
・・・
      }
    }
  }
}</code></pre></div>



<p>最初の$breakpointは「all」となりますが、下記mixinでは、allの場合は、特に処理を行っていませんので、そのまま設定されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@mixin mq($breakpoint: md) {
  @if($breakpoint == &#39;all&#39;) {
    @content;
  } @else {
    @media #{map.get($break_points, $breakpoint)} {
      @content;
    }
  }
}</code></pre></div>



<p>上記により下記のように展開されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-mt {
 // all
 // lg
　@media &#39;screen and (max-width: 1024px)&#39; {
 }
 // md
　@media &#39;screen and (max-width: 820px)&#39; {
 }
}
・・・
.u-m {
 ・・・
}</code></pre></div>



<p>ここでのポイントは、「$break-points」を大きいサイズから設定していことです</p>



<p>これにより、画面幅が小さくなるにつれ、後述の設定が生きてくることになります。</p>



<h3 class="wp-block-heading">オリジナル名称設定</h3>



<p>ここまでで、最終的な各cssを記述する準備が整いました。次に配列「$margins」を展開していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$margins: (
  base: (80, 78, 76),
  sm: (50, 48, 46),
  lg: (120, 118, 116),
);</code></pre></div>



<p>$marginsにある各変数のカッコ内の数字は、$break-pointsの数と同じ数設定しています</p>



<p>したがって、ここは、左から「all」「lg」「md」のpxサイズを数値のみで設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $property in $array {
  .u-#{$key} {
    @each $breakpoint, $query in $break-points {
      @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>        @each $name, $values in $margins {
          $num: index(map.keys($break-points), $breakpoint);
          &-#{$name} {
            #{$property}: #{Rem(nth($values, $num))} !important;
          }
        }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      }
    }
  }
}</code></pre></div>



<p>上記ブロックの真ん中の部分を解説していきます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $name, $values in $margins {</code></pre></div>



<p>$marginsをeach文で展開していますが、ここでは、最初は「$name」に「base」が、「$values」には「(80, 78, 76)」が入ることになります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>$num: index(map.keys($break-points), $breakpoint);</code></pre></div>



<p>map.keysで$break-pointsのkeyだけの配列を作成しています。結果は「all, lg, md」となります</p>



<p>そしてindex関数で、「all, lg, md」の中でall（二つ目のループで最初の$breakpointは「all」）の位置を取得しています。ここでは「1」が$numとして設定されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>&-#{$name} {</code></pre></div>



<p>「&amp;-#{$name} {」は、$marginsの最初のキーのbaseを使用して「&amp;-base {」となり、結果として「.u-mt-base」が作成されます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>#{$property}: #{Rem(nth($values, $num))} !important;</code></pre></div>



<p>「nth($values, $num)」では、nth関数で、$values、つまり「(80, 78, 76)」のうち、$numの値の順番（最初は「1」）にある値を取得し、Rem関数でremの値に変換しています</p>



<p>結果として「margin-top: 8rem !important;」という記述が作成されます</p>



<p>下記が展開イメージとなります</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-mt-base {
 margin-top: 8rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-mt-base {
  margin-top: 7.8rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-mt-base {
  margin-top: 7.6rem !important;
 }
}
・・・
// all
.u-m-base {
 margin: 8rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-m-base {
  margin: 7.8rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-m-base {
  margin: 7.6rem !important;
 }
}</code></pre></div>



<h3 class="wp-block-heading">ピクセルごとの設定</h3>



<p>次にピクセル単位の設定を行います</p>



<p>下記のループ部分は、上記と同じです。2番目のブロックについて解説します</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@each $key, $property in $array {
  .u-#{$key} {
    @each $breakpoint, $query in $break-points {
      @include mq($breakpoint) {</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>        @for $i from 0 through 180 {
          @if $breakpoint==&#39;all&#39; {
            @if $i==0 {
              &-#{$i} {
                #{$property}: 0 !important;
              }
            } @else {
              &-#{$i} {
                #{$property}: Rem($i) !important;
              }
            }
          } @else {
            @if $i==0 {
              &-#{$breakpoint}-#{$i} {
                #{$property}: 0 !important;
              }
            } @else {
              &-#{$breakpoint}-#{$i} {
                #{$property}: Rem($i) !important;
              }
            }
          }
        }</code></pre></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>      }
    }
  }
}</code></pre></div>



<p>今回は、0～180の数値で設定しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@for $i from 0 through 180 {</code></pre></div>



<p>「@for $i from 0 through 180」が0～180までの数値をループし$iに0から順に数字を代入しています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $breakpoint==&#39;all&#39; {</code></pre></div>



<p>上記同様allの場合の振り分けをしています</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-scss" data-lang="SCSS"><code>@if $i==0 {</code></pre></div>



<p>$iの値が0の場合の設定を振り分けています</p>



<p>下記が展開イメージです</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>// all
.u-mt-0 {
 margin-top: 0 !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-mt-lg-0 {
   margin-top: 0 !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-mt-md-0 {
   margin-top:  !important;
 }
}
・・・
// all
.u-m-180 {
 margin: 18rem !important;
}
// lg
@media &#39;screen and (max-width: 1024px)&#39; {
 .u-m-lg-180 {
   margin: 18rem !important;
 }
}
// md
@media &#39;screen and (max-width: 820px)&#39; {
 .u-m-md-180 {
   margin: 186rem !important;
 }
}</code></pre></div>



<p>上記で特殊なのは「0」設定です。全部のマージンを消したい場合には「u-m-0」が使用できます</p>



<h3 class="wp-block-heading">marginの追加設定</h3>



<p>marginのみ下記設定を追加しています</p>



<p>block要素などのセンター寄せなどで利用できます</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-css" data-lang="CSS"><code>.u-mx-auto {
  margin-inline: auto !important;
}</code></pre></div>



<h2 class="wp-block-heading">まとめ</h2>



<p>以上でmarginとpaddingのユーティリティーの完成となります</p>



<p>全設定が吐き出されてしまうと膨大な量になってしまいますが、弊社では、vite＋@fullhuman/postcss-purgecssなどを使って、余計なclassは入らないようにしていますので、そういった工夫も必要になるかと思います</p>



<p>コーディングの省力化に貢献できれば幸いです</p>


<div data-post-id="7460" class="insert-page insert-page-7460 ">
<div class="wp-block-media-text alignwide is-stacked-on-mobile" style="grid-template-columns:15% auto"><figure class="wp-block-media-text__media"><img decoding="async" width="500" height="500" src="/media/wp-content/uploads/2023/07/IMG_8326.png" alt="" class="wp-image-7461 size-full" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326.png 500w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-300x300.png 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/IMG_8326-120x120.png 120w" sizes="(max-width: 500px) 100vw, 500px" /></figure><div class="wp-block-media-text__content">
<p>文責：<a href="https://www.flying-h.co.jp/" target="_blank" rel="noreferrer noopener">フライング・ハイ・ワークス</a>代表 松田 治人（まつだ はるひと）<br>会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによる東京でWebシステムの制作やホームページ制作をしています。<br>エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。</p>
</div></div>
</div>

<div data-post-id="6328" class="insert-page insert-page-6328 ">
<h2 class="wp-block-heading">フライング・ハイ・ワークスの紹介</h2>



<p class="has-small-font-size"><a href="https://www.flying-h.co.jp/" target="_blank" rel="noopener" title="フライング・ハイ・ワークス">フライング・ハイ・ワークス</a>は、東京のホームページ制作・Web制作会社・Webシステム制作会社です。東京都及びその近郊（首都圏）を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース（レスポンシブ対応）で制作します。</p>



<h4 class="wp-block-heading">実績</h4>



<p class="has-small-font-size">デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。</p>



<p class="has-small-font-size">また、SEOやランディングページ（LP）、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。</p>



<p class="has-small-font-size">500点以上の<a href="https://www.flying-h.co.jp/works" target="_blank" rel="noopener" title="フライング・ハイ・ワークスの制作実績">フライング・ハイ・ワークスの制作実績</a>ページをご覧ください。</p>
</div><p>The post <a href="https://www.flying-h.co.jp/media/2024/10/20/scss-utility-margin-padding/">Scss/floccsで自作ユーティリティー margin / padding編</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>React Three Fiberで3Dモデルを読み込む</title>
		<link>https://www.flying-h.co.jp/media/2024/05/21/r3f/</link>
		
		<dc:creator><![CDATA[fhw_Z7nTMUpb]]></dc:creator>
		<pubDate>Tue, 21 May 2024 00:21:22 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=8253</guid>

					<description><![CDATA[<p>R3F (React Three Fiber)で簡単な3Dアプリケーションを構築しました。</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2024/05/21/r3f/">React Three Fiberで3Dモデルを読み込む</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<figure class="wp-block-image size-large"><a href="http://suger.fhw-web.com/blog/R3F/" target="_blank" rel="noreferrer noopener"><img decoding="async" width="800" height="377" src="/media/wp-content/uploads/2024/05/thumb-1-800x377.jpg" alt="" class="wp-image-8255" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2024/05/thumb-1-800x377.jpg 800w, https://www.flying-h.co.jp/media/wp-content/uploads/2024/05/thumb-1-300x141.jpg 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2024/05/thumb-1-768x362.jpg 768w, https://www.flying-h.co.jp/media/wp-content/uploads/2024/05/thumb-1-1536x724.jpg 1536w, https://www.flying-h.co.jp/media/wp-content/uploads/2024/05/thumb-1.jpg 1781w" sizes="(max-width: 800px) 100vw, 800px" /></a></figure>



<p><br><a href="http://suger.fhw-web.com/blog/R3F/" target="_blank" rel="noopener" title="">デモはこちら</a><br><br>React Three Fiber（R3F）で簡単な3Dアプリケーションを構築しました。<br>※モデルは<a href="https://www.blenderkit.com/asset-gallery-detail/ccdd8cbb-f9b5-427a-819b-e3975f84a35d/" target="_blank" rel="noopener" title="">Blenderkit</a>より使用させていただいております。<br><br>3Dモデルのスクリーンの位置に&lt;iframe>を設置することで、<br>まるで3Dモデル上でwebサイトを表示させているように描写することができます。<br>また、実際にシーン上でwebサイトを閲覧することもできたり、ページ内をドラッグすることでモデルを操作することが可能です。<br><br>React Three Fiber（R3F）ではReactのようにコンポーネントを並べてプロパティを記述していけばよいので、Three.jsでコードを記述するより圧倒的に手軽に3Dグラフィックスを構築することができます。</p>



<h2 class="wp-block-heading">React Three Fiber（R3F）とは</h2>



<p>R3Fは、ReactでThree.jsを使って3Dシーンを描画するためのライブラリです。<br>Reactはフロントエンド開発で非常に人気のあるJavaScriptフレームワークで、<br>Three.jsはWebGLを使って3Dグラフィックスをレンダリングするためのライブラリです。<br>R3Fは、この2つの強力な技術を組み合わせることで、Reactのコンポーネントベースのアプローチを使って3Dシーンを構築できるようにします。</p>



<h2 class="wp-block-heading">デモのコード</h2>



<h3 class="wp-block-heading">index.jsx</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import './style.css';
import ReactDOM from 'react-dom/client';
import { Canvas } from '@react-three/fiber';
import Scene from './Scene.jsx';

const root = ReactDOM.createRoot(document.querySelector('#root'));

root.render(
  &lt;Canvas
    camera={{
      fov: 45,
      near: 0.1,
      far: 2000,
      position: [-0.4, 1.2, 4],
    }}
  &gt;
    &lt;Scene /&gt;
  &lt;/Canvas&gt;
);" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">./style.css</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">ReactDOM</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">react-dom/client</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Canvas</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">@react-three/fiber</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">Scene</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">./Scene.jsx</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">root</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">ReactDOM</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">createRoot</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">document</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">querySelector</span><span style="color: #D8DEE9FF">(</span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">#root</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">))</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #D8DEE9">root</span><span style="color: #ECEFF4">.</span><span style="color: #88C0D0">render</span><span style="color: #D8DEE9FF">(</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">Canvas</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #8FBCBB">camera</span><span style="color: #81A1C1">={</span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #88C0D0">fov</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">45</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #88C0D0">near</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.1</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #88C0D0">far</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2000</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #88C0D0">position</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> [</span><span style="color: #81A1C1">-</span><span style="color: #B48EAD">0.4</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">1.2</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">4</span><span style="color: #D8DEE9FF">]</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #ECEFF4">}</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">Scene</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">Canvas</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span></code></pre></div>



<h3 class="wp-block-heading">Scene.jsx</h3>



<div class="wp-block-kevinbatdorf-code-block-pro" data-code-block-pro-font-family="Code-Pro-JetBrains-Mono" style="font-size:.875rem;font-family:Code-Pro-JetBrains-Mono,ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;line-height:1.25rem;--cbp-tab-width:2;tab-size:var(--cbp-tab-width, 2)"><span style="display:block;padding:16px 0 0 16px;margin-bottom:-1px;width:100%;text-align:left;background-color:#2e3440ff"><svg xmlns="http://www.w3.org/2000/svg" width="54" height="14" viewBox="0 0 54 14"><g fill="none" fill-rule="evenodd" transform="translate(1 1)"><circle cx="6" cy="6" r="6" fill="#FF5F56" stroke="#E0443E" stroke-width=".5"></circle><circle cx="26" cy="6" r="6" fill="#FFBD2E" stroke="#DEA123" stroke-width=".5"></circle><circle cx="46" cy="6" r="6" fill="#27C93F" stroke="#1AAB29" stroke-width=".5"></circle></g></svg></span><span role="button" tabindex="0" data-code="import {
  ContactShadows,
  Environment,
  Float,
  Html,
  PresentationControls,
} from '@react-three/drei';
import { useLoader } from '@react-three/fiber';
import { GLTFLoader } from 'three/examples/jsm/loaders/GLTFLoader.js';

export default function Scene() {
  const model = useLoader(GLTFLoader, './pc.gltf');
  return (
    &lt;&gt;
      &lt;mesh&gt;
        &lt;Environment preset=&quot;city&quot; /&gt;
        &lt;PresentationControls
          global
          rotation={[0.13, 0.1, 0]}
          polar={[-Math.PI / 8, Math.PI / 8]}
          azimuth={[-Math.PI / 8, Math.PI / 8]}
          config={{ mass: 2, tension: 400 }}
          snap={{ mass: 4, tension: 400 }}
        &gt;
          &lt;Float rotationIntensity={0.3}&gt;
            &lt;primitive
              object={model.scene}
              scale={[5, 5, 5]}
              position-y={-0.8}
            /&gt;
            &lt;Html
              transform
              wrapperClass=&quot;iframeWrapper&quot;
              distanceFactor={0.76}
              position={[0.12, 0.4, 0.1]}
              rotation-x={-0.2}
              rotation-y={0}
            &gt;
              &lt;iframe src=&quot;https://www.flying-h.co.jp/&quot;&gt;&lt;/iframe&gt;
            &lt;/Html&gt;
          &lt;/Float&gt;
        &lt;/PresentationControls&gt;
        &lt;ContactShadows position-y={-1.5} blur={2} /&gt;
      &lt;/mesh&gt;
    &lt;/&gt;
  );
}
" style="color:#d8dee9ff;display:none" aria-label="Copy" class="code-block-pro-copy-button"><svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px" fill="none" viewBox="0 0 24 24" stroke="currentColor" stroke-width="2"><path class="with-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2m-6 9l2 2 4-4"></path><path class="without-check" stroke-linecap="round" stroke-linejoin="round" d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"></path></svg></span><pre class="shiki nord" style="background-color: #2e3440ff" tabindex="0"><code><span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">ContactShadows</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">Environment</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">Float</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">Html</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #8FBCBB">PresentationControls</span><span style="color: #ECEFF4">,</span></span>
<span class="line"><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">@react-three/drei</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">useLoader</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">@react-three/fiber</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #81A1C1">import</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">GLTFLoader</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">from</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">three/examples/jsm/loaders/GLTFLoader.js</span><span style="color: #ECEFF4">&#39;</span><span style="color: #81A1C1">;</span></span>
<span class="line"></span>
<span class="line"><span style="color: #81A1C1">export</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">default</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">function</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">Scene</span><span style="color: #ECEFF4">()</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">{</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">const</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">model</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">=</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">useLoader</span><span style="color: #D8DEE9FF">(</span><span style="color: #D8DEE9">GLTFLoader</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">&#39;</span><span style="color: #A3BE8C">./pc.gltf</span><span style="color: #ECEFF4">&#39;</span><span style="color: #D8DEE9FF">)</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  </span><span style="color: #81A1C1">return</span><span style="color: #D8DEE9FF"> (</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #81A1C1">&lt;mesh&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">Environment</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">preset</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">city</span><span style="color: #ECEFF4">&quot;</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">PresentationControls</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #8FBCBB">global</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #8FBCBB">rotation</span><span style="color: #81A1C1">={</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">0.13</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.1</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #8FBCBB">polar</span><span style="color: #81A1C1">={</span><span style="color: #D8DEE9FF">[</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Math</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">PI</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">8</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Math</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">PI</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">8</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #8FBCBB">azimuth</span><span style="color: #81A1C1">={</span><span style="color: #D8DEE9FF">[</span><span style="color: #81A1C1">-</span><span style="color: #D8DEE9">Math</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">PI</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">8</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #D8DEE9">Math</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">PI</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">8</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #8FBCBB">config</span><span style="color: #81A1C1">={</span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">mass</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">2</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">tension</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">400</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #8FBCBB">snap</span><span style="color: #81A1C1">={</span><span style="color: #ECEFF4">{</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">mass</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">4</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #88C0D0">tension</span><span style="color: #ECEFF4">:</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">400</span><span style="color: #D8DEE9FF"> </span><span style="color: #ECEFF4">}</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">Float</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">rotationIntensity</span><span style="color: #81A1C1">={</span><span style="color: #B48EAD">0.3</span><span style="color: #81A1C1">}&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">&lt;primitive</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">object</span><span style="color: #81A1C1">={</span><span style="color: #D8DEE9">model</span><span style="color: #ECEFF4">.</span><span style="color: #D8DEE9">scene</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">scale</span><span style="color: #81A1C1">={</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">5</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">5</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">5</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">position-y</span><span style="color: #81A1C1">={-</span><span style="color: #B48EAD">0.8</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">/&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">Html</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">transform</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">wrapperClass</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">iframeWrapper</span><span style="color: #ECEFF4">&quot;</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">distanceFactor</span><span style="color: #81A1C1">={</span><span style="color: #B48EAD">0.76</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">position</span><span style="color: #81A1C1">={</span><span style="color: #D8DEE9FF">[</span><span style="color: #B48EAD">0.12</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.4</span><span style="color: #ECEFF4">,</span><span style="color: #D8DEE9FF"> </span><span style="color: #B48EAD">0.1</span><span style="color: #D8DEE9FF">]</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">rotation-x</span><span style="color: #81A1C1">={-</span><span style="color: #B48EAD">0.2</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #8FBCBB">rotation-y</span><span style="color: #81A1C1">={</span><span style="color: #B48EAD">0</span><span style="color: #81A1C1">}</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">              </span><span style="color: #81A1C1">&lt;iframe</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">src</span><span style="color: #81A1C1">=</span><span style="color: #ECEFF4">&quot;</span><span style="color: #A3BE8C">https://www.flying-h.co.jp/</span><span style="color: #ECEFF4">&quot;</span><span style="color: #81A1C1">&gt;&lt;/iframe&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">            </span><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">Html</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">          </span><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">Float</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;/</span><span style="color: #8FBCBB">PresentationControls</span><span style="color: #81A1C1">&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">        </span><span style="color: #81A1C1">&lt;</span><span style="color: #8FBCBB">ContactShadows</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">position-y</span><span style="color: #81A1C1">={-</span><span style="color: #B48EAD">1.5</span><span style="color: #81A1C1">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #8FBCBB">blur</span><span style="color: #81A1C1">={</span><span style="color: #B48EAD">2</span><span style="color: #81A1C1">}</span><span style="color: #D8DEE9FF"> </span><span style="color: #81A1C1">/&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">      </span><span style="color: #81A1C1">&lt;/mesh&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">    </span><span style="color: #81A1C1">&lt;/&gt;</span></span>
<span class="line"><span style="color: #D8DEE9FF">  )</span><span style="color: #81A1C1">;</span></span>
<span class="line"><span style="color: #ECEFF4">}</span></span>
<span class="line"></span></code></pre></div>



<p>・PresentationControlsコンポーネント<br><strong>@react-three/drei</strong>で提供されている3Dオブジェクトの操作を制御するためのコンポーネントです。カメラの視点を変えるためのアニメーションや、ユーザーによる操作を制御する機能を持っています。<br><strong>polar</strong>と<strong>azimuth</strong>で回転を制限することができます。<br><br>・Floatコンポーネント<br><strong>@react-three/drei</strong>のコンポーネントで、React Three Fiber（R3F）を使った3Dシーンでオブジェクトを浮遊させる、またはゆらゆらとした動きを与えることができます。<br><br>・Htmlコンポーネント<br>3D空間にHTML要素を表示: Htmlを使うと、シーン内にHTMLを埋め込むことができ、3Dオブジェクトと連携してUIを提供したり、情報を表示したりすることができます。<br><strong>wrapperClass</strong>プロパティを使用することでiframeの大きさをCSSでコントロールできます。</p>



<h3 class="wp-block-heading">ポイント</h3>



<p>3Dのためxyz軸を考慮しなければならないので、<br><strong>iframe</strong>の位置をモデルの画面にフィットさせるのが少し手間がかかりました。<br>カメラやモデルやiframeの各プロパティで調整しました。<br><br>その他のポイントとしてはモデルの裏側まで回転させることができてしまうと、<br>モデルであるモニターの背面が見えるはずがiframeが優先されてwebサイトが浮いてるように見えてしまうので、<strong>polar</strong>と<strong>azimuth</strong>で回転を制限させて、モデルの背面を見えないようにしています。<br><br>R3Fには今回使用したもの以外にもとても便利なプロパティやコンポーネントが用意されているので、<br>ぜひ下記ドキュメントやGitHubを確認してみてください。<br></p>



<h2 class="wp-block-heading">参考</h2>



<p>・<a href="https://docs.pmnd.rs/react-three-fiber/getting-started/introduction">React Three Fiber Documentation &#8211; Pmndrs.docs</a><br />・<a href="https://github.com/pmndrs/drei">https://github.com/pmndrs/drei</a></p><p>The post <a href="https://www.flying-h.co.jp/media/2024/05/21/r3f/">React Three Fiberで3Dモデルを読み込む</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>コーディングの効率化でホームページ制作・Web制作を時短する3つの方法</title>
		<link>https://www.flying-h.co.jp/media/2023/11/21/optimization/</link>
		
		<dc:creator><![CDATA[kurino]]></dc:creator>
		<pubDate>Tue, 21 Nov 2023 02:15:48 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=7746</guid>

					<description><![CDATA[<p>コーダー部の🌰です。 未経験から入社して早1年が経過しました。 AIの進歩に負けぬように日々必死にエンジニア業務に食らいついています。 任せていただけるサイトの数もボリュームも少しずつ増え、案件も並行して持てるようになっ [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2023/11/21/optimization/">コーディングの効率化でホームページ制作・Web制作を時短する3つの方法</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>コーダー部の<img src="https://s.w.org/images/core/emoji/16.0.1/72x72/1f330.png" alt="🌰" class="wp-smiley" style="height: 1em; max-height: 1em;" />です。</p>
<p>未経験から入社して早1年が経過しました。</p>
<p>AIの進歩に負けぬように日々必死にエンジニア業務に食らいついています。</p>
<p>任せていただけるサイトの数もボリュームも少しずつ増え、案件も並行して持てるようになってきました。</p>
<p>今回はそんな経験をもとに「コーディングを効率化する方法」についてお伝えできればと思っています。</p>



<h2 class="wp-block-heading">まだまだ若手の自分が、「コーディングの効率化」についてブログを書く背景</h2>



<figure class="wp-block-image size-large"><img decoding="async" width="800" height="530" src="/media/wp-content/uploads/2023/11/optimization_02-800x530.jpg" alt="" class="wp-image-7744" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_02-800x530.jpg 800w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_02-300x199.jpg 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_02-768x509.jpg 768w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_02-1536x1018.jpg 1536w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_02.jpg 1600w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>入社してから毎日が勉強で毎日が戦いでした。</p>
<p>そしてとある壁にぶつかります。「<strong>非効率</strong>」という壁です。</p>
<p>会社が追求するクオリティを限られた時間内でアウトプットすることができなかったんです。<br><br></p>
<p>制作会社では複数案件を同時進行していくことはマスト、そして一つの案件に使える時間は限られています。</p>
<p>クオリティを高めるにはシンプルに技術力を上げるという方法もありますが、技術力の向上には時間が必要です。</p>
<p>時間を捻出する為にも時間を短縮する「<strong>効率化</strong>」は必要不可欠！</p>
<p>先輩のサブコーダーとして経験を積みながら、効率化について模索してきました。<br><br></p>
<p>本記事では効率化について（まだまだですが）、1年間の実体験を元にコーディングを速くするテクニックやマインドセットをお話していきます。</p>
<p>制作会社にコーダーとして入社を考えている方、コーディング効率を上げたい方は是非ご覧ください。</p>
<p></p>



<h2 class="wp-block-heading">コーディングの効率を上げる方法（エディタ編）</h2>



<h3 class="wp-block-heading">ショートカットキー</h3>



<p>まずはエンジニアの相棒エディタ編</p>
<p>エンジニアによって使用しているエディタが異なりますが、今回は王道のVSCode（Visual Studio Code）についてご紹介していきます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>■便利なショートカット
・新しいウィンドウを開く：Ctrl + Shift + N ／ Command + Shift + N
・ファイル内検索・置換：Ctrl + F ／ Command + F
・コメントアウト：Ctrl + / ／ Command + /
・インデント前へ：Ctrl + [ ／ Command + [
・インデント後ろへ：Ctrl + ] ／ Command + ]
・選択した行の複製：Alt + Shift + ↑or↓ ／ Option + Shift + ↑or↓
・選択した文字列を選択: Ctrl + D ／ Command + D
・選択した文字列を一括選択: Ctrl + Shift + L ／ Command + Shift + L</code></pre></div>



<p>上記はほんの一部ですが、開発で非常に役立ちます。</p>
<p>特に「<strong>選択した文字列を選択（単語選択）</strong>」は修正案件で大いに役立ちました。</p>
<p>テーブルの値や特定の文字列を一括で置換するなど活躍の場が多いので、ぜひこの機会に覚えて更なる効率化を狙ってみてください。</p>



<h3 class="wp-block-heading">Emmet</h3>



<p>そしてEmmetもコーディングを爆速で行う為にはマスト！</p>
<p>Emmetを使用することでHTMLやCSSを全て手入力しなくても正しく補完してくれます。</p>
<p>例えばリストを作成する時は、「<strong>ul&gt;li*3</strong>」と打てば以下のように展開されます。</p>
<p><!-- notionvc: 579dbe9d-e933-43de-8f37-a29a8f88b917 --></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>&lt;ul&gt;
　&lt;li&gt;&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
  &lt;li&gt;&lt;/li&gt;
&lt;/ul&gt;</code></pre></div>



<p>CSSも同様です。</p>
<p><strong><span data-token-index="0" spellcheck="false" class="notion-enable-hover">mt15</span></strong><!-- notionvc: 5d7c23f6-84c3-4a97-8df4-aafbdce7d31c --></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>margin-top: 15px;</code></pre></div>



<p><strong><span data-token-index="0" spellcheck="false" class="notion-enable-hover">p40-20</span></strong><!-- notionvc: 597b2586-ccc7-43aa-8871-63eddd378014 --></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>padding: 40px 20px;</code></pre></div>



<p><strong><span data-token-index="0" spellcheck="false" class="notion-enable-hover">fz16</span></strong><!-- notionvc: b8b54741-9ffa-4374-af9a-2eb911308b43 --></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>font-size: 16px;</code></pre></div>



<p>コードの入力時間も短縮され、タイプミスも減ります。</p>
<p>一度ショートハンドの構文を覚えてしまえば効果絶大です。</p>



<h2 class="wp-block-heading">コーディングの効率を上げる方法（ブラウザ編）</h2>



<h3>ショートカットキー</h3>
<p>開発はウィンドウやタブの数がとても多くなるので、ブラウザ周りのショートカットキーも効率化の上で必須です。</p>
<p>画面キャプチャも制作進行上の疑問点をディレクター・デザイナーに分かりやすく伝える為に、使用しない日はありません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-plain"><code>■便利なショートカット
・新規ウィンドウ：Ctrl + N ／ Command + N
・シークレットウィンドウ：Ctrl + Shift + N ／ Command + Shift + N
・新規タブ：Ctrl + T ／ Command + T
・タブを閉じる：Ctrl + W ／ Command + W
・消したタブを元に戻す：Ctrl + Shift + T ／ Command + Shift + T
・ウィンドウ切り替え：Alt + Tab ／ Command + Tab
・画面キャプチャ：Windows + Shift + S ／ Command + Shift + 4
・クリップボードを表示：Windows + V ／ Command + Shift + V</code></pre></div>



<h3 class="wp-block-heading">拡張機能</h3>



<p>大量タブの海に溺れている難民の皆さんに朗報です。</p>
<p>もう「あの案件のテストサイトやBacklogどこだったかな～」と放浪の旅に出る必要はありませんし、タブを何十個も開きっぱなしにする必要もありません。</p>
<p>「<a href="https://chrome.google.com/webstore/detail/toby-for-chrome/hddnkoipeenegfoeaoibdmnaalmgkpip" target="_blank" rel="noopener">Toby for Chrome</a>」で解決できます。（激推し！！！）</p>
<p>Chromeの拡張機能でタブをグルーピングできます。</p>
<p>カード型のUIでドラック&amp;ドロップで気軽に編集でき、一つのウィンドウで開いている複数タブをワンクリックでまとめられる点も個人的に気に入っています。</p>
<p>タブ管理は上記以外の方法でも管理ができるので、自分に合った方法で効率化を図っていきましょう。</p>
<p><!-- notionvc: baaadb62-1c6a-4853-a245-816d6856efd2 --></p>



<h2 class="wp-block-heading">コーディングの効率を上げる方法（制作フロー編）</h2>



<h3>ヘルプを出す</h3>



<figure class="wp-block-image size-large"><img decoding="async" width="800" height="530" src="/media/wp-content/uploads/2023/11/optimization_03-800x530.jpg" alt="" class="wp-image-7742" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_03-800x530.jpg 800w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_03-300x199.jpg 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_03-768x509.jpg 768w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_03-1536x1018.jpg 1536w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/11/optimization_03.jpg 1600w" sizes="(max-width: 800px) 100vw, 800px" /></figure>



<p>これは非常に大切です。</p>
<p>制作を進行していくとほぼ間違いなく詰まるポイントが出てきます。</p>
<p>それはコーディングに関すること、案件特有のルールに関することetc…</p>
<p>この時に自分で解決する時間の上限を決めて、それでも解決できなければ先輩エンジニアにヘルプを出し迅速に報告すること。</p>
<p>この行動が制作においていかに大切か入社して身をもって体験しました。<br><br></p>
<p>エンジニアあるあるかもしれませんが、エラーで詰まって自力で解決できると半端ない達成感があるのでつい時間をかけがちです。</p>
<p>上手く解決できれば御の字ですが、大量の時間を投下した結果解決できず納期直前で「できませんでした。」では手の施しようがありません。</p>
<p>自分も最初は上手く頼れず、「何としても自力で解決してやる」と視野が狭くなっていました。</p>
<p>この行動が自分で自分の首を絞め、効率化から大きく遠ざかっていたんですよね。<br><br></p>
<p>当たり前ですがサイト制作は一人で成り立つものではありません。</p>
<p>周囲を上手に巻き込み進めていくことが、結果的に一番の時短だったと感じています。</p>



<h3 class="wp-block-heading">上流工程へガシガシ進出する</h3>



<p>前提として弊社は分業制で、ディレクター→デザイナー→コーダーの制作フローで進行しています。</p>



<p>コーディングは制作フローでいうと一番下流のフェーズです。</p>



<p>コーディングフェーズまでじっと待っているだけだと、思わぬ仕様やデザインが上がってきて苦しい思いをする可能性があります。</p>



<p>構成、デザインの段階からエンジニア視点での意見を発信していくことはプロジェクト全体のスムーズさにもつながりますし、個人的に学びが多いと感じました。</p>



<h2 class="wp-block-heading">まとめ</h2>



<p>ここで紹介した効率化の取り組みを実施し、少しずつですがサイト制作のスピードを上げていくことに成功しました。</p>
<p>まだまだ日々精進なので、おごらず謙虚にこれからもコーディングに向き合っていこうと思います。</p>
<p>それでは。<br><br></p>



<h4 class="wp-block-heading">採用</h4>



<p>弊社では現在Webプログラマーやシステム開発者を募集しています。</p>
<p>カジュアル面談も実施してますので、「まずは話聞いてみたい」という方もお気軽に！</p>
<p>皆様のご応募お待ちしています。</p>
<p><a href="https://jp.indeed.com/cmp/%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%83%95%E3%83%A9%E3%82%A4%E3%83%B3%E3%82%B0-%E3%83%8F%E3%82%A4-%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%B9" target="_blank" rel="noopener">Indeed</a></p>
<p><a href="https://www.wantedly.com/companies/flying-h" target="_blank" rel="noopener">Wantedly</a></p>
<p><!-- notionvc: 31dbc3c2-0bd2-4b3d-a8e5-8fcae0160f13 --></p><p>The post <a href="https://www.flying-h.co.jp/media/2023/11/21/optimization/">コーディングの効率化でホームページ制作・Web制作を時短する3つの方法</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>異体字ってなぁに？</title>
		<link>https://www.flying-h.co.jp/media/2023/07/31/selector/</link>
		
		<dc:creator><![CDATA[ぽよ]]></dc:creator>
		<pubDate>Mon, 31 Jul 2023 08:22:45 +0000</pubDate>
				<category><![CDATA[ホームページ制作]]></category>
		<category><![CDATA[マークアップ]]></category>
		<guid isPermaLink="false">/media/?p=7535</guid>

					<description><![CDATA[<p>みなさんどうもこんにちは！フロントエンドエンジニアのぽよです。 突然ですが、日本語って難しいですよね？他言語圏の方から「日本語は文字のバリエーションが多くて難しい」というお話を耳にしたことがあります。確かに「ひらがな・カ [&#8230;]</p>
<p>The post <a href="https://www.flying-h.co.jp/media/2023/07/31/selector/">異体字ってなぁに？</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></description>
										<content:encoded><![CDATA[<p></p>
<p><img decoding="async" src="/media/wp-content/uploads/2023/07/thumb.jpg" alt="" width="800" height="550" class="alignnone size-full wp-image-7541" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/thumb.jpg 800w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/thumb-300x206.jpg 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/thumb-768x528.jpg 768w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>みなさんどうもこんにちは！<br />フロントエンドエンジニアのぽよです。</p>
<p>突然ですが、日本語って難しいですよね？<br />他言語圏の方から「日本語は文字のバリエーションが多くて難しい」<br />というお話を耳にしたことがあります。<br />確かに「ひらがな・カタカナ・漢字」など、いろいろと組み合わせて書かれていますね。</p>
<p>そこに追い打ちをかけるようなお話をすると&#8230;<br />漢字の中にもバリエーションが存在することをご存じでしょうか？<br />有名なところで言うと「高」という字には「はしごだか」と呼ばれるものがあったり、<br />葛飾区と葛城市の1文字目は異なる表記だったり。</p>
<h2>異体字というもの</h2>
<p>よく見る文字とは微妙に違う形をした漢字を「旧字体」と表現されているのをたまに見かけますが、<br />実はその中に正確には「異体字」と呼ばれるものもあります。<br />厳密には異なる見た目をしている漢字であっても同一の文字であると処理されてしまい、<br />環境などによっては意図した字体での表記にならないということがあります。</p>
<p>同じ読みの苗字だけど実はちょっと字が違うんです&#8230;というあれです。<br />Web制作をしている中で地名やお名前などで出くわすこともあります。</p>
<h2>異体字に対応するには</h2>
<p>そんなときに利用したいのが「<strong>異体字セレクタ</strong>」です。<br />異体字セレクタとは、基底文字の後ろに記述することで字体を指定できるというものです。<br />ここで出てきた基底文字とはベースとなる文字のことです。</p>
<p>例として、葛飾区の「葛」という字の場合は「葛&amp;#xE0101;」と記述します。<br />この1文字目が基底文字、「&amp;」以降が異体字セレクタということになります。<br />上記の例では &#8220;「葛」という文字のE0101というパターン&#8221; と書いてあるようなイメージなので、<br />別のパターンを表現したい場合は異体字セレクタ内の数字の部分が変わってきます。</p>
<p>では、この異体字セレクタはどうやって選べばよいのかというと、<br />こちらの「<a href="https://747.github.io/vsselector/" target="_blank" rel="noopener">異体字セレクタセレクタ</a>」というツールを使用します。<br />ここで当該の基底文字を入力して検索すると、<br />下部にパターンの一覧とそれぞれに紐づいた異体字セレクタが表示されます。</p>
<p><img decoding="async" src="/media/wp-content/uploads/2023/07/img_01-800x408.jpg" alt="" width="800" height="408" class="alignnone wp-image-7545 size-large" srcset="https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/img_01-800x408.jpg 800w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/img_01-300x153.jpg 300w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/img_01-768x392.jpg 768w, https://www.flying-h.co.jp/media/wp-content/uploads/2023/07/img_01.jpg 1298w" sizes="(max-width: 800px) 100vw, 800px" /></p>
<p>ここから表示させたい字体のセレクタをコピーしてエディタで先ほどの例のように記述すると、<br />こちらが意図した字体で表示することができます。</p>
<h2>おわりに</h2>
<p>普段の生活では異体字をあまり気にしたことが無いという方も多いかもしれませんが、<br />Web制作ではお客様の会社の所在地やお名前で「この文字を出したい！」となった経験もあり、<br />今後もそういった場面があるかもしれません。<br />異体字セレクタを使用すれば正しい表記で掲載することができますので、<br />全国のワタナベ様、タカハシ様、ナラサキ様も安心してお申し付けくださいませ！</p>
<p>それではー。</p><p>The post <a href="https://www.flying-h.co.jp/media/2023/07/31/selector/">異体字ってなぁに？</a> first appeared on <a href="https://www.flying-h.co.jp/media">FHWノート</a>.</p>]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
