Quantcast
Channel: CSSタグが付けられた新着記事 - Qiita
Viewing all 8767 articles
Browse latest View live

【Rails】deviseを用いたユーザー新規登録機能の実装(基礎〜少し応用)

$
0
0

はじめに

Ruby on Rails を用いてWEBアプリを作成中です。
ユーザー新規登録の機能を実装するために、「devise」というgemを用いることにしました。
備忘もかねて、本文に実装した内容を残しておきます。
errorで困ったポイントも残しておきますので、参考にしていただけると幸いです^^

専門用語や参考にさせていただいた記事は最後に記載させていただいております。
「これ、なんで記述してるんだろう?」と、私自身が初めて作成した時に感じたポイントでもありますので、
初心者の方は気になるところかとも思います。
そちらも参照していただければと思います。

今回の方法はあくまで一つの実装方法でしかなく、やり方は色々あるのと、
私もまだ未熟なため、わかりにくい記述や余分な記述もございますし、調べきれてない、試しきれてないところもございます。
共にブラッシュアップしていければとも思ってますので、ご指摘もいただければと思います。

記載しきれなかった部分は、随時更新か、別途記事を用意いたします。

実装の目標

今回は以下の画像のような表示を目標として実装しました。
全てを解説するのは大変だったので、「ニックネーム」「メールアドレス」「パスワード」「生年月日」のみに絞っておりますのでご了承ください。
カラムのカスタマイズ、エラー表示、パスワードの表示/非表示、生年月日の選択など、「devise」の基本だけでなく、少し工夫が必要な内容も網羅してるかと思いますので、参考になれば幸いです。
Screenshot from Gyazo
Screenshot from Gyazo

1. deviseのインストール手順

 1-1. Gemfileに追記

(前略)
gem 'devise'
(後略)

※注意
「development、test、production」のgroup内に記述すると特定の環境でのみ使用する設定となりますので、group外に記述するようにしてください。

 1-2. コマンドの実行(インストール)

$ bundle install
$ rails g devise:install

2. Userモデルを作成

インストール後、モデルとテーブルを作成するために、以下をターミナルで実行してください。
通常のモデル作成とはコマンドが違うので注意してください。

$ rails g devise user 

マイグレーションファイルとモデルファイルが出来るので、以下のように記述ください。

2020*****_devise_create_users.rb
classDeviseCreateUsers<ActiveRecord::Migration[5.0]defchangecreate_table:usersdo|t|t.string:nickname,null: falset.string:email,null: false,default: ""t.string:password,null: false,default: ""t.string:encrypted_password,null: false,default: ""t.date:birthday,null: false# 〜省略〜endadd_index:users,:email,unique: true# 〜省略〜endend
app/models/user.rb
classUser<ApplicationRecord# Include default devise modules. Others available are:# :confirmable, :lockable, :timeoutable and :omniauthabledevise:database_authenticatable,:registerable,:recoverable,:rememberable,:validatableVALID_EMAIL_REGEX=/\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/iVALID_PASSWORD_REGEX=/\A(?=.*?[a-z])(?=.*?\d)[a-z\d]+\z/i# 〜省略〜validates:nickname,presence: true,length: {maximum: 20}validates:email,presence: true,uniqueness: true,format: {with: VALID_EMAIL_REGEX}validates:password,presence: true,length: {minimum: 7},format: {with: VALID_PASSWORD_REGEX}validates:birthday,presence: true# 〜省略〜end

モデル「user.rb」について
「VALID_EMAIL_REGEX」「VALID_PASSWORD_REGEX」は正規表現によって、特定の文字を弾くようにしております。
「presence: true」は記述することで、空で登録することを弾くようにしてます。
「length: { maximum: 20 }」と「length: { minimum: 7 }」は文字数制限です。

ここで、以下の「devise.rb」に記述されてる「config.password_length = 6..128」についても、次のように編集しておきます。
この数字は文字制限を表してます(つまり、minimumが「6」です)。
理由はモデル「user.rb」より、今回passwordは7文字以上としているため、minimumが「7」である必要があります。
また、こちらを編集後はサーバーの再起動をしないと、反映されませんのでご注意を。

「devise.rb」の「config.password_length = 6..128」を編集した理由は、そのままにするとモデル「user.rb」側のバリデーション「length: { minimum: 7 }」と「devise.rb」側のバリデーション「config.password_length = 6..128」が共存することになるため、2つのバリデーションに引っかかって、2つのエラー表示されてしまうからです。
どちらか片方を削除する方法もありかと思いますが、経験もかねて、どちらも残す方法しか試せておりません。

config/initializers/devise.rb
# frozen_string_literal: true# Use this hook to configure devise mailer, warden hooks and so forth.# Many of these configuration options can be set straight in your model.Devise.setupdo|config|Rails.application.credentials[:secret_key_base]# 〜省略〜config.password_length=7..128# 〜省略〜end

最後にmigrationファイルをデータベースに反映するために、以下のコマンドを実行。

$ rails db:migrate

3. コントローラーの編集

Viewなどを先に提示してもよかったのですが、エラー表示などについての説明を一緒にした方が良いと判断し、ルーティングやコントローラーの設定を先に説明いたします。

まずはコントローラーから。
今回はユーザー新規登録(サインアップ/sign_up)の実装についてですので、コントローラーは「application_controller.rb」のみで大丈夫です。
以下のように記載します。

「configure_permitted_parameters」メソッドの定義をしてますが、deviseをインストールすることでdevise_parameter_sanitizerのpermitメソッドが使えるようになります。これがストロングパラメータに該当する機能です。サインアップ時に入力された「nickname、email、password、birthday」のキーの内容の保存を許可しています。

app/controllers/application_controller.rb
classApplicationController<ActionController::Baseprotect_from_forgerywith: :exceptionbefore_action:configure_permitted_parameters,if: :devise_controller?protecteddefconfigure_permitted_parametersadded_attrs=[:nickname,:email,:password,:birthday]devise_parameter_sanitizer.permit:sign_up,keys: added_attrsendend

4. ルーティングの編集

以下のように記載してください。

注意点としては、「routes.rb」の順番です。
「users/:id」が「users/sign_in」を包括してエラーが発生しないように、「devise_for :users」を「resources :users」より先に書く必要があります。

また、deviseでサインアップする際に、例えばパスワードを忘れて保存しようとしてエラーが発生すると、親ページにリダイレクトされます。
つまり、サインアップページ「/users/sign_up」でエラーが発生した場合、「/users」にリダイレクトされてしまいます。
そのまま登録するとルーティングエラーが表示されます。

これを回避するために、「devise_scope :users」以下の記述を追記して、任意のルーティングをさせています。
方法はいくつかありますが、今回は手っ取り早そうです。

config/routes.rb
Rails.application.routes.drawdodevise_for:usersdevise_scope:usersdoget'/users',to: redirect("/users/sign_up")end# 〜省略〜end

5. Veiwの編集

まずは、以下のコマンドを実行してください。Modelに対応するViewが生成されます。
Modelには「users」などを入れる文献が多ので、以下は「$ rails g devise:views users」で実行してます。
私が学んだ某スクールで最初に学んだ時は「devise」でしたので、ユーザーマイページと分けるために、私の場合は「devise」で生成してますが。

$ rails g devise:views Model

※生成されるViewファイル
 app/views/users/confirmations/new.html.erb
 app/views/users/mailer/confirmation_instructions.html.erb
 app/views/users/mailer/password_change.html.erb
 app/views/users/mailer/reset_password_instructions.html.erb
 app/views/users/mailer/unlock_instructions.html.erb
 app/views/users/passwords/edit.html.erb
 app/views/users/passwords/new.html.erb
 app/views/users/registrations/edit.html.erb
 app/views/users/registrations/new.html.erb
 app/views/users/sessions/new.html.erb
 app/views/users/shared/_links.html.erb
 app/views/users/unlocks/new.html.erb

 

 5-1. HTML/HAMLの記述

「registrations/new.html.erb」をユーザー新規登録ページとして編集していきます。
また、以下の通り、HTMLからHAMLに変換して記述してます。

app/views/users/registrations/new.haml.erb
.signup__main
    .signup__main__content
      %h2.signup__main__content__head
        会員情報入力

      = form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f|

     # 〜省略〜

              .field
                .field-label 
                  = f.label 'ニックネーム'
                %span.form-require 必須
                .field-input
                  = f.text_field :nickname, class: "field-input-full", autofocus: true, autocomplete: "nickname", placeholder: "例)メルカリ太郎"
                .input-error
                  = resource.errors.full_messages_for(:nickname)[0]

              .field
                .field-label
                  = f.label 'メールアドレス'
                %span.form-require 必須
                .field-input
                  = f.email_field :email, class: "field-input-full", autofocus: true, autocomplete: "email", placeholder: "PC・携帯どちらでも可"
                .input-error
                  = resource.errors.full_messages_for(:email)[0]

              .field
                .field-label 
                  = f.label :password, 'パスワード'
                  %span.form-require 必須
                .field-input.toggle
                  = f.password_field :password, class: "field-input-full", autocomplete: "off", autocomplete: "password", placeholder: "7文字以上の半角英数字", id:'password'
                  .checkbox-field
                    %input#js-passcheck.checkbox.js-password-toggle{type: "checkbox"}
                    %label.btn-label.js-password-label{for: "js-passcheck"}
                      %i.fas.fa-eye-slash{style: "font-size:20px;color:#808080"}
                .input-error
                  = resource.errors.full_messages_for(:password)[0]
                .field-info
                  ※ 英字と数字の両方を含めて設定してください

              .field
                .field-label 
                  = f.label '生年月日'
                %span.form-require 必須
                .birthday-select
                  = raw sprintf(f.date_select( :birthday, use_two_digit_numbers: true, prompt: "--", start_year: Time.now.year, end_year: 1900, date_separator: '%s'), '年 ', '月 ') + "日"
                .input-error
                  = resource.errors.full_messages_for(:birthday)[0]

     # 〜省略〜

              .actions
                = f.submit "登録", class: 'btn'

 

 5-2. エラー表示

