• TOP
  • ブログ
  • プロフィール
  • お問い合わせ
  • 岐阜 WordPress Meetup #76に参加してきた

    岐阜 WordPress Meetup #76に参加してきた

    11月15日に開催された、岐阜 WordPress Meetup #76に参加してきました。
    https://www.meetup.com/ja-JP/gifu-wordpress-meetup/events/304076652

    WordPressのテーマ開発者である、石川さん(『lightning』『X-T9』など)とキタジマタカシさん(『Snow Monkey』、『unitone』など)のお二人が登壇されるとのことで、ぜひお話を聞きたいと思い参加しました。

    登壇① 『プロっぽいページには理由がある ブロックパターン時代のページデザインのコツ』

    1つ目の登壇は、株式会社ベクトルの石川さんによる『プロっぽいページには理由がある ブロックパターン時代のページデザインのコツ』。
    ブロックエディタでサイトを作るときにどうやったらプロっぽいサイトにできるかという視点で、ブロックの取り扱い方のポイントについてお話しいただきました。

    石川さんのあげられたポイントとしては以下の2つでした。

    • 情報のグルーピングを徹底する
    • 情報の重要度を徹底する

    これらのポイントを実現するために注意する点として、余白を挙げられていました。
    ブロックエディタは自由に余白の設定やスペーサーブロックが入れられるため、余白が自由すぎるということがあります。
    そのため設計者以外にルールが伝わってないとトンマナが崩れるという問題が発生します。

    そこで余白のガイドラインを用意しておくことで担当者による違いをなくし、サイト内の統一感のあるデザインをしていこうということでした。

    ベクトルさんの余白のガイドラインはこちら
    https://patterns.vektor-inc.co.jp/margin-guide/

    個人的な考えとしても、Webサイト制作では情報の区切りやまとまりを意識することが大事だと思っていて、この話はかなり腑に落ちました。

    ガイドラインを作るのは時間がかかるところだとは思うのですが、あらかじめ余白など数値のルールを決めておくことで、更新時のデザインのブレがなくなることや、制作時に迷わなくなるというメリットもあると思うので、意識して取り入れたいところです。

    登壇② 『ブロックテーマでサイトをつくってみよう(unitone 編)』

    2つ目の登壇は、キタジマさんによる『ブロックテーマでサイトをつくってみよう(unitone 編)』。
    実際にunitoneをインストールしたWordPress環境を使って、ページを作りつつ、unitoneのオリジナルブロックの解説をお伺いしました。

    詳しくはunitoneのサイトを参照いただくのが良いと思いますが、unitoneは『Every Layout』という書籍で紹介されているレイアウトの考え方を取り入れているそうで、それがWordPressのブロックの相性がいいのではないかという考えのもと設計されているとのことでした。

    実際触ってみたところでも、さまざまなレイアウトを実現するためのブロックが用意されていて、驚いたり、感心したり、一言ではまとめられないほどすごいテーマだと感じました。

    unitoneのブロックの考え方は、『Every Layout』に書かれている考え方をもとに設計されているそうで、自分がWordPressテーマを編集するときや、WordPressを使わない制作の場面でも取り入れるとよさそうな考え方がたくさんあるなと思いました。

    感想

    テーマ制作者のお二人のお話は、どちらも余白やレイアウトというcssの設計の部分に関するところだったのですが、自分自身もcssを書くので、思い当たるところもたくさんあり、WordPressやテーマと関係がないところのWeb制作という意味でもとても参考になったと感じています。

    実際、自分自身はあまり既存テーマを利用してサイト制作をするということはしていないため、テーマそのものにお世話になることは少ないのですが、それぞれのブロックにどういうcssが当たっているかなどをみることはよくあるので、今回、どういった考え方で設計されているかということを聞けたのはとても良かったです。

    テーマとして良いものであることはもちろんですが、Web制作者としてはどのようにテーマが作られているのかを見るのも勉強になると思いました。

    yori3

    2024年11月17日
    【Web】いろいろ試してみた話
  • 【WordPress】ブロックエディタで画面端まで広がる画像とテキストのカラムレイアウトの作り方

    【WordPress】ブロックエディタで画面端まで広がる画像とテキストのカラムレイアウトの作り方

    下のような画像とテキストの2カラムのコンテンツで、画像が画面端まで、テキストは固定幅(もしくはコンテンツインナーの幅)になっているようなレイアウトをブロック再現してみようと思います。

    こういうやつです(参考:https://www.enpay.co.jp/service/top)

    実装方法

    ①カラムブロックを 50/50 で配置し、画像とテキストをそれぞれのカラムに入力します

    ②テキストはグループブロックでラップしておきます。

    ③カラムブロックの幅を「全幅」にします。

    ④テキストをラップしたグループブロックにテキストの最大幅を設定し、配置を左寄せにします。

    ⑤カラムブロックの横方向のブロックの間隔を「なし」(0)にします。

    ⑥テキストをラップしたグループブロックの水平方向のパディングを設定します。(コンテンツ幅と揃うようにするときれいかも)

    以上の操作をすることで、以下のようなレイアウトが完成です。(上記の手順はどの順番で操作しても問題ありません)

    ⑤〜⑥でカラムブロックの間隔を0にして、テキストのグループにパディングを設定しているのは、モバイルで縦積みになったときに画面端にテキストがくっついてしまうのを防止するためです。

    まとめ

    以前、案件で対応したときにがっつりCSSを書いて対応したのですが、今ならブロックだけでできるのでは?と思いついてやってみました。
    コーポレートサイトなどでよく見かけるレイアウトなので使い道はありそうかなと思います。

    余白や間隔の値や付け方はテーマによって異なるので、同じようにできないテーマもあることは注意が必要です。
    (この記事での手順の画面はTwenty Twenty-Fourのものを使用しています)

    yori3

    2024年11月10日
    【Web】いろいろ試してみた話
  • サイトデザインのリニューアル

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

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

    前のデザインはもう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】いろいろ試してみた話
  • 【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.