• TOP
  • ブログ
  • プロフィール
  • お問い合わせ
  • サイトデザインのリニューアル

    サイトデザインのリニューアル

    サイトデザインをリニューアルしました。

    前のデザインはもう5年くらい前に作ったもので、随分とそのままにしていたんですが、WordPressのブロックエディタもかなりバージョンアップして機能が増えてきたので、それに合わせる形で組み直そうと思ったのが始まりです。

    その上で、せっかくなので見た目の部分でも少し手を加えようと考えました。

    機能的な変更

    サイト全体をWordPressのブロックエディタの機能をメインにして構築するようにしました。
    基本的にはブロックでパーツを構成し、スタイルを選択し、それでも足りないところをCSSで追記するという形をとっています。

    理由としては、このサイトをブロックの機能を試す場としても使いたいと考えているということと、このサイトはブログを主として運用していくことを想定しているため、ブロックエディタを使う方が捗るだろうと考えたからです。

    今後ブログで色々なブロックの組み合わせを紹介できればと思っています。

    見た目の変更

    キーカラーの変更

    #61a6c6 → #00AFCC

    前はくすんだ青色のような色を使っていたのですが、もう少し明るさが欲しかったので、今回はターコイズブルーを採用しました。
    ターコイズブルーは緑みのある青色で、青の落ち着いた雰囲気と、緑の爽やかさ、活発さが合わさったイメージで、自分の目指す、落ち着きがあり、人当たりの良い人物像にぴったりだと思いました。

    ロゴデザイン

    ロゴデザインも少し変更しました。
    ロゴはPoppinsというフォントをベースに角を丸くして、柔らかい雰囲気が出るよう調整しました。人当たりよく、柔らかく人接したいという思いを込めています。
    また、iの点の部分を虫眼鏡に置き換えていますが、これは、興味を持ったことはとことん知りたいという自分の性格と、周りをよく観察して必要な行動を考えるという仕事への姿勢を表しています。

    まとめ

    ブロック中心での構築は、仕事ではやっていたのでそこまで抵抗はなかったですが、一つ一つのブロックの使用を理解して作成する必要があるので、そこはやはり苦労した点です。
    慣れてくると、ブロックでいろいろ表現できることが楽しくなってくるので、クライアントワークで納品するときにもそういった面白さみたいなものも一緒に伝えられたらいいなと思いました。

    せっかくサイトリニューアルしたので、今後はしっかりブログもやっていこうと思っています。

    今までクオリティやら内容やらで「これで出して良いのか」と悩みつつ、ほったらかしにしてた下書きたちをとりあえず生焼けの状態でも出していこうかなと。

    とりあえずCSSやWordPressのブロックエディタの下書きが溜まってるので、放出していきたいと思います。

    yori3

    2024年11月5日
    【Web】いろいろ試してみた話
  • 【CSS】フォトフレーム風のボックスを作る

    【CSS】フォトフレーム風のボックスを作る

    CSSで、写真の角を差し込んだフォトフレームのような見た目を再現してみようと思います。

    実装

    See the Pen Photo frame by Yoriyasu Nishimura (@yori3) on CodePen.

    解説

    htmlは外側の枠であるframeというクラス名のdivタグとその内側に画像を入れるboxというクラス名のdivタグで構成されています。

    boxクラスの擬似要素で白背景で1辺だけborderをつけた正方形を作り、それぞれ斜めに回転させて、画像にやや重なるように右上と左下に配置しています。それにより写真が切り込みに差し込んで固定されているような表現になります。

    ポイントとしては切り込み(擬似要素の辺)の長さが画像から少しだけはみ出るようにすることで、リアリティが出るかと思います。

    まとめ

    以前、いろいろサイトを見てたときに見つけたものを自分で再現してみました。

    ギャラリー的な要素などで利用できそうな小技なので、覚えておいて損はなさそうです。

    yori3

    2024年10月23日
    【Web】いろいろ試してみた話
  • Google formをカスタマイズしてサイトのお問い合わせフォームを作る

    Google formをカスタマイズしてサイトのお問い合わせフォームを作る

    サイトのお問い合わせフォームといえばWordPressのサイトであればプラグインを入れたり、静的なサイトだったらフリーのphpのメールフォーム(こんなのとか)を入れたりするのがよくある対応ですが、今回はGoogle formをサイトに連携してお問い合わせフォームを作る方法をやってみたいと思います。

    概要

    Google formはそのままサイトに埋め込むこともできるのですが、それだとサイトのトンマナにあっていないため使いづらかったり、サイトのコンテンツとしてみなされずスルーされる可能性も考えられます。

    そこでGoogle formを利用しつつ、デザインをカスタマイズして、実用性のあるフォームの作成を考えていきたいと思います。

    DEMOはこちらに

    フォームのページ

    ▼もとになったフォーム
    https://docs.google.com/forms/d/1eQHZhmrpjji7wn_9eZI2vIJdM1weV2C2wM_LmaLXBkU/edit

    実装方法

    Google formの用意

    まずはGoogle formを新規作成して必要な項目を追加します。
    作成したら発行されたリンクでフォームを開き、ディベロッパーツールでソースを参照します。
    すると、このフォームのaction属性と各項目のname属性を取得することができます。
    これを後ほど実装したフォームで使用します。

    フォームのhtmlの実装

    htmlは実際のフォームと変わりなくinputタグやselectタグなどを用いて作成していきます。
    そのほかのdivタグやpタグを使っても問題ありません。

    作成したhtmlに先ほど作成したフォームからaction属性とname属性をコピーしてそれぞれの項目に貼り付けます。

    Google formのhtml
    エディターのコード
    エディターのコード

    ここで一度フォームを送信してみましょう。先ほどのフォームに回答が送られているはずです。

    完了画面の実装

    今の段階でフォームを送信すると、Google formの完了画面に遷移してしまうと思います。
    これだと急に外部サイトに移動してしまってユーザーとしては使いづらさを感じてしまいます。

    そこで同じサイト内の完了ページに遷移するようにしてあげましょう。

    まずあらかじめ完了ページのhtmlを用意しておきます。

    それからフォームのhtmlのほうに戻り、formタグに target=”hidden_iframe” と onsubmit=”submitted=true;” を追記します。

    <form action="https://docs.google.com/forms/~~~~~~" method="post" target="hidden_iframe" onsubmit="submitted=true;">

    そしてformタグの閉じタグの後に以下を記述します。

    <script type="text/javascript">
      var submitted = false;
    </script>
    <iframe
      name="hidden_iframe"
      id="hidden_iframe"
      style="display: none"
      onload="if(submitted)  {window.location='完了ページのパスを入れる';}"
    ></iframe>

    これで送信後、用意した完了ページに遷移するかと思います。

    ただフォームを実装するだけならここまででいいのですが、より実用的なものにするために確認画面を実装していきます。

    確認画面の実装

    フォームの画面はオリジナルのものですので、確認画面というものは存在しません。ということで自分で用意していきます。

    と言っても確認ページに一度遷移してから完了画面に遷移させるというのは技術的にかなり難易度が高い話・・・

    ということで今回はJSの力を使います。

    簡単に説明すると、入力項目の下に、確認画面用のhtmlをあらかじめ用意して非表示にしておき、確認ボタンをクリックしたときに、入力内容を入れた状態で表示させる、という方法を取ります。

    ①まず、確認画面のhtmlを記述します。
    場所はformタグの中であればどこでいいですが、入力のhtmlの下あたりがわかりやすくてよさそうです。
    この確認画面のhtmlの後に送信ボタンを設置します。

    ②次に確認画面のhtmlと送信ボタンを非表示にし、入力のhtmlの後に確認ボタンを設置します。

    ③そして、確認ボタンをクリックすると、フォームに入力された内容をそれぞれ確認画面の表示位置に入れた状態で確認画面を表示する処理をJavascriptで記述します。

    <form action="https://docs.google.com/forms/・・・・" method="post" target="hidden_iframe" onsubmit="submitted=true;">
    
    ~~~入力のhtml~~~
    
    <button type="button">確認する</button>
    
    <div class="formConfirm" id="confirm">
    
    ~~~確認のhtml~~~
    
    <button type="submit">送信する</button>
    
    </div>
    
    </form>

    ↑コードの一例

    ↑動作のイメージ

    自動返信メールの実装

    最後に自動返信メールの実装を進めていきましょう。

    ここはGoogle form のアドオンを利用します。

    「Email Notifications for Forms」というアドオンを導入します。
    https://workspace.google.com/marketplace/app/email_notifications_for_google_forms/984866591130?hl=ja

    その名の通りメール関係の機能がいろいろあるアドオンですが、今回は「Create Email Notification」を選択します。

    すると画面右下に設定画面が出てきますので、自動返信メールの設定をしていきます。

    「Submitter Email Field」という項目が送信先に使用するフィールドです。
    「How would you like to create the email template for notifications?」というところでメールの文面を編集できます。html編集もあるので、htmlメールも行けるかも。

    こちらは無料プランだと位置に20件までしか送れないので、実用性を考えると有料プランになってしまうかと思います。

    メリット・デメリット

    メリット

    構築が簡単

    Googleの機能を使うので、比較的簡単にフォームの構築を進めることができます。
    送られたメールもスプレッドシートに送ることができるので、管理がしやすいです。

    デメリット

    Googleに依存する

    Googleの機能を使っているので、Google側で変更があってこれまで通りの運用ができなくなった場合にほかのサービスに乗り換えるなど対応が必要になります。
    また、機能によっては有料のものがあり、条件に該当する場合は導入までのハードルになりえます。

    まとめ

    Google formを利用してのお問い合わせフォームの構築は比較的簡単に進めることができ、もともといろいろな機能が用意されているためカスタマイズもしやすいです。

    フォームの選定でお悩みの場合は一考の価値ありそうです。

    yori3

    2023年9月23日
    【Web】いろいろ試してみた話
  • SVGアイコンをフォントとして使ってみた

    SVGアイコンをフォントとして使ってみた

    サイトにアイコンを使うとき、png画像として入れたり、svgで入れたり、アイコンフォントを使ったり、いろいろな方法ですると思いますが、今回はsvgのアイコンをフォント化してWebフォントとして使う方法をまとめてみます。

    やったこと

    svgのアイコンをフォント化はicomoonというサービスを使います。

    icomoonではアイコンセットをダウンロードできたり、svgデータを組み合わせてsvgスプライトにできたりといろいろサービスがあるのですが、今回はsvgデータをフォントセットにするサービスを使います。

    サイトを開いたら右上の「IcoMoon App」をクリックします。

    次の画面で右上の、「Untitled Project」をクリックすると、プロジェクト選択画面になりますので、「New Project」で新しいプロジェクトを作成し、「load」します。

    元の画面に戻るので、「Import Icons」をクリックするか、ドラッグ&ドロップで追加できます。

    追加したアイコンをクリックで選択するとハイライトするので、その状態で右下の「Generate Font」をクリックするとフォントセットが出来上がります(画像)

    問題なければ右下の「Download」でフォントファイルがダウンロードできます。

    あとはダウンロードしたフォントファイルをサーバーにアップして、CSSのfont-faceで読み込めば使えます。

    また、ダウンロードした中にあるjsonファイルをicomoonのサイトで読み込めば、そのフォントセットをロードでき、複数人でも追加・編集が行えます。

    メリット

    色の変更がしやすい

    フォントなのでcssのcolorプロパティで設定でき、色の変更がしやすいです。また、colorプロパティは継承するので、一緒に並べる文字と同じ色にするのも簡単にできます。

    サイズの変更がしやすい

    通常の画像であれば幅や高さを指定するところですが、フォント化するとfont-sizeで調整します。高さ = font-sizeになります。
    こちらも一緒に並べる文字と同じサイズにする場合は簡単に扱えます。
    もちろんサイズを変更しても荒くなることはありません。

    注意点

    フォントにするときにsvgファイルの取り扱いで気をつけることがあります。

    • 線はカットされる(塗りのみ適用される)。
    • 離れたパスは別々に扱われる。
    • 太さはnormalとboldの2種類なので、微調整ができない。

    と言うことで、以下の手順でIllustratorで調整してから、書き出します。

    1. 線の太さを調整
    2. (パスが分かれている場合)複合パスにする
    3. パスをアウトライン化する

    また、ダウンロードしたアイコンを使用する場合はダウンロード元のライセンスや利用規約をよく確認してから使用しましょう。

    まとめ

    最近使ってよかったので、まとめてみました。

    使いどころとしては、同じアイコンを複数の箇所で色を変えて使うときに効果を発揮するのではないかと思います。
    作るのはちょっと手間ですが、一度用意すると使い回せるので便利です。

    アイコンをたくさん使うWebサービスなどで使うとメリットを感じ取れるのではないかと思います。

    yori3

    2020年3月16日
    【Web】いろいろ試してみた話
    svg, アイコンフォント
  • 【Vue.js】selectタグのデザインをカスタマイズ

    【Vue.js】selectタグのデザインをカスタマイズ

    先日、jQueryを使ってselectタグをカスタマイズする方法をブログに書いたんですが、JSが長いし、なんかややこしいし、ということでVue.jsで作り直してみました。

    demo

    実装方法

    HTML

    <div id="select">
      <div class="selectBox">
    
    <!-- カスタマイズ用のdivタグ -->
        <div class="selectBox__output" v-on:click="selectorshow=!selectorshow" v-bind:class="[ selectorshow ? 'open' : '' ]">
          <span v-for="selector in selectors" v-show="selected == selector.value" v-bind:key="selector.id">{{selector.text}}</span>
        </div>
        <transition name="accodion">
        <div class="selectBox__selector" v-show="selectorshow">
          <div class="selectBox__selectorItem" v-for="selector in selectors" v-on:click="selected=selector.value,selectorshow=!selectorshow" v-bind:key="selector.id">{{selector.text}}</div>
        </div>
        </transition>
    <!-- カスタマイズ用のdivタグ -->
    
        <select name="" id="" v-model="selected">
          <option v-for="selector in selectors" v-bind:value="selector.value" v-bind:key="selector.id">{{selector.text}}</option>
        </select>
      </div>
    </div>

    CSS

    *{
      box-sizing: border-box;
    }
    ul,li{
      margin: 0;
      padding: 0;
      list-style: none;
    }
    
    .selectBox{
    position: relative;
    width: 10em;
    height: 60px;
    }
    .selectBox select{
      position: absolute;
      left: 100%;
      top: 100%;
      width: 100%;
      height: 100%;
    }
    .selectBox__output{
      display: flex;
      align-items: center;
      position: relative;
      width: 100%;
      height: 100%;
      padding: 1em;
      border: 1px solid #ccc;
      background-color: #fff;
      border-radius: 5px;
      z-index: 2;
    }
    .selectBox__output::after{
      display: block;
      position: absolute;
      right: 3%;
      top: 50%;
      font-family: "CONDENSEicon";
      transform: translateY(-50%);
      content: "û";
    }
    .selectBox__output.open::after{
      transform: translateY(-50%) rotate(180deg);
    }
    .selectBox__selector{
      position: absolute;
      left: 0;
      top: calc(100% - 1px);
      width: 100%;
      border: 1px solid #ccc;
      background-color: #fff;
      transform-origin: left top;
      z-index: 10;
    }
    .selectBox__selectorItem{
      width: 100%;
      padding: .75em;
    }
    .selectBox__selectorItem+.selectBox__selectorItem{
      border-top: 1px solid #ccc;
    }
    .selectBox__selectorItem:hover{
      background-color: #0d61ad;
      color:#fff;
    }
    
    .accodion-enter-active, .accodion-leave-active {
      transition: .5s;
      overflow: hidden;
    }
    .accodion-enter, .accodion-leave-to {
      transform: scaleY(0);
    }
    .accodion-leave, .accodion-enter-to {
      transform: scaleY(1);
    }

    Vue.js

    var tab = new Vue({
      el: '#select',
      data: {
        selected: 'cat1',
        selectorshow: false,
        selectors: [
          { id: 1, text: "カテゴリ1", value: "cat1" },
          { id: 2, text: "カテゴリ2", value: "cat2" },
          { id: 3, text: "カテゴリ3", value: "cat3" },
        ]
      }
    });
    

    簡単な説明

    まず、JSでselectorsという配列を用意し、optionタグと見た目カスタマイズ用のdivタグにv-forで展開します。

    HTMLでは、selectタグにv-modelディレクティブにselectedという値を持たせています。これは、selectタグの変更を変数に格納するためのもので、カスタマイズ用のdivタグと値を共有できるようになります。
    selectedには、カスタマイズ用のdivタグで選択した要素の値が格納されるようになっており、jQueryでやっていたJSで取得して格納して出力みたいなのをこれ一個でやってくれます。

    カスタマイズ用のdivタグは、.selectBox__outputという出力用のタグと、.selectBox__selectorという選択肢用のタグがあります。
    出力用のタグでは、クリック時に変数のbool値を操作しており、そのbool値によってクラス追加や選択肢用のタグの表示非表示を操作しています。v-bind:classに設定されてるのは三項演算子というもので、selectorshow変数がtrueならopenクラスをつけるというものです。

    選択肢用のタグでは、v-showディレクティブでselectorshow変数がtrueなら表示するというようになっています。
    それぞれの選択肢ではクリック時にselectedに配列のvalueの値を格納するようにしています。
    このvalueの値はoptionタグのvalueの値と一緒になっているので、選択されたものがselectedに格納され、v-modelディレクティブを通じてselectタグに反映されるようになっています。
    一緒にv-on:clickの値になっているのは、選択肢を閉じる為のものです。

    また、選択肢を囲むようにtransitionというタグがあります。
    これはv-showディレクティブで表示非表示を切り替えるときにアニメーションをつける為のもので、これで囲むとCSSでアニメーションを設定できます。
    CSSの最後の10行がそれになります。

    まとめ

    v-modelという便利なやつのおかげで簡単にselectタグとの連動ができました。
    これが双方向バインディングってやつです。
    「双方向」なので、今回はやってませんが、selectタグの値を変更してもdivタグの方に反映されます。
    selectタグ以外のform系要素で使えるそうなので、またいろいろやってみたいと思います。

    このくらいになると、だいぶVue.jsの方が便利という感じがしてきました。
    そろそろ規模が大きめのものにチャレンジしてみようかな。。。

    yori3

    2020年2月20日
    【Web】いろいろ試してみた話
    css, html, vue.js
  • 【jQuery】selectタグのデザインをカスタマイズ

    【jQuery】selectタグのデザインをカスタマイズ

    フォームをつくるとき、見た目を変えたいことがあるかと思います。
    だいたいの要素はCSSでカスタマイズできますが、selectタグのoption要素にはCSSが効きません。

    そこで、CSSとjQueryでselectタグを操作する方法をまとめました。

    demo

    実装方法

    HTML

    <div id="select">
      <div class="selectBox">
        <div class="selectBox__output"></div>
        <div class="selectBox__selector">
          <div class="selectBox__selectorItem" data-select="cat1">カテゴリ1</div>
          <div class="selectBox__selectorItem" data-select="cat2">カテゴリ2</div>
          <div class="selectBox__selectorItem" data-select="cat3">カテゴリ3</div>
        </div>
        <select name="" id="select01">
          <option value="cat1">カテゴリ1</option>
          <option value="cat2">カテゴリ2</option>
          <option value="cat3">カテゴリ3</option>
        </select>
      </div>
    </div>

    CSS

    *{
      box-sizing: border-box;
    }
    ul,li{
      margin: 0;
      padding: 0;
      list-style: none;
    }
    
    .selectBox{
      position: relative;
      width: 10em;
      height: 60px;
    }
    .selectBox select{
      position: absolute;
      left: 0;
      top: 0;
      width: 100%;
      height: 100%;
    }
    .selectBox__output{
      display: flex;
      align-items: center;
      position: relative;
      width: 100%;
      height: 100%;
      padding: 1em;
      border: 1px solid #ccc;
      background-color: #fff;
      border-radius: 5px;
      z-index: 2;
    }
    .selectBox__output::after{
      display: block;
      position: absolute;
      right: 3%;
      top: 50%;
      font-family: "CONDENSEicon";
      transform: translateY(-50%);
      content: "û";
    }
    .selectBox__output.open::after{
      transform: translateY(-50%) rotate(180deg);
    }
    .selectBox__selector{
      display: none;
      position: absolute;
      left: 0;
      top: calc(100% - 1px);
      width: 100%;
      border: 1px solid #ccc;
      background-color: #fff;
      z-index: 10;
    }
    .selectBox__selectorItem{
      width: 100%;
      padding: .75em;
    }
    .selectBox__selectorItem+.selectBox__selectorItem{
      border-top: 1px solid #ccc;
    }
    .selectBox__selectorItem:hover{
      background-color: #0d61ad;
      color:#fff;
    }

    jQuery

    //初期値
    $('.selectBox__output').each(function () {
      const defaultText = $(this).next('.selectBox__selector').children('.selectBox__selectorItem:first-child').text()
      $(this).text(defaultText);
    })
    
    //出力の枠をクリックした時の動作
    $('.selectBox__output').on('click', function (e) {
      e.stopPropagation();
      if ($(this).hasClass('open')) {
        $(this).next('.selectBox__selector').slideUp();
      } else {
        $(this).next('.selectBox__selector').slideDown();
      }
      $(this).toggleClass('open');
    });
    
    //選択肢をクリックした時の動作
    $('.selectBox__selectorItem').on('click', function () {
      const selectVal = $(this).data('select');
      const selectText = $(this).text();
      $(this).parent('.selectBox__selector').prev('.selectBox__output').text(selectText);
      $(this).parent('.selectBox__selector').slideUp();
      $(this).parents('.selectBox__output').slideDown();
      $(this).parent('.selectBox__selector').next('select').val(selectVal);
    });

    簡単な説明

    空のdivタグ(.selectBox__output)を用意し、そこに選択しているoption要素のテキストをjQueryで取得して出力するようにしています。(jQueryのselectText変数に値が入る)

    また、そのすぐ後に、option要素と同じ選択肢を入れたdivタグ(.selectBox__selector)を用意しています。この選択肢にはdata属性でoption要素のvalueと同じ値を持たせています。
    そうすることで、この選択肢を選択すると、同じ値のoption要素が選ばれた状態にできるようになっています。(jQueryのselectVal変数に選択した値が入る)

    こうして用意した要素はdivタグやspanタグなので、CSSで見た目をカスタマイズすることができます。
    selectタグはCSSで後ろに隠してしまえばOKです。
    (demoではわかりやすいように見える位置においています。)

    まとめ

    form系のタグはブラウザごとに見た目が異なるので、サイトのトンマナに合わせて変更したいということはよくあると思います。
    radioやcheckboxなどはCSSだけでも見た目カスタマイズできるのですが、selectタグはどうにもならず、jQueryでいろいろすることになってしまいました。。。

    もう少し手軽できればなあ、と思うのですが、optionにCSSが効かないのでどうしようもない。。。

    yori3

    2020年2月16日
    【Web】いろいろ試してみた話
    css, html, jQuery
前のページ
1 2 3 4 … 11
次のページ

©️ 2024 yori3 All rights reserved.