今回のエラー表示は、ActiveRecordのvalidatesでエラーになった時に表示されるメッセージを利用します。
上記のように、バリデーションエラーは「errors.full_messages_for(:attribute_name)」で各attributeのエラーメッセージは取得してます。

なるほど!
ん?「各attribute」って何?

まずは何も考えずに、ネット上から「devise.ja.yml」をダウンロードし、「/config/locales」に保存してください。
次に、「devise.ja.yml」に以下を追記。
ここに追記した、「birthday、nickname、email、password」が「attribute」です。

ついでに、日本語化も実施。
「ja.yml」をネットからダウンロードし、先ほどと同じく「/config/locale/」以下に入れる。
「"%{attribute}%{message}"」とあるように、バリデーションエラーの内容に合わせて、「attribute」と「message」を選択してくれる。

config/locales/devise.ja.yml
ja:activerecord:attributes:user:birthday:"生年月日"nickname:"ニックネーム"email:Eメールpassword:パスワード  # 〜省略〜
config/locales/ja.yml
# 〜省略〜errors:format:"%{attribute}%{message}"messages:accepted:を受諾してくださいblank:を入力してください# 〜省略〜

 

 5-3. パスワードの表示/非表示

「/registrations/new.haml.erb」のパスワード入力は、何もしなければ非表示です。
何かしらのアクションを起こしたら、表示出来るようにしないと、利用者にとってわかりにくかったりします。
今回は、最近よく見る「目のマーク」を押したら表示/非表示を切り替えられるようにjavascriptとSCSSを駆使して表現しました。
参考までに一部コードを提示します。
ポイントとしては、「(password).attr('type','text');」「(password).attr('type','password');」を切り替えることで、「f.password_field」が持ってる「type」を切り替えることができ、表示/非表示を切り替えることができます。

app/views/users/registrations/new.haml.erb
    # 〜省略〜

  .field-input.toggle
    = f.password_field :password, class: "field-input-full", autocomplete: "off", autocomplete: "password", placeholder: "7文字以上の半角英数字", id:'password'
    .checkbox-field
      %input#js-passcheck.checkbox.js-password-toggle{type: "checkbox"}
      %label.btn-label.js-password-label{for: "js-passcheck"}
        %i.fas.fa-eye-slash{style: "font-size:20px;color:#808080"}

     # 〜省略〜
stylesheets/modules/users.scss
.toggle{position:relative;.checkbox-field{position:absolute;right:15px;top:45px;.checkbox{display:none;}}}
app/assets/javascripts/registrations_new.js
$(function(){varpassword='#password';varpasscheck='#js-passcheck';$(passcheck).change(function(){constpasswordLabel=document.querySelector('.js-password-label');if($(this).prop('checked')){$(password).attr('type','text');passwordLabel.innerHTML='<i class="fas fa-eye" style="font-size:20px;color:#808080"></i>';}else{$(password).attr('type','password');passwordLabel.innerHTML='<i class="fas fa-eye-slash" style="font-size:20px;color:#808080"></i>';}})})

 5-4. 生年月日の選択

以下の「new.haml.erb」の通り、「date_selectタグ」という方法を使って実装しました。
超簡単です。

app/views/users/registrations/new.haml.erb
    # 〜省略〜

  .birthday-select
    = raw sprintf(f.date_select( :birthday, use_two_digit_numbers: true, prompt: "--", start_year: Time.now.year, end_year: 1900, date_separator: '%s'), '年 ', '月 ') + "日"

     # 〜省略〜

ですが1点、注意点があります。
バリデーションエラーが発生すると、「field_with_errors」クラスのdivタグが挿入され、「+ "日"」が切り離されてしまい、以下の画像のようにズレてしまいます。
Screenshot from Gyazo

【バリデーションエラー発生時】app/views/users/registrations/new.haml.erb
    # 〜省略〜

  .birthday-select
    = raw sprintf(f.date_select( :birthday, use_two_digit_numbers: true, prompt: "--", start_year: Time.now.year, end_year: 1900, date_separator: '%s'), '年 ', '月 ')
 .field_with_errors
   + "日"

     # 〜省略〜

これを回避する方法はいくつかあるようですが、今回は以下のように、「config/application.rb」に「config.action_view.field_error_proc = Proc.new { |html_tag, instance| html_tag }」を追記しました。
追記後、サーバーを再起動すると、追記が反映され、Railsによる自動挿入が回避できます。

config/application.rb
# 〜省略〜moduleFleamarketAppTeamAclassApplication<Rails::Application# 〜省略〜config.action_view.field_error_proc=Proc.new{|html_tag,instance|html_tag}endend

最後に

最後まで読んでいただきありがとうございます。
以上で、ユーザー新規登録についての実装は終わりです。

本記事はカスタムの部分で、大枠の作業フローと、小技的なところで参考にはなるかと思いますので、活用いただければ幸いです。
もっとわかりやすい記事、個々の機能で詳しく記載された記事はたくさんございますので、そこに至るまでのキッカケにもなればとも思っております。

今回私も、以下の記事を主に参考にさせていただきました。
作者の方々には感謝申し上げます。

量が多いため割愛させていただいておりますが、他にも参考にした記事はたくさんありますので、それら記事にも感謝です。
本記事を参考にされる方は、それらの記事も参考にしていただければと思います。

参考記事

・deviseについて
-> rails devise完全入門!結局deviseって何ができるの?
-> 【Rails】deviseの使い方を徹底解説!
-> Deviseでログイン機能をつくる [Ruby on Rails]
-> Deviseの設定手順をまとめてみた。 その1 導入編

・encrypted_password
->Gem Deviseによるパスワードの保存及び保安方法

・add_index
->データベースにindexを張る方法

・正規表現とは
-> https://www.megasoft.co.jp/mifes/seiki/about.html

・正規表現(ライブラリ)
-> https://github.com/kkos/oniguruma/blob/master/doc/RE.ja
-> http://k-takata.o.oo7.jp/mysoft/bregonig.html

・正規表現(確認ツール)
-> https://rubular.com/

・protect_from_forgery with: :exception(CSRF対策)
-> RailsのCSRF保護を詳しく調べてみた(翻訳)

・日本語化
-> https://qiita.com/kusu_tweet/items/b534c808ac1ee0382f05)

・エラー表示
-> ActiveRecordのvalidatesで表示されるエラーメッセージのフォーマットを変更する
-> 【Rails】バリデーションのエラーメッセージを取得・表示・日本語化する方法を完全解説!

・生年月日の選択
-> 【Rails】date_selectタグの使い方メモ
-> Railsのバリデーションエラーで、「field_with_errors」によるレイアウト崩れを防ぐ

辞書

・gem
 便利な機能をひとまとめにしたもの(ライブラリ)

・devise
 ユーザー新規登録/ログインといった認証機能を簡単に実装できるgemのこと

・encrypted_password
 暗号化されたパスワードを保存するカラム

・add_index
 特定のカラムからデータを取得する際に、テーブルの中の特定のカラムのデータを複製し検索が行いやすいようにする

・正規表現
 「検索」や「置換」で指定する文字列をパターン表現する方法で、プログラミング言語やテキストエディタなどで利用できる

・protect_from_forgery with: :exception
 セキュリティ対策。このコードがあると、Railsで生成されるすべてのフォームとAjaxリクエストにセキュリティトークンが自動的に含まれ、セキュリティトークンがマッチしない場合ははじかれる。ユーザー認証が完了したwebアプリのページに悪意のあるコードやリンクを仕込むCSRF(Cross-Site Request Forgery)という攻撃手法から保護出来る。

・before_action
 全てのアクションが実行される前に、この部分が実行される


学習記録 #2 モーダル実装

$
0
0

行ったこと

- HTML / CSS / JavaScript
- サービス作成

つまずいたこと

- モーダルの実装

HTML

<!-- モーダル -->
      <div id="modal">
        <div class="modal-content">
          <div class="modal-body">
            <h1>hello</h1>
            <button id="closeButton">Close</button>
          </div>
        </div>
      </div>
      <!-- モーダル表示用ボタン -->
      <button id="openButton">Open Modal</button>

CSS

#modal{
display: none;
position: fixed;
z-index: 1;
left: 0;
top: 0;
height: 100%;
width: 100%;
overflow: auto;
background-color: rgba(0,0,0,0.5);
}

.modal-content{
background-color: white;
width: 500px;
margin: 15% auto;
}

JavaScript

const modal = document.getElementById('modal');
const openButton = document.getElementById('openButton');
const closeButton = document.getElementById('closeButton');


openButton.addEventListener('click', () => {
  modal.style.display = 'block';
});

closeButton.addEventListener('click', () => {
  modal.style.display = 'none';
});

複数行を三点リーダーで省略する(EI11対応)

$
0
0

テキスト省略をCSSで行たい理由

親要素の横幅に収まるように、テキストを三点リーダーで省略したい場合、
CSSで行うのが簡単でシンプルです。

サーバーサイドで文字数を元に切り捨てた場合、HTML上に全文が載らないため、
title属性やその他UIで全文を表示させる時に不便です。

また、レスポンシブの場合は尚更CSSで行えると実装が楽です。

注意

IE11対応とありますが、三点リーダーはIE11では表示されません。(行数で切り捨て表示するのみ)

単一行はCSSのみで実装

単一行の場合は、下記CSSを適用することで、親要素の横幅を超えた分を「...」で省略できます。
こちらはIE11を気にせず使用できます。

p{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}

複数行はJavaScriptでCSSを適用する

複数行の場合は上記で対応できないため、-webkit-line-clampプロパティを使用します。
-webkit-line-clampで指定した値の行数以降(下記だと4行目から)が非表示になり、指定行の最後の文字が「...」になります。

p{display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;}

しかし、line-clamp自体-webkit-付きでIE11が未対応のため、JavaScriptで-webkit-line-clampの対応を判定し、
対応していない場合はheightを固定にして、overflow-y: hidden;ではみ出した分を非表示にしたいと思います。

また、JavaScriptでCSSを適用するため、カスタムdata属性で行数を指定できる実装にしておけば、
CSSで行数違いの-webkit-line-clamp: n;を複数記述する手間もありません。

HTML

幅の基準になる親要素を用意し、その子要素としてテキストを省略する要素を置きます。
data-truncation属性の値に省略する行数を設定します。

<divclass="parent"style="width:300px;"><pdata-truncation="3">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.</p></div>

JavaScript

HTML要素単体(element)と、行数(lineNumber)を引数に持つaddTruncationCSS関数を作成します。
element.styleオブジェクトにWebkitLineClampが存在するかを判定します。

真の場合は、element.styleオブジェクトにline-clamp用のスタイルを適用します。
偽(IE11)の場合は、line-heightと指定された行数の乗算で固定する高さを決めて、heightに指定します。

あとは、querySelectorAllで要素を取得して、各要素ごとにaddTruncationCSS関数を実行します。

constaddTruncationCSS=(element,lineNumber)=>{if('WebkitLineClamp'inelement.style){element.style.display='-webkit-box';element.style.WebkitLineClamp=lineNumber;element.style.WebkitBoxOrient='vertical';element.style.overflow='hidden';}else{// IE11などline-clamp非対応の処理constlimitHeight=parseFloat(getComputedStyle(element).lineHeight)*Number(lineNumber);element.style.overflowY='hidden';element.style.height=String(limitHeight)+'px';}}consttruncationElements=document.querySelectorAll('[data-truncation]');if(truncationElements){for(constelemetoftruncationElements){constlineNumber=elemet.dataset.truncation;addTruncationCSS(elemet,lineNumber);}}

以上です。レンダリング時のガタつきが気になる場合は、省略する要素にdisplay: none;hidden属性を付与して、適宜JavaScriptを調整すれば解消できるかと思います。

サンプル

https://jsfiddle.net/9qmLwuz7/

line-clampについて

ブラウザ対応

https://caniuse.com/#feat=css-line-clamp

ドキュメント

https://developer.mozilla.org/ja/docs/Web/CSS/-webkit-line-clamp

複数行テキスト省略の実装についてより詳しく

Line Clampin' (Truncating Multiple Line Text) | CSS-Tricks
https://css-tricks.com/line-clampin/

2つの要素を交互にfadeIn、fadeOutする方法

$
0
0

同じアニメーションでも、こんなに短くなるなんて。って思いました。
メモとして残しておきます。

やりたいこと

2つの要素があって、
①最初は2つとも非表示
②1つ目の要素がfadeInして、数秒表示された後、fadeOut
③②が終わったら、2つ目の要素がfadeInして、数秒表示された後、fadeOut

cssを使用してアニメーション

style.css
.fade{opacity:0;}.subfade{opacity:0;}
script.js
$(function(){$('.fade').css({opacity:"0"});setTimeout(function(){$(".fade").animate({opacity:"1.0"},500);},500);setTimeout(function(){$(".fade").animate({opacity:"0"},500);},2500);});$(function(){$('.subfade').css({opacity:"0"});setTimeout(function(){$(".subfade").animate({opacity:"1.0"},500);},2900);setTimeout(function(){$(".subfade").animate({opacity:"0"},500);},4400);});

cssで最初どっちもopacity: 0;にしといて、
fadeInとfadeOutによってopacity変えればOK

ちなみに、display: none;とdisplay: block;だとcssでの指定ができなかった。
jQueryでcssを使用して要素を消す系だと、opacityしか通用しないのかな?

delayメゾッドを使用

上記のコードが
こんな簡単になりました。

style.css
.fade{display:none;}.subfade{display:none;}
script.js
$(window).on('load',function(){$(".fade").fadeIn(1000).delay(1000).fadeOut(500);$(".subfade").delay(2300).fadeIn(2000).delay(1000).fadeOut(500);});

delayを使えば簡単ですね。
秒数は上記2つの方法で一緒では無いので、お好きな時間に変更してください。

参考

http://js.studio-kingdom.com/jquery/effects/delay
http://www.jquerystudy.info/reference/effects/delay.html

CSS基礎

$
0
0

部分文字列

/*aタグのhref属性を持っているモノにのみ反映*/a[href]{color:red;}/*全文一致 */a[href="https://www.yahoo.com"]{color:red;}/*前方一致 */a[href^="https://www.yahoo.com"]{color:red;}/* 文字列部分一致 " ^ " */a[href^="https://www"]{color:red;}/* 特定の文字列を含む */a[href*="google"]{color:red;}

疑似クラス

/* :first-child/:first-of-type/:last-child/:last-of-type */articlep:first-of-type{color:red;}articlep:first-child{color:red;}articlep:last-of-type{color:red;}articlep:last-child{color:red;}articlep:nth-of-type(2){color:red;}/* not */articlep:not(:nth-of-type(2)){color:red;}/* hover属性 */p:hover{background-color:pink;}/* first-line first-letter
first-line 最初の1行に反映 */p::first-line{color:blue;}/* first-letter 最初の1文字に反映  */p::first-letter{font-size:2rem;}

疑似要素

/* after属性 before属性*/h1::after{content:"!!!!!!!!!!";}h1::before{content:"!!!!!!!!!!";}

結合子

/* 子孫結合子/ */mainarticleh1/* 子結合子 直下に反映 */main>h1/* 隣接兄弟結合子 指定した要素の次の要素に反映 */mainp+p/* 一般兄弟結合子 指定した要素の次から反映 */articleh1~p

引用元
しまぶーのIT大学
https://www.youtube.com/watch?v=3RX0ASjozkc&list=PLwM1-TnN_NN5jWN09yjtxWng2XZa88ate&index=3

iOS対応、スムーズな背景画像の連動。

$
0
0

こんにちは、絶賛24時間プログラミング中のasuchi0819です。
(んなわけない

ちょっと所要にて、背景画像をスクロールしても動かしたくない実装をしなければならなかったので、その覚書です。

まず、iOSでは背景画像のcover時にbackground-attachment:fixed;を指定することはできません。
そこで、:berofeに背景画像として設定すればよいです。
しかし、ここで少し落とし穴があるのでコードを見てください。

body:before{content:"";display:block;position:fixed;bottom:0;left:0;z-index:-1;width:100%;height:100vh;overflow:hidden;background:url()centerno-repeat;background-size:cover;}

多くのコードでは、
bottom: 0;top: 0;や、overflow: hiddenがなかったりしますが、この二つがないと、スムーズに動作しません。
100vhなので、ツールバーの値の変化を受けることになります。そのため、overflow:hiddenにしておかないと縦方向でのスクロールバーが出現してしまいます。
また、topではなく、bottomでないと、スムーズにいきません。

是非皆さんも試してみてください。

検証機材。
iPadOS 13.3 iPad 6th

初心者によるプログラミング学習ログ 300日目

$
0
0

100日チャレンジの300日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
300日目は、

Gatsb:CSSファイルの置き場所とインポート(gatsby-browser.js)

$
0
0

Gatsb:CSSファイルの置き場所とインポート(gatsby-browser.js)

自分で作成したCSSの作り方は以下の通り。React特有の書き方…。

// index.jsimportReactfrom"react"import{Link}from"gatsby"importLayoutfrom"../components/layout"importImagefrom"../components/image"importSEOfrom"../components/seo"import{Container,Row,Col,Badge,Accordion,Card,Button}from'react-bootstrap'consth1Size={     // 自分でつけた任意の名前fontSize:'1.25rem',// font-sizeとするところfontSizeとする。React特有の書き方lineHeight:1.75// line-heightとするところlineHeight}consth2Size={marginTop:'1.25rem',fontSize:'1.1rem',color:'#999999',lineHeight:1.75}constfontSmallCrimson={color:'crimson',fontSize:'small'}constfontSmall={fontSize:'small',}constfontCrimson={color:'crimson',}constfontGray={color:'#777777',}constlineSpace={marginTop:20,}constIndexPage=()=>(<Layout><SEOtitle="ギャツビー"/><Containerfluid="md"><h1style={h1Size}>ギャツビー</h1>・・・以下略・・・

ファイル分割したい

デフォルトで存在するcomponents/layout.cssをいじってもいいのだが…別のファイルに自作CSSを分けたいと思った。

  1. まずsrc/stylesフォルダを作成。
  2. stylesフォルダの下にglobal.cssを作成。
  3. global.cssに分けたいCSSを記述

styles/global.css

h1Size{font-size:1.25rem;line-height:1.75;}h2Size{margin-top:1.25rem;font-size:1.1rem;color:#999999;line-height:1.75;}fontSmallCrimson{color:crimson;font-size:small;}fontSmall{font-size:small;}fontCrimson{color:crimson;}fontGray{color:#777777;}divLineSpace{margin-top:20;}
  1. gatsby-browser.jsに以下のように記述
import"./src/styles/global.css"

以上。
index.jsなどの表示コンポーネントにimport文はいらない。



参考:
Adding global styles without a layout component


游明朝DemiboldをWindowsのモダンブラウザで使う

$
0
0

モチベーション

WebアプリやElectronアプリなど、クロスプラットフォーム環境のアプリではフォントの互換性も重要になります。Google Fontに代表される。Webフォントは一つの解ですが、日本後の場合はフォントファイルの容量自体が大きく、通信量の増加や遅延が気になる場合もあります。

別の解として、WindowsとMacの標準インストールされているフォントである游ゴシックと游明朝を使うというものがあります。しかし、WindowsとMacでは、インストールされているFontのweightが違ったり、OSのレンダリング方法が違ったりして、一般的にWindowsでは細く、Macでは太く表示されます。しかし、font-weigtの問題さえクリアできれば、クロスプラットフォームアプリにおいてはとても有用です。

二つ目の問題として、font-weightやfont-familyの指定がブラウザによっても若干異なり、モダンブラウザ全てで動かすには結構大変だということも挙げられます。

游ゴシックに対するfont-weighの解決策は、色々と紹介されています。(ただ、微妙に違う情報が乱立していて、結局は自分自身で試行錯誤するしかないですが)

游明朝についての情報は少ないので、今回はこれについての試行錯誤した結果を情報共有したいと思います。(もちろんこれも時間がたてばOSやブラウザの仕様変更により有効ではなくなるかもしれません)

游明朝の種類とOS間の違い

Windows、Mac共に、OS標準として細い・中間・太いの三種類のフォントファミリーがインストールされています。ただ、OSによって、フォント名が微妙に異なります。以下テーブルにまとめます。

WindowsMac OS
太さ指定なし(中間と同じ)Yu MinchoYuMincho
細いYu Mincho LightYuMincho Light
中間Yu Mincho RegularYuMincho Medium
太いYu Mincho DemiboldYuMincho Demibold

主な注意点を挙げておきます

  • WindowsではYuとMinchoの間に半角スペースが必要です。MacではYuとMinchoの間に隙間を開けずに接続してください。
  • 中間太さのフォント名がWindowsとMacで異なります。Windowsでは"Yu Mincho Regular"、Macでは"YuMincho Medium"です。

ここで、よく言われる「Windowsは細い、Macは太い」の検証をとしてスクリーンショットを以下の表にまとめました。

Windows(Chrome)Mac(Chrome)
Yu MinchoChrome-win_YuMincho-single.pngChrome-mac_YuMincho-single.png
Yu Mincho DemiboldChrome-win_YuMincho_Demibold-single.pngChrome-mac_YuMincho_Demibold-single.png

ブラウザは共にChromeを使いました。font-weightは特にしていない状態です。ブラウザ間の差は後で纏めますが、font-weightを指定しない状態ではブラウザ間の差はほとんどないと考えて良さそうです。

ここからわかることは、

  • 確かにWindowsは細く、Macは太い
  • MacのRegular(font-weight指定なし)と同等な太さで表示されるのはWindowsではDemiboldである

ということです。ですので、クロスプラットフォームなアプリで游明朝を使うときのコツとして

「コツ1:MacではYuMincho (Regular)を使い、WindowsではYu Mincho Demiboldを使う」

をお勧めします。

ブラウザ間の表示の違い

上ではOS間のフォント名の差に触れましたが、今度はブラウザ間の差について触れます。

CSSでfont-familyとfont-weightの指定を変えて試しました。font-familyは"Yu Mincho"、"Yu Mincho Regular"、"Yu Mincho Demibold"、さらに、@font-faceを経由して"Yu Mincho Demibold"を指定した場合の四種類を試しました。CSSでこれらに相当するクラスは次の様にしました。うまく適用されなかった場合が分かりやすいように、どのfont-familyにも適用されなかった場合はserifではなくsans-serifになるようにしました。

@font-face{font-family:'MyYuMinchoC';src:local('YuMincho-Demibold'),/* for Win */local('YuMincho Demibold');/* for Mac */}.yumincho{font-family:'Yu Mincho','YuMincho',sans-serif;}.yuminchoR{font-family:'Yu Mincho Regular','Yu Mincho','YuMincho Medium',sans-serif;}.yuminchoB{font-family:'Yu Mincho Demibold','YuMincho Demibold',sans-serif;}.yuminchoC{font-family:"MyYuMinchoC",sans-serif;}

font-weighは「指定なし」、font-weight:boldfont-weight:800の三種類を試しました。これはクラスに入れず、次のようにHTMLのタグ中にstyle属性として記入しました。

<pclass="yumincho">明朝体のサンプルです</p><pclass="yumincho"style="font-weight:bold;">明朝体のサンプルです</p><pclass="yumincho"style="font-weight:800;">明朝体のサンプルです</p><pclass="yuminchoR">明朝体のサンプルです</p><pclass="yuminchoR"style="font-weight:bold;">明朝体のサンプルです</p><pclass="yuminchoR"style="font-weight:800;">明朝体のサンプルです</p><pclass="yuminchoB">明朝体のサンプルです</p><pclass="yuminchoB"style="font-weight:bold;">明朝体のサンプルです</p><pclass="yuminchoB"style="font-weight:800;">明朝体のサンプルです</p><pclass="yuminchoC">明朝体のサンプルです</p><pclass="yuminchoC"style="font-weight:bold;">明朝体のサンプルです</p><pclass="yuminchoC"style="font-weight:800;">明朝体のサンプルです</p>

このCSS指定で表示される実際の様子を、ブラウザごとにスクリーンショットをとったものを以下の表にまとめます。各スクリーンショット画像は三行ずつにまとまっていますが、上から順にfont-weighの「指定なし」、font-weight:boldfont-weight:800に対応します。

Windowsでの表示

font-family(class)Edge(Legacy)ChromeFirefox
Yu MinchoEdgeLegacy-win_YuMincho.pngChrome-win_YuMincho.pngFirefox-win_YuMincho.png
RegularEdgeLegacy-win_YuMincho_Regular.pngChrome-win_YuMincho_Regular.pngFirefox-win_YuMincho_Regular.png
DemiboldEdgeLegacy-win_YuMincho_Demibold.pngChrome-win_YuMincho_Demibold.pngFirefox-win_YuMincho_Demibold.png
Demibold via @font-faceEdgeLegacy-win_YuMincho_Demibold_font-face.pngChrome-win_YuMincho_Demibold_font-face.pngFirefox-win_YuMincho_Demibold_font-face.png

Macでの表示

font-family(class)SafariChromeFirefox
Yu MinchoSafari-mac_YuMincho.pngChrome-mac_YuMincho.pngFirefox-mac_YuMincho.png
MediumSafari-mac_YuMincho_Medium.pngChrome-mac_YuMincho_Medium.pngFirefox-mac_YuMincho_Medium.png
DemiboldSafari-mac_YuMincho_Demibold.pngChrome-mac_YuMincho_Demibold.pngFirefox-mac_YuMincho_Demibold.png
Demibold via @font-faceSafari-mac_YuMincho_Demibold_font-face.pngChrome-mac_YuMincho_Demibold_font-face.pngFirefox-mac_YuMincho_Demibold_font-face.png

さて、この表から読み取れることを列挙します

  1. ブラウザ問わずYuMincho、Yu Mincho Regular/Yu Mincho Mediumではfont-weightの指定で太字表示にできるが、Yu Mincho Demiboldではさらに太く表示できる場合と出来ない場合がある。
  2. Chromeでは、Yu Mincho/YuMinchoに対してfont-weightで太字にした場合と、Yu Mincho Regular/YuMincho Mediumに対してfont-weightで太字にした場合で太字の太さが異なる。
  3. Yu Mincho Demiboldをさらに太く表示するには
    1. Edge(Legacy)では、font-weight:800以上とする。
    2. font-weight:boldでは太くできない
    3. @font-faceを経由すると太くできない
    4. ChromeとFirefox(Windows/Mac共通)では、@font-faceを経由してDemiboldを指定し、font-weigt:bold以上に指定する
    5. @font-faceを経由しない場合は太くできない(Mac版Firefox除く)
    6. Safariでは、不可。

議論

ここで、最初のOS比較から、Macでは標準(指定なし:Medium相当)、WindowsではDemiboldを使うことを想定します。すると、Macの太字表示に対応するため、WindowsにおいてはDemiboldからさらに太くした表示が欲しくなります。この点に関しては、2つ目のブラウザ間比較を見ると幸いWindowsの場合にはどのブラウザでもそれが可能です。

上にも書きましたが、WindowsでDemiboldのさらに太いものを使うには、Edge(Lelagy)では@font-faceを経由せずにfont-weight:800以上を指定し、ChromeとFirefoxでは@font-face経由でfont-weight:bold以上を指定します。前者の800以上というのは、色々試した限りでは実際には751以上ですが、わかりやすく800以上としました。

WindowsにおいてEdge(Lenagy)、Chrome、FirefoxでともにDemiboldのさらいに太いものを使うにはCSS等の設定は次の様にすればよさそうです。

.yuminchoReco{font-famiry:'YuMincho',/* for Mac (as Medium)*/'MyYuminchoC';/* for Chrome and firefox on Windows */}@supports(-ms-ime-align:auto){/* for Edge(Legacy) */{.yuminchoReco{font-famiry:'Yu Mincho Demibold';}}
<pclass="yuminchoReco">明朝体のサンプルです</p><!--標準--><pclass="yuminchoReco"style="font-weight:800;">明朝体のサンプルです</p><!--太字-->

結論

クロスプラットフォームアプリで游明朝を使うときは、次のことをお勧めします

  • 標準の太さとしてWindowsでは"Yu Mincho Demibold"を使い、Macでは"YuMincho (Medium)"を使う
  • WindowsでDemiboldのさらに太い表示を使い、Macの太字相当にする

このようにして、あらためて、WindowsとMacでの游明朝の表示比較をChromeで行いました。Macでは標準をRegular、Windowsでは標準はDemiboldとします。それら太字は上記の方法で行います。その結果を表にまとめると次のようになります。

Windows(Chrome)Mac(Chrome)
標準(WinはDemibold)Chrome-win_YuMincho_Demibold-single.pngChrome-mac_YuMincho-single.png
太字(Winは上記手法)Chrome-win_YuMincho_Demibold_font-face-weightbold.pngChrome-mac_YuMincho_Demibold-single.png

なんとなく、OSの差を吸収して、同じような太さで表示できているのではないでしょうか。

さいごに

誰かの参考になれば幸いです。このあたり、もっと詳しい人はたくさんいると思うので、いい加減なことを書いていたらご指摘ください。

スクロールバーのデザインを変更& hover時のみ表示

$
0
0

やりたい事

スクロールバーのデザインを変更したい
hover時だけスクロールバーを出したい

やってみる

.wrapが親要素
.boxが子要素

.wrapにpadding入れてるので、
.boxからはみ出してる部分をoverflow: hidden;で隠して
.boxにhoverしてる時だけ、スクロールバーを表示。

このページ本体のスクロールバーは通常通り。

index.html
<divclass="wrap"><divclass="box"><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div></div>
style.scss
.wrap{height:500px;padding:60px40px;.box{overflow:hidden;&:hover{overflow:scroll;&::-webkit-scrollbar{width:6px;height:0;}&::-webkit-scrollbar-track{border-radius:3px;height:100%;background-color:#eeeeee;}&::-webkit-scrollbar-thumb{border-radius:3px;background-color:#867670;}}}

このやり方でスクロールバーの変更しても、
IEやfirefoxで対応してないので意味がない事を知る。悲しい。

次に試した事

perfect-scrollbar.js

perfect-scrollbar.jsを使えばできるらしい。

参考↓

http://cly7796.net/wp/javascript/plugin-perfect-scrollbar/
https://webkcampus.com/201903/1578/

だいたいこんな感じ。

index.html
<divclass="wrap"><divclass="scrollbar"><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div><divclass="scrollbar2"><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div><divclass="scrollbar3"><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p><p>テキストテキストテキストテキストテキストテキストテキストテキストテキスト</p></div></div>
...
...
...
<script src="https://cdn.jsdelivr.net/npm/simplebar@latest/dist/simplebar.min.js"></script><script>varmatches=document.querySelectorAll(".scrollbar");varps=newPerfectScrollbar('.scrollbar');varps=newPerfectScrollbar('.scrollbar2');varps=newPerfectScrollbar('.scrollbar3');varps=newPerfectScrollbar('.scrollbar'){suppressScrollX:true};</script>
style.css
.scrollbar{position:relative;width:400px;height:400px;}.scrollbar2{position:relative;width:400px;height:400px;}.scrollbar3{position:relative;width:400px;height:400px;}.ps__thumb-y{background-color:#fd284c!important;}.ps--active-x>.ps__rail-x,.ps--active-y>.ps__rail-y{background-color:red;}

(色々変更したのでちょっと違うかも)

これだど、.scrollbar1つ1つに違う名前のclass名つけて、cssやjsの指定をしなきゃいけない。
今回の場合はwordpressで.scrollbarの要素を追加・更新する予定なので、違うclass名をつけて、、、、以降ができないため、やめました。

他の方法


simplebar.js : https://arakaze.ready.jp/archives/5196
nanoScroller.js : http://jamesflorentino.github.io/nanoScrollerJS/
CustomScrollbar.js : http://eturlt.net/blog/20130612/customscrollbar/

この3つ。
・simplebar.jsはそもそもスクロールバーが表示されない問題。
・nanoScroller.jsはちょっと古い。
・CustomScrollbar.jsでできました。
デモもあるし、カスタマイズしやすいので使用しやすかった

https://www.otwo.jp/blog/custom-scroller/

まとめ

スクロールバーでも色々あるんだなぁと思いました。

Compassがよかった話

$
0
0

受託Webサイト制作で2ページ分のLPを制作するにあたり、Compassを使いました。
静的サイトの制作ならCompassで十分だと思い、記事に残しておきます。

前提

案件

  • 成果物:LP2ページ(PC版1ページ、SP版1ページ)
  • 対応ブラウザ:最新ブラウザとIE11
  • 納期:4営業日
  • 備考
    • SPのデザインは最初ない状態
    • 動きはほぼない
      • jsはほぼ書かない
    • レスポンシブでない
    • 後々運用していくにあたり修正しやすい様にしておく

業務フロー

デザイン受取 → コーディング → ローカル確認 → zipなどで納品 → テストアップ

開発環境

  • MacOS mojave
  • MAMP

開発リソース

  • template(php)
  • css
  • assets(font, image)

ビルド

cssのみsassでビルドしました。途中からCompassを導入。
phpは生で編集し、assetsは最適化したものを保存。

ディレクトリ構成(最終形)

 LP/
 - dist/
   - index.php
   - style.css
   - template/
     - common/
       - _btn.php ...etc
     - _mv.php ... etc
   - assets/
     - img/
     - font/
 - src/
   - scss/
     - common/
       - _base.scss ...etc
     - _mv.scss ...etc
 - dev.sh
 - prod.sh
 - config.rb
 - README.md

考察

前回の記事などから、受託サイト制作、特に静的サイト制作では、スピードかつ運用しやすい実装(壊しやすい実装)が求められると思っているので、なるべく生の状態で編集していく形を取っています。
つまり今回の構成としては、サーバにあげるファイルは、dist配下のファイルたちで、cssのみビルドしてdistに吐き出す形にしています。phpを直接編集するのでMAMPのhtdocsにシンボリックリンクを作り、distと同期してローカル確認を効率化しています。
最近のWeb制作からすると原始的なやり方ですが、静的サイトならこれで十分な環境で、誰でも編集でき、環境もすぐ作れるので、良きと思っています。

PC, SPはテンプレートをユーザーエージェントで出し分けを考えていたのですが、成果物のボリュームと多少のSEO効果を考えて、画面の横幅でスタイルを変更する(メディアクエリ)でいいかなと思いました。ここで、Sassにしておいてよかったなと思いました。
ただ、クラス命名がクソになってしまいましたが。。。

cssのビルドは、最初Sassで大丈夫と思っていたのですが、
最新ブラウザのみとはいえ、モバイルもあるし、ベンダープレフィックス必要やなと思いました。
そこでAutoprefixer。
ただ今までNode.jsでのビルドでしか使ったことなかったので、Sassであんのかなーと調べていたら、Compassが浮上し、今回の形になりました。
今までは、シェルスクリプトでSassを打ちまくっていたのですが、Compassならそこをやってくれるので楽でした。確かにそういうもんだったと感じながら、今まで置き去りにしてきたので、改めて良きと思いました。
しかも別モジュールですが、ちょちょっとインストールすれば、Autoprefixerも簡単に使えたので、これからはこれで行こうと思わせる環境でした。
モダン開発に慣れてくる、もしくはモダン開発からフロントエンドに入ってきた方からすると逆にこういう原始的なところは新鮮に感じられると思います。
デザイナー+コーダーの様な会社(Webサイト制作会社、デザイン会社、など)ですとまだまだNode.jsがハードルある様なので、Compassの様なところから入るとビルドが理解できていいのかなーと思っています。

正直、リンターやユニットテストもあるといいと思うのですが、納期を考えるとかなりむずいです。
それは必要性が浸透していないところがあるので、今後すぐ入れられるような状態にして浸透していってほしいなと思う今日この頃です。
あと、将来的なお話ですが、前やった案件で、storybookというのを使っていて、storybookはコンポーネントの状態を可視化できかつ共有もできるツール・プラグインなのですが、React用のツールに見えたので、それに近いものを作れればいいと思っています。
まーこれも必要性が浸透しないとですが。。

Webサイト制作は、確かに制作自体は簡単にできてしまうのですが、それだけにそれぞれの職能がうまく機能しないと意外にめんどくさい仕事になって案件自体が悪者扱いされてしまうので、Weサイト制作自体のフレームワークを作っていければと思います。

次点

これからはCompass使っていく。ただ、Node.jsを入れればnpm scriptsで簡単にビルドできる環境を作れるので、どっちがいいかその都度判断したいと思っている。
Compass環境が簡単に作れるシェルスクリプト入れるのがいいかも。
シェルスクリプトを簡潔にしていく。GitLabCIなどに組み込みたい。(zip渡しなどやめたい)

まとめ

  • Compass環境は良き(特にMacOSなら)
  • Compass環境すぐできる様にする
  • 納品物をCIで
  • Webサイト制作自体をもっと効率的に

また、こんな大して参考にならん記事を残していきますが、それでも誰かの参考やこんな考え方もあるといったご意見いただければと思います。

関連記事

フッターの位置を最下部に固定したいのに、重なってしまう時の対処法

$
0
0

Web制作中、フッターの位置を最下部に固定するつもりが、お問い合わせ部分と重なってしまいました。

スクリーンショット 2020-04-27 22.31.35.png

色々調べた結果、解決したので記していきます。

フッターをウインドウ最下部に固定する

HTMLは下記の通りです。

html
<body><divclass="wrapper">     *     *#省略     *     *<footer><p>©︎2020-2020GoingoandToigo.</p></footer>

 </div></body>

↓CSSで位置を最下部にする。

css
body{width: 100%;height: 100%;}.wrapper{min-height: 100vh;/*①高さの最小値*/position: relative;/*②相対位置*/}footer{width: 100%;height: 200px;position: absolute;/*②絶対位置*/bottom: 0;/*下に固定*/}

vh…画面の大きさを基準にした単位
.wrapperを相対位置とする。footerposition: absolute;を書いて、位置を最下部に決めるようにする。

ここでページを更新してフッターの位置が最下部にあるか確認。

冒頭の画像のようにお問い合わせ部分と重なったままであれば、以下の方法を試してみてください。

フッターとコンテンツがネガティブマージンで重なるのを防ぐ

html
<body><divclass="wrapper">/*フッター以外のすべての要素をdiv要素で囲む*/     *     *#省略     *     *<divclass="push"></div>/*コンテンツ内に空の要素(.push)を加える*/
    <footer>
     <p>©︎2020-2020 Goingo and Toigo.</p></footer>

 </div></body>

CSS
footer{width: 100%;height: 200px;position: absolute;bottom: 0;margin-bottom: -200px;/*フッターの高さと等しいネガティブマージン*/}.push{height: 200px;/*フッターと同じ高さに指定*/}

参考にさせていただきました→ https://coliss.com/articles/build-websites/operation/css/css-sticky-footer.html

スクリーンショット 2020-04-28 1.33.20.png

最下部に固定することが出来ました!

初心者によるプログラミング学習ログ 301日目

$
0
0

100日チャレンジの301日目

twitterの100日チャレンジ#タグ、#100DaysOfCode実施中です。
すでに100日超えましたが、継続。
100日チャレンジは、ぱぺまぺの中ではプログラミングに限らず継続学習のために使っています。
301日目は、

#02 [HTML&CSS 超超超初心者講座 - 2020 - ] さらっとVScodeの使い方とhtmlとcssの基本

$
0
0

環境整ったしまずはVSCodeの使い方

はやく、コーディングの勉強始めたいなって思ってるかもしれないけど、まずは、前回入れてもらったVSCodeの使い方をさらっとお勉強。

知ってる人は読まなくてもいい。

ワークスペースの確保

VSCodeには「ワークスペース」っていう概念があります。
作らなくてもいけるけど、つくると後々幸せになれるぞ。

1.とりあえず 新規ファイルを作ってみよう。

ファイルから 新規ファイルを選択すると、 Untitled-1みたいなのが出てくると思う。

/* アクション */
ファイル > 新規ファイル

/* 結果 */
Untitled-1 ができる

2. Untitled-1保存してみよう。

ファイルから 保存を選択すると、ファイルを保存する場所を指定して、ファイル名付けて保存できる。

任意の場所に 超超超初心者講座ってフォルダ作って、その中に siteってフォルダ作ろう。
フォルダ名はなんでもいいよ。好きに作るといい。

Untitled-1の名前を index.htmlにしよう。
ファイル名はなんでもいいけど、とりあえず index.htmlにしておこう。
なんで、 index.htmlなのかは後ほど。

/* アクション1 */
ファイル > 保存

/* アクション2 */
新規フォルダ(名前 : 超超超初心者講座) > 新規フォルダ(名前 : site)
ファイル名をつける(名前 : index.html) 

/* 結果 */
超超超初心者講座
  └ site
    └ index.html

3. ワークスペースを作ってみよう

ファイルから 名前をつけてワークスペースを保存…でワークスペースを beginner.code-workspaceって名前で index.htmlと同じところに保存しよう。

/* アクション1 */
ファイル > 名前をつけてワークスペースを保存…

/* アクション2 */
ファイル名をつける(名前 : beginner.code-workspace) 

/* 結果 */
超超超初心者講座
  └ site
    ├ beginner.code-workspace
    └ index.html

4. ワークスペースを開いてみよう

左のファイルアイコンから フォルダを開くをクリック

ワークスペースの指定

さっき作ったsiteフォルダーを指定して開いてみよう。

ワークスペースの設定

こうなったらOK

5. ワークスペースが開けたぜ。

これで、ワークスペースが設定できたよ。

6. ワークスペースを再度開く。

次回開く時は、ファイルから ワークスペースを開く…beginner.code-workspaceを選んで開けば ワークスペースが開けるぞ。
beginner.code-workspaceファイルをダブルクリックでも開けるとおもう。

環境はばっちりととのったし、ちょびっとHTMLとCSSを書いてみようぜ

最初は index.htmlにこれを書いてみよう

じゃあ index.htmlに以下のマークアップをコピペしてみよう。手で書いてもいいぞ。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>HTMLの基本構成</title></head><body><h1>Hello world</h1></body></html>

これが、htmlの最低限の記述だよ。各タグの解説は次回します。
前回の講義でHTML Boilerplate入れた人は、 html:5って書いて returnを押したら、ある程度補完してくれるよ。べんりだね。上記マークアップを見て違うところとか、足りないところを修正しようね。

次はローカルホストを立ててHTMLをプレビューしようぜ

ロ、ローカルホストって、なに?

今は深く考えなくていい。前回の講義でLive Serverを入れたと思う。そしたら、ウインドウの右下に Go Liveってあるから、そこを押してみよう。
これは、ワークスペース内にhtmlファイルがないと出てこないぞ。

Live Server

Go Live押したらブラウザが立ち上がって「Hello world」って表示されると思う。

Hello world

↑こんな感じに表示されると思う

じゃあ、<h1>Hello world</h1><h1>Hello Qiita</h1>に変えて保存してみよう。そうするとプレビューのブラウザも変わってくれるぞ。

編集してみよう

便利な気がしてきたかな?

次は style.cssファイルを作ろう

style.cssindex.htmlと同じレベルにおいてもいいけど、今後のことも考えて、assetsフォルダの中にcssフォルダを作って、その中に style.cssを作ろう。

超超超初心者講座
  └ site
    ├ assets
    │ └ css
    │   └ style.css
    ├ beginner.code-workspace
    └ index.html

VSCode上ではこんな見た目になると思う

cssの追加

style.cssファイルをリンクさせよう

index.htmlstyle.cssをリンクしよう。

リンクさせる時はこんな感じで書く。

index.html
<linkrel="stylesheet"href="/assets/css/style.css">

どこに書けばいいのかというと、<title>の下に追加しよう。

index.html
<!DOCTYPE html><htmllang="ja"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width, initial-scale=1.0"><title>HTMLの基本構成</title><linkrel="stylesheet"href="/assets/css/style.css"></head><body><h1>Hello world</h1></body></html>

これで、style.cssがリンクされました。

さらっとスタイリングしてみよう。

では、実際にスタイリングしてみよう。

style.css<h1>のスタイリングしてみよう。

style.css
h1{color:#ff0000;}

って書いて、保存したらブラウザの方のプレビューの文字色が赤くなると思う。

おめでとう君はマークアップとスタイリングができたぞ

基本的に、マークアップとスタイリングはこれの繰り返し。
簡単な気がしてこない?

次回もお楽しみに

[コラム] なんで index.htmlなの?

今日作った index.htmlだけど、なんで indexなのかと言うと。

基本的にHTMLはもともと「文書」として、発展してきたものだから、慣例的に index.htmlと名付けたファイルを最初の索引(INDEX)として、表示してきました。

各フォルダ(ディレクトリ)の index.htmlがそのディレクトリの最初のページって認識されます。

要素の背景を透過しつつもぼかす

$
0
0

要素の背景をぼかしつつも透過したい時ってありますよね。
そんなときに便利なプロパティがあります。

backdrop-filter

backdrop-filterを使えばできます。
実際のコードを描いてみます。

<header>hogehogehogehoge</header><spanstyle=font-size:5rem>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br>こんにちは~<br></span>
header{position:fixed;top:0;left:0;backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);width:100%;}

See the Pen pojwRQx by asuchi0819 (@asuchi0819) on CodePen.

ただ、FireFox非対応なので、そこは注意が必要です。
image.png
CanIUse


How to get mask website for sale with safe

$
0
0





Featured products









Picture of 30PCS KN95 N95 Disposable Masks with Flow Exhalation Valve Masks Anti Dust Face Mouth Masks Great for Germs Protection





30PCS KN95 N95 Disposable Masks with Flow Exhalation Valve Masks Anti Dust Face Mouth Masks Great for Germs Protection









KN95 level respiratory protection, filtering efficiency up to 95%, mesh breathable composite fabric, suitable for all seasons.3-dimensional riding mask with three-dimensional filter, tight fit, anti-pollen,anti-smoke, anti-dust, anti-fog Mask.


After safety-certified disposable multi-layer breathing mask helps prevent you from inhaling fine particles. It filters out dust, pollen, mites, grass clippings, pet hair, dandruff, beauty, wood, construction, mowing, flour, mold, drilling, grinding and more.


High-density non-woven fabric-nano filtration-N95 filtration-high-breathable non-woven fabric, which can prevent dust, car exhaust, pollen, etc.


KN95 dust mask is foldable for easy storage and can be used indoors and outdoors. Suitable for people of all ages. It is ideal for carpentry, sports, exercise, city cycling, running, cycling and motorcycle riding and travel.


Safety mask with adjustable nose clip with foam cushion, with elastic Rope.


Notice:We have white and black products, which are delivered randomly.




$75.99

















Picture of Reusable KN95 Mask -20pcs N95 Mask 5 Layers Antivirus Flu Anti Infection Protective Mask Anti-dust Face Shield Masks





Reusable KN95 Mask -20pcs N95 Mask 5 Layers Antivirus Flu Anti Infection Protective Mask Anti-dust Face Shield Masks









1.KN95 masks, Breathable,anti dust,sanitary and convenient for using.

2.The inner layer of activated carbon can filter harmful gases or odors.safe, soft and comfortable.95% filtration, provide anti-bacterial and anti-dust protection for you.

3.Thick layers of protection effectively resist the invasion of harmful substances, protecting against dust, liquids and weather.

4.Seal the bridge of the nose improves the adhesion of the item.Perfect for daily use and outdoor activities.

5.Anti-Dust,Anti Bacteria,Anti PM2.5


Specifications:

Protection Class: KN95

Color: White

Material: Non-woven Fabric

Type: ears wearing

Notes: Non-washable




$42.99

















Picture of Reusable KN95 Mask -50pcs N95 Mask 5 Layers Antivirus Flu Anti Infection Protective Mask Anti-dust Face Shield Masks





Reusable KN95 Mask -50pcs N95 Mask 5 Layers Antivirus Flu Anti Infection Protective Mask Anti-dust Face Shield Masks









1.KN95 masks, Breathable,anti dust,sanitary and convenient for using.

2.The inner layer of activated carbon can filter harmful gases or odors.safe, soft and comfortable.95% filtration, provide anti-bacterial and anti-dust protection for you.

3.Thick layers of protection effectively resist the invasion of harmful substances, protecting against dust, liquids and weather.

4.Seal the bridge of the nose improves the adhesion of the item.Perfect for daily use and outdoor activities.

5.Anti-Dust,Anti Bacteria,Anti PM2.5


Specifications:

Protection Class: KN95

Color: White

Material: Non-woven Fabric

Type: ears wearing

Notes: Non-washable




$91.99

















Picture of 50PCS Disposable Quality 95% Filtered Dust Face Mask Four Layer Respirator Mask Earloop Mouth Cover for 2-9 Years Children 95% Filtered Mask





50PCS Disposable Quality 95% Filtered Dust Face Mask Four Layer Respirator Mask Earloop Mouth Cover for 2-9 Years Children 95% Filtered Mask









Filtering Efficiency: The filtration efficiency of particles with aerodynamic diameters of 0.075 microns +- 0.020 microns can be more than 95%.


Four Layer: Four layer design, filter the pollution, gases, odors, dust, pollen, smog, PM2.5 effectively.Colors and styles shipped randomly


Features: Comfortable, breathable, skin-friendly, makes you rest assured to use, 3 layers for 95% filter, effective filtering of dust, pm2.5, air pollution, car exhaust, elasticated head strap for a universal tight fit around the mouth and nose.


Easy to Store: Dust mask is foldable for easy storage and can be used indoors and outdoors. Suitable for people of all ages. It is ideal for carpentry, sports, exercise, city cycling, running, cycling and motorcycle riding and travel.


Satisfaction Guaranteed: Customer satisfy is our eternal pursue. If you have any problems with our product, please feel free to contact us, we will fix any of the problems within 24 hours.




$41.99

















Picture of 100Pcs Disposable 3-Layer Masks, Professional medical surgical protective masks, refuse infectious diseases, viruses





100Pcs Disposable 3-Layer Masks, Professional medical surgical protective masks, refuse infectious diseases, viruses









Description:

3 Layers of Protection:

Non-woven Outer Layer

Meltblown Cloth Filter Layer

Non-woven Inner Layer

3 layers of protection effectively resist the invasion of harmful substances, protecting against dust, Virus, bacteria and liquids.



Type: Disposable mask

Material:Non-woven fabric



Notice:We have white and blue products, which are delivered randomly.




$58.99

















Picture of 250Pcs Disposable 3-Layer Masks, Professional medical surgical protective masks, refuse infectious diseases, viruses





250Pcs Disposable 3-Layer Masks, Professional medical surgical protective masks, refuse infectious diseases, viruses









Description:

3 Layers of Protection:

Non-woven Outer Layer

Meltblown Cloth Filter Layer

Non-woven Inner Layer

3 layers of protection effectively resist the invasion of harmful substances, protecting against dust, Virus, bacteria and liquids.



Type: Disposable mask

Material:Non-woven fabric



Notice:We have white and blue products, which are delivered randomly.




$128.99

















Picture of 100PCS Disposable Protective Masks 3 Layers Dustproof Disposable Face Masks Elastic Ear Loop Disposable Dust Filter Safety Mask





100PCS Disposable Protective Masks 3 Layers Dustproof Disposable Face Masks Elastic Ear Loop Disposable Dust Filter Safety Mask









Description:

3 Layers of Protection:

Non-woven Outer Layer

Meltblown Cloth Filter Layer

Non-woven Inner Layer


Type: Disposable mask

Material:Non-woven fabric

Package include: 100 x Disposable Masks


Notice:We have white and blue products, which are delivered randomly.




$42.99

















Picture of 250PCS Disposable Protective Masks 3 Layers Dustproof Disposable Face Masks Elastic Ear Loop Disposable Dust Filter Safety Mask





250PCS Disposable Protective Masks 3 Layers Dustproof Disposable Face Masks Elastic Ear Loop Disposable Dust Filter Safety Mask









Description:

3 Layers of Protection:

Non-woven Outer Layer

Meltblown Cloth Filter Layer

Non-woven Inner Layer


Type: Disposable mask

Material:Non-woven fabric

Package include: 250 x Disposable Masks


Notice:We have white and blue products, which are delivered randomly.




$86.99

















Picture of 2Packs Goggles antivirus, Transparent Anti Droplet Anti Fog Safety Goggles Eye Protector Protective Glass





2Packs Goggles antivirus, Transparent Anti Droplet Anti Fog Safety Goggles Eye Protector Protective Glass









Made of premium PVC material.


No chance for the virus to enter the eye membrane.


Light and comfortable material, small frame myopia lens can be worn.


Suitable for cycling, climbing, rock climbing, construction site, factory, travel laboratory, etc


100% product quality guarantee, if you have any questions or problems about the product, please contact us.




$11.99

















Picture of 10Packs Goggles antivirus, Transparent Anti Droplet Anti Fog Safety Goggles Eye Protector Protective Glass





10Packs Goggles antivirus, Transparent Anti Droplet Anti Fog Safety Goggles Eye Protector Protective Glass









Made of premium PVC material.


No chance for the virus to enter the eye membrane.


Light and comfortable material, small frame myopia lens can be worn.


Suitable for cycling, climbing, rock climbing, construction site, factory, travel laboratory, etc


100% product quality guarantee, if you have any questions or problems about the product, please contact us.




$29.00

















Picture of (2 Packs)Disposable Coveralls Protective Suit with Hood Isolation Suit Protective Clothing Dust-proof Coverall Suit with Long Front Zipper Against infection





(2 Packs)Disposable Coveralls Protective Suit with Hood Isolation Suit Protective Clothing Dust-proof Coverall Suit with Long Front Zipper Against infection









Non-woven Material- Selection of High-quality Non-woven Materials to Ensure Protection, Light and Comfortable, more Durabl

Elastic Wrists, Waist,Ankles to Ensure a Better Fit and Freedom of Movement. Jagged seams, Attached Hood and Storm Flap to Help Provide Higher Standard Protection to protect you from bacteria and barrier.

Multiple Application: Protective Apparel Helps Protect Wearer Against Small Size Hazardous Particles. This Includes Particles Such as Dust, Harmful Particles, Limited Splashing of Low-hazard liquids. Protective Coverall for Maintenance, Painting, Construction, Pharmaceutical, Dry Particulate /Non-hazardous, Waste Recycling and more

Quick Delivery: All package will Arrived 7-12 Days, Individually and Individually Packaged, Safe and Hygienic.




$79.99

















Picture of  (10 Packs)Disposable Coveralls Protective Suit with Hood Isolation Suit Protective Clothing Dust-proof Coverall Suit with Long Front Zipper Against infection





(10 Packs)Disposable Coveralls Protective Suit with Hood Isolation Suit Protective Clothing Dust-proof Coverall Suit with Long Front Zipper Against infection









Non-woven Material- Selection of High-quality Non-woven Materials to Ensure Protection, Light and Comfortable, more Durabl

Elastic Wrists, Waist,Ankles to Ensure a Better Fit and Freedom of Movement. Jagged seams, Attached Hood and Storm Flap to Help Provide Higher Standard Protection to protect you from bacteria and barrier.

Multiple Application: Protective Apparel Helps Protect Wearer Against Small Size Hazardous Particles. This Includes Particles Such as Dust, Harmful Particles, Limited Splashing of Low-hazard liquids. Protective Coverall for Maintenance, Painting, Construction, Pharmaceutical, Dry Particulate /Non-hazardous, Waste Recycling and more

Quick Delivery: All package will Arrived 7-12 Days, Individually and Individually Packaged, Safe and Hygienic.




$299.00















色指定に迷ったらhslにしよう

$
0
0

はじめに

みなさんはCSSでの色指定、どのようにされてるでしょうか?

  • rgba
  • rgb
  • キーワード(black, whiteなど)
  • 16進数

などでしょうか。
デザイナーから細かい指定がある場合などはrgb値が明記されていてその通りに書けば済むことも多いですが、デザインに疎い人間がざっくり色指定しなければいけない場合には色味の調整が難しいですよね。

hslとは

そこで今回紹介するのは(筆者の観測範囲では)あまりみないhslという指定方法についてです。

rgbaは「red」「green」「blue」「alpha」の頭文字ですが、hslは

  • h : Hue(色相)
  • s : Saturation(彩度)
  • l : Lightness(輝度)

となります。
指定方法の具体例をみてみましょう。

See the Pen hsl-sample by ririli (@ririli) on CodePen.

ここですね。

hsl( 207, 100%, 50%);

左から色相、彩度、輝度となってます。

それぞれどんな値を入れれば良いのかみていきます。

色相

色相には色相環と呼ばれるものの角度を指定します。色相環について
そのため取りうる値は0~360です。

0が赤、180で青、360で赤というようになってます。
また、角度になっているので360を超えるような値、例えば420などを入れた場合は420-360で60を指定したことと等しくなります。
SCSSなどで繰り返す場合はこれを覚えておくと便利かも。

彩度

彩度には100分率の値を指定します。
取りうる値は0%~100%です。

彩度が低いほど暗く重く、高いほど明るく軽い色になります。

彩度100%がその色相における純色扱いです。
彩度0%はもう元の色はわかりません。

輝度

輝度も100分率の値を指定します。
こちらも取りうる値は0%~100%です。

彩度とは異なり、50%がその色相における純色の扱いになっています。
これが100%に近づくと人の目にとって輝いて見えように白くなっていきます。
逆に0%に近づくと全く輝いて見えないように黒くなっていきます。

hslのなにがいいわけ?

ここまでhslの指定方法についてみてきましたが、hslにすると何が嬉しいんでしょう?
個人的な観点ですが、似た色を簡単に作れることだと思ってます。

二つ目のサンプルをみてみましょう。

See the Pen RwWgpOY by ririli (@ririli) on CodePen.

hoverとactiveに輝度だけを変えた色を指定しました。
CSS上での一覧性も高いし、rgbで若干薄い同系色を作るのも若干手間なので輝度のパーセントだけを変えれば良いhslはパッと同系色を作るのにとても便利。

JSを使わずにCSSだけでパララックスを実装する【3D】

$
0
0

スクロールしたときに背景だけスクロール速度が変わるようなパララックスは JavaScript で実装するのが一般的ですが、CSS で要素を 3D 空間上に配置する方法を使えば JavaScript なしでパララックスを実装することができます。

b.gif

<divclass="container"><divclass="background">Background (z: -800px)</div><divclass="content">Content (z: 0px)</div></div>
.container{width:100%;height:100vh;overflow-x:hidden;overflow-y:auto;perspective:800px;}.background{z-index:-1;width:200px;height:200px;margin:60pxauto;transform:translateZ(-800px)scale(2);background:hsl(39,97%,63%);color:white;}.content{position:relative;width:320px;height:640px;margin:0auto;background:hsl(175,61%,77%);color:white;}

解説

Container

まず 3D 空間の基準となるコンテナ要素を作ります。

.container{width:100%;height:100vh;overflow-x:hidden;overflow-y:auto;perspective:800px;}
  • ここでは 100% x 100vh
  • overflow-y: autoでスクロールされるようにする
  • perspectiveプロパティで空間の奥行きを指定する (perspective: 800pxだと 800px 手前の場所から見ている感じになる)

Background

次に背景。

.background{width:160px;height:160px;margin:80pxauto;transform:translateZ(-800px)scale(2);background:hsl(39,97%,63%);color:white;}
  • translateZで z 軸方向の位置を指定する (ここでは基準のコンテナより 800px 奥に配置)

z 軸方向の位置が奥に行くほど見かけ上のサイズが小さくなりますが、scale(z軸方向の位置) / -(perspective) + 1の値を指定すると元のサイズに見せかけることができます。

さいごに

ここで紹介したパララックスを使ってポートフォリオを作りました。

https://yarnaimo.now.sh

MAMPを使ったWordpressでのWEB制作方法② 初心者向け

$
0
0

MAMPを使ったWordpressでのWEB制作方法② 初心者向け

前回の記事はこちら
MAMPを使ったWordpressでのWEB制作方法① 初心者向け

今回制作するのは以下のようなコーポレートサイトです
画像や文章などは簡略化してhtmlとcssでマークアップしています

トップページ(index.html)
いわゆるトップページです。
Image from Gyazo

記事一覧ページ(archive.html)
投稿のアーカイブ(一覧)ページです。
レイアウトは以下にします
infomation・・・リリース業務に関するお知らせのセクション
blog・・・ブログの投稿に関するセクション
※好みに合わせてカスタマイズが可能です

Image from Gyazo

お問い合わせページ(contact.html)
ユーザーからのお問い合わせページです
受信方法としてメールアドレスを設定します
Image from Gyazo

会社概要ページ(company.html)
固定ページです
会社の概要ページです。
Image from Gyazo

サービス紹介ページ(service.html)
固定ページです
サービス内容のページです。
Image from Gyazo

投稿結果ページ(single.html)
リリース、業務に関するお知らせ、ブログは
同じレイアウトにして管理を簡単にします
投稿はwordpressの管理者画面からできるようにします
Image from Gyazo

ディレクトリ構成は以下のとおりです
CSSはstyle.cssに記述をしています。今回JSは使用しません
Image from Gyazo

制作の段階で共通化する部分は同じレイアウトにしておきます
今回の場合はヘッダー、フッター、サイドバーは共通レイアウトです

このようにマークアップしたファイルをwordpressのテーマ化をすることで
プログラミングがわからない方でもWEBの管理ができるよう制作します

次回はMAMP内にwordpressに必要なファイルを作成していきます。

MAMPを使ったWordpressでのWEB制作方法③ 初心者向け

MAMPを使ったWordpressでのWEB制作方法③ 初心者向け

$
0
0

MAMPを使ったWordpressでのWEB制作方法③ 初心者向け

前回の記事はこちら
#MAMPを使ったWordpressでのWEB制作方法② 初心者向け

Wordpress化に必要なファイルの作成

今回htmlファイルをwordpress化するために必要な
phpファイルを作成していきます

今回作成するファイルは以下の6つです
ファイル名はwordpressにて定義されているので同じ名前にしてください
中身は空で大丈夫です

index.php トップページのファイル
header.php ヘッダーのファイル(部分テンプレート)
footer.php フッターのファイル(部分テンプレート)
sidebar.php サイドバーのファイル(部分テンプレート)
page.php 固定ページ用ファイル
single.php 投稿ページ用ファイル
archive.php 記事一覧ページ用ファイル
functions.php 機能追加時などのファイル

まずはこれらをhtmlファイルのあるディレクトリに作成しましょう

Image from Gyazo

このような構成になっていればOKです

次にこれを以下のディレクトリに格納します

Application/MAMP/htdocs/wordpress/wp-content/themes

以下のようになっていればOKです。
今回使用するファイルはcorporate_sampleという名前にしてあります。
こちらは任意ですので好きな名前をつけましょう
Image from Gyazo

この段階でMAMPを起動しlocalhostを確認しましょう
パスの末尾にadminをつけると管理者画面に入れます。
Image from Gyazo

外観→テーマをクリックすると作成したファイルの一覧が表示されます。
が、今の段階ではまだここに表示がされません
下の方を確認すると壊れているテーマと警告が出ています。

Image from Gyazo

wordpressのテーマはディレクトリの一番上にstyle.cssの
CSSファイルが必要なため警告が出ています。

よってディレクトリの一番上にstyle.cssの空ファイルを作成します。
Image from Gyazo

管理者画面を再読み込みすると以下のようにテーマとして認識されます。
Image from Gyazo

このシートにはテーマの情報を記入できますので以下のように書いておきましょう

style.css
/*
Theme Name: corporate_sample テーマの名前
Theme URI: http:// URL
Description: A theme by <a href="http://www">title</a>.
Version: 1.0.0 バージョン
Author: fumiyaozaki 製作者
Author URI: http://www 制作者のURL
*/

記載した情報はテーマの詳細として認識されます
Image from Gyazo

ここまでの動作が問題なければ
次回よりphpファイルに記述をして
wordpress化をしていきます。

MAMPを使ったWordpressでのWEB制作方法④ 初心者向け

Viewing all 8767 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>