pull develop
このコミットが含まれているのは:
コミット
e6e182cec5
39
README.md
39
README.md
|
@ -1,2 +1,41 @@
|
|||
# kikikanri
|
||||
危機管理クラウドアプリ
|
||||
|
||||
|
||||
|
||||
# 開発環境構築手順
|
||||
#### 1.Docker立ち上げ
|
||||
docker-compose up -d
|
||||
|
||||
#### 2.appに入る
|
||||
docker-compose exec app bash
|
||||
|
||||
#### 3.各種インストール
|
||||
npm install
|
||||
composer install
|
||||
|
||||
#### 4.npm実行
|
||||
cp .env.example .env
|
||||
php artisan key:generate
|
||||
npm run watch ( npm run dev )
|
||||
|
||||
#### 5.DB接続
|
||||
php artisan migrate:fresh --seed
|
||||
|
||||
|
||||
|
||||
# 仕様書
|
||||
#### ■ 基本情報
|
||||
https://docs.google.com/spreadsheets/d/1_S9Hbrf3XZcLXBrnTqxTusuoO5_9dmAooTQ2EGsR7mo/edit?usp=sharing
|
||||
|
||||
#### ■ フロントエンド
|
||||
https://docs.google.com/spreadsheets/d/14wR8VARy5geANyMcaXGANRfmBjXs8hZp3O-pFYbzUXo/edit?usp=sharing
|
||||
|
||||
#### ■ バックエンド
|
||||
https://docs.google.com/spreadsheets/d/1UYafqtgnrRErS_O3vWLAHb_UsTO14VOpdqZ07ActeZM/edit?usp=sharing
|
||||
|
||||
#### ■ DB
|
||||
https://docs.google.com/spreadsheets/d/1RBd-o9d_aLiRsopX4rxdgRTo9aPUtrZbLauN7RtLYek/edit?usp=sharing
|
||||
|
||||
#### デザイン
|
||||
https://xd.adobe.com/view/d692dfcb-15f6-4444-9c48-2bbab7b06979-83c1/
|
||||
|
|
|
@ -0,0 +1,101 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Models\Child;
|
||||
use App\Models\FatherRelation;
|
||||
use App\Models\MeetingApprovals;
|
||||
|
||||
class ChildrenController extends Controller {
|
||||
public function login () {}
|
||||
|
||||
public function registerTemporary () {}
|
||||
|
||||
public function registerMain () {}
|
||||
|
||||
public function checkTel () {}
|
||||
|
||||
public function list () {
|
||||
// 親一覧の取得に成功
|
||||
if ($result = Child::orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 親一覧の取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfFather (Request $r) {
|
||||
$result = [];
|
||||
$child_select = ['id', 'image', 'last_name', 'first_name'];
|
||||
|
||||
if ($list = FatherRelation::where('father_id', $r->father_id)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
foreach ($list as $l) {
|
||||
$result[] = Child::select($child_select)->find($l['father_id']);
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfMeeting (Request $r) {
|
||||
$result = [];
|
||||
$child_select = ['id', 'image', 'last_name', 'first_name'];
|
||||
|
||||
if ($list = MeetingApprovals::where('meeting_id', $r->meeting_id)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
foreach ($list as $l) {
|
||||
$result[] = Child::select($child_select)->find($l['id']);
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfMeetingNotifyUnapprovel () {}
|
||||
|
||||
public function listOfMeetingNotifyApprovel () {}
|
||||
|
||||
public function detail (Request $r, $child_id) {
|
||||
$result = [];
|
||||
$child_select = ['email', 'tel', 'last_name', 'first_name', 'image', 'company'];
|
||||
$father_relation_select = ['hire_at'];
|
||||
|
||||
// 親詳細の取得に成功
|
||||
if ($list = Child::where('id', $child_id)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = Child::select($child_select)->find($l['id']);
|
||||
if (isset($r->father_id)) {
|
||||
$result[$i]['father_relation'] = FatherRelation::select($father_relation_select)->where('father_id', $r->father_id)->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 親詳細の取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function updateImage ($child_id) {}
|
||||
|
||||
public function updateProfile ($child_id) {}
|
||||
|
||||
public function updatePassword ($child_id) {}
|
||||
|
||||
public function delete ($child_id) {
|
||||
// 削除成功
|
||||
if (Child::where('id', $child_id)->delete()) {
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use App\Models\EmailActivation;
|
||||
|
||||
class EmailActivationsController extends Controller {
|
||||
public function deleteRelationFather ($father_id) {
|
||||
// 削除成功
|
||||
if (EmailActivation::where('father_id', $father_id)->delete()) {
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
class FatherRelationsController extends Controller {
|
||||
public function register () {}
|
||||
|
||||
public function updateHireDate ($child_id) {}
|
||||
|
||||
public function deleteRelationFather ($father_id) {
|
||||
// 削除成功
|
||||
if (FatherRelation::where('father_id', $father_id)->delete()) {
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function deleteRelationChild ($child_id) {
|
||||
// 削除成功
|
||||
if (FatherRelation::where('child_id', $child_id)->delete()) {
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -2,19 +2,84 @@
|
|||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use Illuminate\Support\Facades\DB;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Log;
|
||||
|
||||
class FathersController {
|
||||
public $error = [];
|
||||
use App\Models\Father;
|
||||
use App\Models\FatherRelation;
|
||||
|
||||
class FathersController extends Controller {
|
||||
public function login () {}
|
||||
|
||||
public function registerTemporary () {}
|
||||
|
||||
public function registerMain () {}
|
||||
|
||||
public function list () {
|
||||
$result = [];
|
||||
$father_select = ['id', 'company', 'image'];
|
||||
$father_relation_select = ['created_at'];
|
||||
|
||||
// 親一覧の取得に成功
|
||||
if ($list = DB::table('fathers')->orderBy('created_at', 'desc')->get()->toArray()) return ['status_code' => 200, 'params' => $list];
|
||||
if ($list = Father::select($father_select)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['relation'] = FatherRelation::select($father_relation_select)->where('father_id', $l['id'])->first();
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 親一覧の取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfChild (Request $r) {
|
||||
$result = [];
|
||||
$father_select = ['id', 'company', 'image'];
|
||||
|
||||
// 親一覧の取得に成功
|
||||
if ($list = FatherRelation::where('child_id', $r->child_id)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
$result = [];
|
||||
|
||||
foreach ($list as $l) {
|
||||
$result[] = Father::select($father_select)->find($l['father_id']);
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 親一覧の取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function detail ($father_id) {
|
||||
$father_select = ['id', 'email', 'company', 'image', 'tel'];
|
||||
|
||||
// 親詳細の取得に成功
|
||||
if ($result = Father::select($father_select)->where('id', $father_id)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 親詳細の取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function updateImage ($father_id) {}
|
||||
|
||||
public function updateProfile ($father_id) {}
|
||||
|
||||
public function updatePassword ($father_id) {}
|
||||
|
||||
public function delete ($father_id) {
|
||||
// 削除成功
|
||||
if (Father::where('id', $father_id)->delete()) {
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function checkEmail () {}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Models\LoginLimits;
|
||||
|
||||
class LoginLimitsController extends Controller {
|
||||
public function countFailure (Request $r) {
|
||||
// user_agentがなければ、エラーを出します。
|
||||
if (!isset($r->user_agent)) return ['status_code' => 400, 'error_messages' => 'ユーザーエイジェントを読めません。'];
|
||||
|
||||
// 受取
|
||||
if ($get = LoginLimits::where('user_agent', $r->user_agent)->first()) {
|
||||
// 失敗数は10以上だと、エラーを出します。以内の場合、失敗数を増えます。
|
||||
if ($get->fail_number >= 10) {
|
||||
return ['status_code' => 400, 'error_messages' => 'ログインに失敗しました。10回連続で失敗すると、一定期間ログインできなくなります。'];
|
||||
}
|
||||
else {
|
||||
LoginLimits::where('user_agent', $r->user_agent)->update(['fail_number' => $get->fail_number+1]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// まだこのuser_agentがなければ、追加します。
|
||||
LoginLimits::insert(['user_agent' => $r->user_agent, 'fail_number' => 1]);
|
||||
}
|
||||
|
||||
return ['status' => 200];
|
||||
}
|
||||
|
||||
public function delete (Request $r) {
|
||||
// 削除成功
|
||||
if (LoginLimits::where('user_agent', $r->user_agent)->delete()) {
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,74 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Models\Child;
|
||||
use App\Models\Meeting;
|
||||
use App\Models\MeetingApprovals;
|
||||
|
||||
class MeetingApprovalsController extends Controller {
|
||||
public function register (Request $r) {}
|
||||
|
||||
public function registerOfApproval (Request $r) {}
|
||||
|
||||
public function listChildrenOfMeeting (Request $r) {}
|
||||
|
||||
public function listChildrenOfApprovel (Request $r) {
|
||||
$meeting_select = ['id', 'child_id', 'approval_at'];
|
||||
$child_select = ['id', 'image', 'last_name', 'first_name'];
|
||||
|
||||
// meeting_idでミーティングの許可があれば
|
||||
if ($params = MeetingApprovals::select($meeting_select)->where('meeting_id', $r->meeting_id)->whereNotNull('approval_at')->get()) {
|
||||
// 子を付いてみて。child_idがなければ、すぐ400になります。
|
||||
foreach ($params as $p) {
|
||||
if (!$p->child_id = Child::select($child_select)->where('id', $p->child_id)->first()) {
|
||||
return ['status' => 400];
|
||||
}
|
||||
}
|
||||
|
||||
return ['status' => 200, 'params' => $params];
|
||||
}
|
||||
|
||||
// エラーの場合
|
||||
return ['status' => 400];
|
||||
}
|
||||
|
||||
public function listChildrenOfUnapprovel (Request $r) {
|
||||
$meeting_select = ['id', 'child_id', 'approval_at'];
|
||||
$child_select = ['id', 'image', 'last_name', 'first_name'];
|
||||
|
||||
// meeting_idでミーティングの許可がなければ
|
||||
if ($params = MeetingApprovals::select($meeting_select)->where('meeting_id', $r->meeting_id)->whereNull('approval_at')->get()) {
|
||||
// 子を付いてみて。child_idがなければ、すぐ400になります。
|
||||
foreach ($params as $p) {
|
||||
if (!$p->child_id = Child::select($child_select)->where('id', $p->child_id)->first()) {
|
||||
return ['status' => 400];
|
||||
}
|
||||
}
|
||||
|
||||
return ['status' => 200, 'params' => $params];
|
||||
}
|
||||
|
||||
// エラーの場合
|
||||
return ['status' => 400];
|
||||
}
|
||||
|
||||
public function deleteRelationMeeting ($meeting_id) {
|
||||
// 削除成功
|
||||
if (MeetingApprovals::where('meeting_id', $meeting_id)->delete()) return ['status_code' => 200];
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function deleteRelationChild ($child_id) {
|
||||
// 削除成功
|
||||
if (MeetingApprovals::where('child_id', $child_id)->delete()) return ['status_code' => 200];
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,28 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Validator;
|
||||
|
||||
use App\Models\MeetingImage;
|
||||
|
||||
class MeetingImagesController extends Controller {
|
||||
public function register (Request $r) {
|
||||
$validate = Validator::make($r->all(), ['image' => 'max:1024|mimes:jpg,png,gif']);
|
||||
$validate->after(function ($validate) { if (count($r->image) > 10) $validate->errors()->add('count', '10枚以上登録できません。'); });
|
||||
if ($validate->fails()) return ['status_code' => 422, 'error_messages' => $validate->errors()];
|
||||
|
||||
foreach ($r->images as $image) { if (!MeetingImage::insert(['meeting_id' => $meeting_id, 'image' => $image])) return ['status_code' => 400]; }
|
||||
return ['status_code' => 200];
|
||||
}
|
||||
|
||||
public function deleteRelationMeeting ($meeting_id) {
|
||||
// 削除成功
|
||||
if (MeetingImage::where('meeting_id', $meeting_id)->delete()) return ['status_code' => 200];
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,395 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Models\Meeting;
|
||||
use App\Models\MeetingImage;
|
||||
use App\Models\MeetingApprovals;
|
||||
use App\Models\Child;
|
||||
use App\Models\Father;
|
||||
|
||||
class MeetingsController extends Controller {
|
||||
public function register () {}
|
||||
|
||||
public function registerFavorite () {}
|
||||
|
||||
public function list () {
|
||||
// adminsのみ
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_images_select = ['image'];
|
||||
$father_select = ['image', 'company'];
|
||||
$meeting_approvals_select = ['approval_at'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->orderBy('created_at', 'desc')->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['meeting_images'] = MeetingImage::select($meeting_images_select)->where('meeting_id', $l['id'])->get();
|
||||
$result[$i]['fathers'] = Father::select($father_select)->where('id', $l['father_id'])->get();
|
||||
$result[$i]['meeting_approvals'] = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $l['id'])->orderBy('approval_at', 'desc')->get();
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfApprovalOfChild (Request $r) {
|
||||
if (!isset($r->child_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_images_select = ['image'];
|
||||
$father_select = ['image', 'company'];
|
||||
$meeting_approvals_select = ['approval_at'];
|
||||
|
||||
// 取得に成功
|
||||
if ($approval = MeetingApprovals::where('child_id', $r->child_id)->whereNotNull('approval_at')->orderBy('updated_at', 'desc')->get()) {
|
||||
foreach ($approval as $a) {
|
||||
if ($list = Meeting::select($meeting_select)->where('id', $a->meeting_id)->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['meeting_images'] = MeetingImage::select($meeting_images_select)->where('meeting_id', $l['id'])->get();
|
||||
$result[$i]['fathers'] = Father::select($father_select)->where('id', $l['father_id'])->get();
|
||||
$result[$i]['meeting_approvals'] = MeetingApprovals::select($meeting_approvals_select)->whereNotNull('approval_at')->where('meeting_id', $l['id'])->orderBy('updated_at', 'desc')->get();
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfNonApprovalOfChild (Request $r) {
|
||||
if (!isset($r->child_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_images_select = ['image'];
|
||||
$father_select = ['image', 'company'];
|
||||
$meeting_approvals_select = ['approval_at'];
|
||||
|
||||
// 取得に成功
|
||||
if ($approval = MeetingApprovals::where('child_id', $r->child_id)->whereNull('approval_at')->orderBy('approval_at', 'asc')->get()) {
|
||||
foreach ($approval as $a) {
|
||||
if ($list = Meeting::select($meeting_select)->where('id', $a->meeting_id)->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['meeting_images'] = MeetingImage::select($meeting_images_select)->where('meeting_id', $l['id'])->get();
|
||||
$result[$i]['fathers'] = Father::select($father_select)->where('id', $l['father_id'])->get();
|
||||
$result[$i]['meeting_approvals'] = MeetingApprovals::select($meeting_approvals_select)->whereNull('approval_at')->where('meeting_id', $l['id'])->orderBy('approval_at', 'asc')->get();
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfCompleteOfFather (Request $r) {
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_approvals_select = ['child_id', 'approval_at'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('father_id', $r->father_id)->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['approvals'] = MeetingApprovals::select($meeting_approvals_select)->whereNotNull('approval_at')->where('meeting_id', $l['id'])->orderBy('updated_at', 'desc')->get();
|
||||
if (count($result[$i]['approvals']) == 0) {
|
||||
unset($result[$i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($result[$i]['approvals'] as $ii => $ra) {
|
||||
$result[$i]['approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfIncompleteOfFather (Request $r) {
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_approvals_select = ['child_id', 'approval_at'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('father_id', $r->father_id)->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['approvals'] = MeetingApprovals::select($meeting_approvals_select)->whereNull('approval_at')->where('meeting_id', $l['id'])->orderBy('updated_at', 'desc')->get();
|
||||
if (count($result[$i]['approvals']) > 1) {
|
||||
unset($result[$i]);
|
||||
continue;
|
||||
}
|
||||
|
||||
foreach ($result[$i]['approvals'] as $ii => $ra) {
|
||||
$result[$i]['approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfFavoriteofFather (Request $r) {
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at', 'is_favorite'];
|
||||
$meeting_approvals_select = ['child_id', 'approval_at'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('father_id', $r->father_id)->where('is_favorite', 1)->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['approvals'] = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $l['id'])->orderBy('updated_at', 'desc')->get();
|
||||
|
||||
foreach ($result[$i]['approvals'] as $ii => $ra) {
|
||||
$result[$i]['approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function listOfNonFavoriteofFather (Request $r) {
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at', 'is_favorite'];
|
||||
$meeting_approvals_select = ['child_id', 'approval_at'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('father_id', $r->father_id)->where('is_favorite', 0)->get()->toArray()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['approvals'] = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $l['id'])->orderBy('updated_at', 'desc')->get();
|
||||
|
||||
foreach ($result[$i]['approvals'] as $ii => $ra) {
|
||||
$result[$i]['approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function searchOfApprovalOfChild (Request $r) {
|
||||
if (!isset($r->child_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
if (!isset($r->keyword)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$father_select = ['image', 'company'];
|
||||
$meeting_approvals_select = ['approval_at as date'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('title', 'LIKE', '%'.$r->keyword.'%')->orWhere('text', 'LIKE', '%'.$r->keyword.'%')->get()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['father'] = Father::select($father_select)->where('id', $l['father_id'])->first();
|
||||
$result[$i]['approval'] = MeetingApprovals::select($meeting_approvals_select)->where('child_id', $r->child_id)->whereNotNull('approval_at')->get();
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function searchOfNonApprovalOfChild (Request $r) {
|
||||
if (!isset($r->child_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
if (!isset($r->keyword)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$father_select = ['image', 'company'];
|
||||
$meeting_approvals_select = ['approval_at as date'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('title', 'LIKE', '%'.$r->keyword.'%')->orWhere('text', 'LIKE', '%'.$r->keyword.'%')->get()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['father'] = Father::select($father_select)->where('id', $l['father_id'])->first();
|
||||
$result[$i]['approval'] = MeetingApprovals::select($meeting_approvals_select)->where('child_id', $r->child_id)->whereNull('approval_at')->get();
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function searchOfCompleteofFather (Request $r) {
|
||||
$r->father_id = 1;
|
||||
$r->keyword = '母';
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
if (!isset($r->keyword)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_images_select = ['image'];
|
||||
$meeting_approvals_select = ['approval_at', 'child_id'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('father_id', $r->father_id)->where('title', 'LIKE', '%'.$r->keyword.'%')->orWhere('text', 'LIKE', '%'.$r->keyword.'%')->get()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['meeting_image'] = MeetingImage::select($meeting_images_select)->where('meeting_id', $l['id'])->get();
|
||||
$result[$i]['meeting_approvals'] = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $l['id'])->whereNull('approval_at')->get();
|
||||
|
||||
foreach ($result[$i]['meeting_approvals'] as $ii => $ra) {
|
||||
$result[$i]['meeting_approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['meeting_approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function searchOfIncompleteofFather (Request $r) {
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
if (!isset($r->keyword)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'updated_at'];
|
||||
$meeting_images_select = ['image'];
|
||||
$meeting_approvals_select = ['approval_at', 'child_id'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('father_id', $r->father_id)->where('title', 'LIKE', '%'.$r->keyword.'%')->orWhere('text', 'LIKE', '%'.$r->keyword.'%')->get()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['meeting_image'] = MeetingImage::select($meeting_images_select)->where('meeting_id', $l['id'])->get();
|
||||
$result[$i]['meeting_approvals'] = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $l['id'])->whereNotNull('approval_at')->get();
|
||||
|
||||
foreach ($result[$i]['meeting_approvals'] as $ii => $ra) {
|
||||
$result[$i]['meeting_approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['meeting_approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function detail (Request $r, $meeting_id) {
|
||||
$r->father_id = 1;
|
||||
if (!isset($r->father_id)) {
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
$result = [];
|
||||
$meeting_select = ['id', 'father_id', 'title', 'text', 'memo', 'pdf', 'updated_at'];
|
||||
$meeting_images_select = ['image'];
|
||||
$meeting_approvals_select = ['approval_at', 'child_id'];
|
||||
$child_select = ['image'];
|
||||
|
||||
// 取得に成功
|
||||
if ($list = Meeting::select($meeting_select)->where('id', $meeting_id)->where('father_id', $r->father_id)->get()) {
|
||||
foreach ($list as $i => $l) {
|
||||
$result[] = $l;
|
||||
$result[$i]['meeting_image'] = MeetingImage::select($meeting_images_select)->where('meeting_id', $l['id'])->get();
|
||||
$result[$i]['meeting_approvals'] = MeetingApprovals::select($meeting_approvals_select)->where('meeting_id', $l['id'])->whereNotNull('approval_at')->get();
|
||||
|
||||
foreach ($result[$i]['meeting_approvals'] as $ii => $ra) {
|
||||
$result[$i]['meeting_approvals'][$ii]['child'] = Child::select($child_select)->where('id', $result[$i]['meeting_approvals'][$ii]['child_id'])->first();
|
||||
}
|
||||
}
|
||||
|
||||
return ['status_code' => 200, 'params' => $result];
|
||||
}
|
||||
|
||||
// 取得に失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function delete ($meeting_id) {
|
||||
// 削除成功
|
||||
if (Meetings::where('meeting_id', $meeting_id)->delete()) return ['status_code' => 200];
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
|
||||
public function deleteRelationFather ($father_id) {
|
||||
// 削除成功
|
||||
if (Meetings::where('father_id', $father_id)->delete()) return ['status_code' => 200];
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace App\Http\Controllers\Api;
|
||||
|
||||
use App\Http\Controllers\Controller;
|
||||
use Illuminate\Http\Request;
|
||||
|
||||
use App\Models\TelActivation;
|
||||
|
||||
class TelActivationsController extends Controller {
|
||||
public function deleteRelationChild ($child_id) {
|
||||
// 削除成功
|
||||
if (TelActivation::where('child_id', $child_id)->delete()) return ['status_code' => 200];
|
||||
|
||||
// 削除失敗
|
||||
return ['status_code' => 400];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Contacts extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class LoginLimits extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class MeetingApprovals extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
}
|
|
@ -0,0 +1,11 @@
|
|||
<?php
|
||||
|
||||
namespace App\Models;
|
||||
|
||||
use Illuminate\Database\Eloquent\Factories\HasFactory;
|
||||
use Illuminate\Database\Eloquent\Model;
|
||||
|
||||
class Smss extends Model
|
||||
{
|
||||
use HasFactory;
|
||||
}
|
|
@ -48,8 +48,8 @@ return [
|
|||
'url' => env('DATABASE_URL'),
|
||||
'host' => env('DB_HOST', '127.0.0.1'),
|
||||
'port' => env('DB_PORT', '3306'),
|
||||
'database' => env('DB_DATABASE', 'forge'),
|
||||
'username' => env('DB_USERNAME', 'forge'),
|
||||
'database' => env('DB_DATABASE', 'laravel_local'),
|
||||
'username' => env('DB_USERNAME', 'root'),
|
||||
'password' => env('DB_PASSWORD', ''),
|
||||
'unix_socket' => env('DB_SOCKET', ''),
|
||||
'charset' => 'utf8mb4',
|
||||
|
|
|
@ -24,7 +24,6 @@ class AdminFactory extends Factory
|
|||
return [
|
||||
'email' => $this->faker->email,
|
||||
'password' => $this->faker->password,
|
||||
'remember_token' => $this->faker->password,
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
|
|
|
@ -21,15 +21,21 @@ class ChildFactory extends Factory
|
|||
*/
|
||||
public function definition()
|
||||
{
|
||||
$tel = [
|
||||
'070'.rand(10000000, 99999999),
|
||||
'080'.rand(10000000, 99999999),
|
||||
'090'.rand(10000000, 99999999)
|
||||
];
|
||||
|
||||
return [
|
||||
'email' => $this->faker->email,
|
||||
'tel' => $this->faker->phoneNumber,
|
||||
'tel' => $tel[rand(0, 2)],
|
||||
'tel_verified_at' => $this->faker->dateTime,
|
||||
'password' => $this->faker->password,
|
||||
'last_name' => $this->faker->lastName,
|
||||
'first_name' => $this->faker->firstName,
|
||||
'img' => $this->faker->imageUrl,
|
||||
'image' => $this->faker->imageUrl,
|
||||
'company' => $this->faker->company,
|
||||
'remember_token' => $this->faker->macPlatformToken,
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
|
|
|
@ -2,17 +2,17 @@
|
|||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\MeetingChild;
|
||||
use App\Models\Contacts;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class MeetingChildFactory extends Factory
|
||||
class ContactsFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $model = MeetingChild::class;
|
||||
protected $model = Contacts::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
|
@ -22,11 +22,10 @@ class MeetingChildFactory extends Factory
|
|||
public function definition()
|
||||
{
|
||||
return [
|
||||
'child_id'=>1,
|
||||
'meeting_id'=>1,
|
||||
'approval_at'=>$this->faker->dateTime,
|
||||
'created_at'=>$this->faker->dateTime,
|
||||
'updated_at'=>$this->faker->dateTime,
|
||||
'email' => $this->faker->email,
|
||||
'message' => $this->faker->realText(49),
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -22,6 +22,7 @@ class EmailActivationFactory extends Factory
|
|||
public function definition()
|
||||
{
|
||||
return [
|
||||
'type' => $this->faker->numberBetween($min=0, $max=1),
|
||||
'father_id' => 1,
|
||||
'email' => $this->faker->email,
|
||||
'token' => $this->faker->creditCardNumber,
|
||||
|
|
|
@ -21,15 +21,20 @@ class FatherFactory extends Factory
|
|||
*/
|
||||
public function definition()
|
||||
{
|
||||
$tel = [
|
||||
'070'.rand(10000000, 99999999),
|
||||
'080'.rand(10000000, 99999999),
|
||||
'090'.rand(10000000, 99999999)
|
||||
];
|
||||
|
||||
return [
|
||||
'email' => $this->faker->email,
|
||||
'email_verified_at' => $this->faker->dateTime,
|
||||
'password' => $this->faker->password,
|
||||
'last_name' => $this->faker->lastName,
|
||||
'first_name' => $this->faker->firstName,
|
||||
'company' => $this->faker->company,
|
||||
'image' => $this->faker->imageUrl,
|
||||
'profile' => $this->faker->realText(49),
|
||||
'remember_token' => $this->faker->dateTime,
|
||||
'tel' => $tel[rand(0, 2)],
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
|
|
|
@ -22,10 +22,10 @@ class FatherRelationFactory extends Factory
|
|||
public function definition()
|
||||
{
|
||||
return [
|
||||
'father_id'=>1,
|
||||
'child_id'=>1,
|
||||
'created_at'=>$this->faker->dateTime,
|
||||
'updated_at'=>$this->faker->dateTime,
|
||||
'father_id' => 1,
|
||||
'child_id' => 1,
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\LoginLimits;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class LoginLimitsFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $model = LoginLimits::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
$ua = [
|
||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) QtWebEngine/5.15.2 Chrome/87.0.4280.144 Safari/537.36', // qutebrowser
|
||||
'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/93.0.4577.82 Safari/537.36', // brave
|
||||
'Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/91.0', // firefox
|
||||
'Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Goanna/4.8 Firefox/68.0 PaleMoon/29.4.1' // palemoon
|
||||
];
|
||||
|
||||
return [
|
||||
'user_agent' => $ua[rand(0, 3)],
|
||||
'fail_number' => rand(0, 10),
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\MeetingApprovals;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class MeetingApprovalsFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $model = MeetingApprovals::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
return [
|
||||
'child_id' => 1,
|
||||
'meeting_id' => 1,
|
||||
'approval_at' => $this->faker->dateTime,
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -22,11 +22,12 @@ class MeetingFactory extends Factory
|
|||
public function definition()
|
||||
{
|
||||
return [
|
||||
'father_id'=>1,
|
||||
'title'=>$this->faker->name,
|
||||
'text'=>$this->faker->realText(49),
|
||||
'pdf'=>$this->faker->url,
|
||||
'is_favorite'=>$this->faker->numberBetween($min=0, $max=1),
|
||||
'father_id' => 1,
|
||||
'title' => $this->faker->name,
|
||||
'text' => $this->faker->realText(49),
|
||||
'pdf' => $this->faker->url,
|
||||
'memo' => $this->faker->realText(49),
|
||||
'is_favorite' => $this->faker->numberBetween($min=0, $max=1),
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
|
|
|
@ -22,8 +22,8 @@ class MeetingImageFactory extends Factory
|
|||
public function definition()
|
||||
{
|
||||
return [
|
||||
'meeting_id'=>1,
|
||||
'image'=>$this->faker->url,
|
||||
'meeting_id' => 1,
|
||||
'image' => $this->faker->url,
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
|
|
|
@ -0,0 +1,32 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Factories;
|
||||
|
||||
use App\Models\Smss;
|
||||
use Illuminate\Database\Eloquent\Factories\Factory;
|
||||
|
||||
class SmssFactory extends Factory
|
||||
{
|
||||
/**
|
||||
* The name of the factory's corresponding model.
|
||||
*
|
||||
* @var string
|
||||
*/
|
||||
protected $model = Smss::class;
|
||||
|
||||
/**
|
||||
* Define the model's default state.
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
public function definition()
|
||||
{
|
||||
return [
|
||||
'send_id' => 1,
|
||||
'receive_id' => 1,
|
||||
'is_sent' => rand(0, 2),
|
||||
'created_at' => $this->faker->dateTime,
|
||||
'updated_at' => $this->faker->dateTime,
|
||||
];
|
||||
}
|
||||
}
|
|
@ -21,9 +21,16 @@ class TelActivationFactory extends Factory
|
|||
*/
|
||||
public function definition()
|
||||
{
|
||||
$tel = [
|
||||
'070'.rand(10000000, 99999999),
|
||||
'080'.rand(10000000, 99999999),
|
||||
'090'.rand(10000000, 99999999)
|
||||
];
|
||||
|
||||
return [
|
||||
'child_id'=>1,
|
||||
'tel'=>$this->faker->phoneNumber,
|
||||
'type' => rand(0, 1),
|
||||
'child_id' => 1,
|
||||
'tel' => $tel[rand(0, 2)],
|
||||
'token' => $this->faker->creditCardNumber,
|
||||
'ttl' => $this->faker->dateTime,
|
||||
'created_at' => $this->faker->dateTime,
|
||||
|
|
|
@ -15,9 +15,8 @@ class CreateAdminsTable extends Migration
|
|||
{
|
||||
Schema::create('admins', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('email')->unique();
|
||||
$table->string('password');
|
||||
$table->rememberToken();
|
||||
$table->string('email', 72)->unique();
|
||||
$table->string('password', 72);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -15,14 +15,13 @@ class CreateFathersTable extends Migration
|
|||
{
|
||||
Schema::create('fathers', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('email');
|
||||
$table->dateTime('email_verified_at')->nullable();
|
||||
$table->string('password')->nullable();
|
||||
$table->string('last_name')->nullable();
|
||||
$table->string('first_name')->nullable();
|
||||
$table->string('image')->nullable();
|
||||
$table->string('profile')->nullable();
|
||||
$table->rememberToken();
|
||||
$table->string('email', 255)->unique();
|
||||
$table->dateTime('email_verified_at');
|
||||
$table->string('password', 72);
|
||||
$table->string('company', 100)->nullable();
|
||||
$table->string('image', 100)->nullable();
|
||||
$table->string('profile', 1000)->nullable();
|
||||
$table->string('tel', 11)->unique();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -15,10 +15,10 @@ class CreateEmailActivationsTable extends Migration
|
|||
{
|
||||
Schema::create('email_activations', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('father_id');
|
||||
$table->foreign('father_id')->references('id')->on('fathers');
|
||||
$table->string('email');
|
||||
$table->string('token');
|
||||
$table->unsignedTinyInteger('type');
|
||||
$table->unsignedBigInteger('father_id')->nullable();
|
||||
$table->string('email', 255)->unique();
|
||||
$table->string('token', 16);
|
||||
$table->dateTime('ttl');
|
||||
$table->timestamps();
|
||||
});
|
||||
|
|
|
@ -15,14 +15,14 @@ class CreateChildrenTable extends Migration
|
|||
{
|
||||
Schema::create('children', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('email')->nullable();
|
||||
$table->string('tel');
|
||||
$table->dateTime('tel_verified_at')->nullable();
|
||||
$table->string('last_name')->nullable();
|
||||
$table->string('first_name')->nullable();
|
||||
$table->string('img')->nullable();
|
||||
$table->string('company')->nullable();
|
||||
$table->rememberToken();
|
||||
$table->string('email', 72)->unique();
|
||||
$table->string('tel', 11)->unique();
|
||||
$table->dateTime('tel_verified_at');
|
||||
$table->string('password', 255);
|
||||
$table->string('last_name', 100);
|
||||
$table->string('first_name', 100);
|
||||
$table->string('image', 100)->nullable();
|
||||
$table->string('company', 255)->nullable();
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -15,10 +15,11 @@ class CreateTelActivationsTable extends Migration
|
|||
{
|
||||
Schema::create('tel_activations', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('child_id');
|
||||
$table->unsignedTinyInteger('type');
|
||||
$table->unsignedBigInteger('child_id')->nullable();
|
||||
$table->foreign('child_id')->references('id')->on('children');
|
||||
$table->string('tel');
|
||||
$table->string('token');
|
||||
$table->string('tel', 11)->unique();
|
||||
$table->string('token', 100);
|
||||
$table->dateTime('ttl');
|
||||
$table->timestamps();
|
||||
});
|
||||
|
|
|
@ -17,10 +17,11 @@ class CreateMeetingsTable extends Migration
|
|||
$table->id();
|
||||
$table->unsignedBigInteger('father_id');
|
||||
$table->foreign('father_id')->references('id')->on('fathers');
|
||||
$table->string('title');
|
||||
$table->string('text');
|
||||
$table->string('pdf')->nullable();
|
||||
$table->integer('is_favorite')->default(0);
|
||||
$table->string('title', 255);
|
||||
$table->string('text', 2000);
|
||||
$table->string('pdf', 255)->nullable();
|
||||
$table->string('memo', 2000)->nullable();
|
||||
$table->integer('is_favorite')->nullable()->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateLoginLimitsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('login_limits', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('user_agent', 300);
|
||||
$table->unsignedInteger('fail_number');
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('login_limits');
|
||||
}
|
||||
}
|
|
@ -4,7 +4,7 @@ use Illuminate\Database\Migrations\Migration;
|
|||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateMeetingChildrenTable extends Migration
|
||||
class CreateMeetingApprovalsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
|
@ -13,7 +13,7 @@ class CreateMeetingChildrenTable extends Migration
|
|||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('meeting_children', function (Blueprint $table) {
|
||||
Schema::create('meeting_approvals', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedBigInteger('child_id');
|
||||
$table->foreign('child_id')->references('id')->on('children');
|
||||
|
@ -31,6 +31,6 @@ class CreateMeetingChildrenTable extends Migration
|
|||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('meeting_children');
|
||||
Schema::dropIfExists('meeting_approvals');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateSmssesTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('smsses', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->unsignedTinyInteger('send_id');
|
||||
$table->unsignedBigInteger('receive_id');
|
||||
$table->foreign('receive_id')->references('id')->on('children');
|
||||
$table->unsignedTinyInteger('is_sent')->default(0);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('smsses');
|
||||
}
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
use Illuminate\Database\Migrations\Migration;
|
||||
use Illuminate\Database\Schema\Blueprint;
|
||||
use Illuminate\Support\Facades\Schema;
|
||||
|
||||
class CreateContactsTable extends Migration
|
||||
{
|
||||
/**
|
||||
* Run the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function up()
|
||||
{
|
||||
Schema::create('contacts', function (Blueprint $table) {
|
||||
$table->id();
|
||||
$table->string('email', 255);
|
||||
$table->string('message', 1000);
|
||||
$table->timestamps();
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Reverse the migrations.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function down()
|
||||
{
|
||||
Schema::dropIfExists('contacts');
|
||||
}
|
||||
}
|
|
@ -3,9 +3,8 @@
|
|||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
use App\Models\MeetingChild;
|
||||
|
||||
class MeetingChildrenTableSeeder extends Seeder
|
||||
class ContactsSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
|
@ -14,6 +13,6 @@ class MeetingChildrenTableSeeder extends Seeder
|
|||
*/
|
||||
public function run()
|
||||
{
|
||||
\App\Models\MeetingChild::factory()->count(10)->create();
|
||||
\App\Models\Contacts::factory()->count(10)->create();
|
||||
}
|
||||
}
|
|
@ -30,6 +30,12 @@ class DatabaseSeeder extends Seeder
|
|||
$this->call
|
||||
(MeetingImagesTableSeeder::class);
|
||||
$this->call
|
||||
(MeetingChildrenTableSeeder::class);
|
||||
(MeetingApprovalsSeeder::class);
|
||||
$this->call
|
||||
(LoginLimitsSeeder::class);
|
||||
$this->call
|
||||
(ContactsSeeder::class);
|
||||
$this->call
|
||||
(SmssSeeder::class);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class LoginLimitsSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
\App\Models\LoginLimits::factory()->count(10)->create();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class MeetingApprovalsSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
\App\Models\MeetingApprovals::factory()->count(10)->create();
|
||||
}
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
namespace Database\Seeders;
|
||||
|
||||
use Illuminate\Database\Seeder;
|
||||
|
||||
class SmssSeeder extends Seeder
|
||||
{
|
||||
/**
|
||||
* Run the database seeds.
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function run()
|
||||
{
|
||||
\App\Models\Smss::factory()->count(10)->create();
|
||||
}
|
||||
}
|
ファイル差分が大きすぎるため省略します
差分を読み込み
|
@ -9,10 +9,71 @@
|
|||
"prod": "npm run production",
|
||||
"production": "mix --production"
|
||||
},
|
||||
"dependencies": {
|
||||
"@emotion/react": "^11.4.0",
|
||||
"@emotion/styled": "^11.3.0",
|
||||
"@iconify/icons-ant-design": "^1.1.0",
|
||||
"@iconify/icons-eva": "^1.1.0",
|
||||
"@iconify/icons-ic": "^1.1.7",
|
||||
"@iconify/react": "^1.1.4",
|
||||
"@material-ui/core": "^5.0.0-beta.1",
|
||||
"@material-ui/lab": "^5.0.0-alpha.40",
|
||||
"@material-ui/styles": "^5.0.0-beta.1",
|
||||
"@material-ui/utils": "^5.0.0-beta.0",
|
||||
"@mui/icons-material": "^5.0.1",
|
||||
"@testing-library/jest-dom": "^5.14.1",
|
||||
"apexcharts": "^3.27.3",
|
||||
"change-case": "^4.1.2",
|
||||
"date-fns": "^2.23.0",
|
||||
"faker": "^5.5.3",
|
||||
"formik": "^2.2.9",
|
||||
"framer-motion": "^4.1.17",
|
||||
"history": "^5.0.0",
|
||||
"lodash": "^4.17.21",
|
||||
"mdb-ui-kit": "^3.9.0",
|
||||
"numeral": "^2.0.6",
|
||||
"prop-types": "^15.7.2",
|
||||
"react": "^17.0.2",
|
||||
"react-apexcharts": "^1.3.9",
|
||||
"react-avatar-editor": "^12.0.0",
|
||||
"react-date-picker": "^8.3.2",
|
||||
"react-dom": "^17.0.2",
|
||||
"react-helmet-async": "^1.0.9",
|
||||
"react-image-crop-component": "^1.1.2",
|
||||
"react-paginate": "^7.1.3",
|
||||
"react-router-dom": "^6.0.0-beta.0",
|
||||
"react-scripts": "4.0.0",
|
||||
"react-select": "^4.3.1",
|
||||
"react-simple-star-rating": "^3.0.0",
|
||||
"simplebar": "^5.3.5",
|
||||
"simplebar-react": "^2.3.5",
|
||||
"web-vitals": "^2.1.0",
|
||||
"yup": "^0.32.9"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.14.8",
|
||||
"@babel/eslint-parser": "^7.14.7",
|
||||
"@babel/preset-react": "^7.0.0",
|
||||
"axios": "^0.21",
|
||||
"bootstrap": "^4.0.0",
|
||||
"eslint": "^7.31.0",
|
||||
"eslint-config-airbnb": "^18.2.1",
|
||||
"eslint-config-prettier": "^8.3.0",
|
||||
"eslint-config-react-app": "^6.0.0",
|
||||
"eslint-plugin-flowtype": "^5.8.1",
|
||||
"eslint-plugin-import": "^2.23.4",
|
||||
"eslint-plugin-jsx-a11y": "^6.4.1",
|
||||
"eslint-plugin-prettier": "^3.4.0",
|
||||
"eslint-plugin-react": "^7.24.0",
|
||||
"eslint-plugin-react-hooks": "^4.2.0",
|
||||
"jquery": "^3.2",
|
||||
"laravel-mix": "^6.0.6",
|
||||
"lodash": "^4.17.19",
|
||||
"postcss": "^8.1.14"
|
||||
"popper.js": "^1.12",
|
||||
"postcss": "^8.1.14",
|
||||
"prettier": "^2.3.1",
|
||||
"resolve-url-loader": "^3.1.2",
|
||||
"sass": "^1.42.1",
|
||||
"sass-loader": "^8.0.0"
|
||||
}
|
||||
}
|
||||
|
|
ファイル差分が大きすぎるため省略します
差分を読み込み
ファイル差分が大きすぎるため省略します
差分を読み込み
|
@ -1 +1,4 @@
|
|||
require('./bootstrap');
|
||||
|
||||
require('./pages/contact');
|
||||
require('./pages/contact/complete');
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
import React from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import { Button } from '@material-ui/core';
|
||||
|
||||
|
||||
const Contact_Complete = () => {
|
||||
return (
|
||||
<div>
|
||||
<p className="text-center font-weight-bold ft-20">お問い合わせ完了</p>
|
||||
<p className="p-2 mt-80-px mb-0 ft-13 bg-color-1">
|
||||
お問い合わせが完了しました。<br/>
|
||||
3営業日以内にお返事させていただきます。<br/><br/>
|
||||
万が一届かない場合は、以下のメールアドレスに 直接ご連絡くださいませ。
|
||||
</p>
|
||||
|
||||
<div className="p-2 my-4 border text-center font-weight-bold">sample@gmail.com</div>
|
||||
|
||||
<div className="d-flex justify-content-between ft-13">
|
||||
<div className="w-50 pr-1">
|
||||
<Button fullWidth className="p-3 rounded-20 ft-13 font-weight-bold text-black bg-color-2" onClick={()=>{window.location.href="/login/p-account/"}}>親ログイン画面へ</Button>
|
||||
</div>
|
||||
<div className="w-50 pl-1">
|
||||
<Button fullWidth className="p-3 rounded-20 ft-13 font-weight-bold text-black bg-color-2" onClick={()=>{window.location.href="/login/c-account/"}}>子ログイン画面へ</Button>
|
||||
</div>
|
||||
</div>
|
||||
{/* <div className="alert">メールアドレスのコビーに成功しました!</div> */}
|
||||
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if(document.getElementById('contact-complete')){
|
||||
ReactDOM.render(
|
||||
<Contact_Complete />,
|
||||
document.getElementById('contact-complete')
|
||||
)
|
||||
}
|
|
@ -0,0 +1,54 @@
|
|||
import React, { useEffect, useState } from 'react';
|
||||
import ReactDOM from 'react-dom';
|
||||
import { Button } from '@material-ui/core';
|
||||
import { LoadingButton } from '@material-ui/lab';
|
||||
import axios from 'axios';
|
||||
|
||||
|
||||
|
||||
const Contact = () => {
|
||||
const [email, setEmail] = useState('');
|
||||
const [text, setText] = useState('');
|
||||
|
||||
const handleSubmit = () => {
|
||||
e.preventDefault();
|
||||
const formdata = new FormData();
|
||||
formdata.append('email', email);
|
||||
formdata.append('text', text);
|
||||
|
||||
axios.post('/contacts/register/', formdata)
|
||||
.then(response => {
|
||||
if(response.status==200){
|
||||
window.location.href = '/contact-us/complete';
|
||||
}
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
return (
|
||||
<form onSubmit={handleSubmit}>
|
||||
<p className="text-center font-weight-bold ft-20">お問い合わせ</p>
|
||||
<div className="c-input mt-4">
|
||||
<label htmlFor="email" className="c-input__label"> メールアドレス </label>
|
||||
<input type="email" name="email" id="email" className="w-100 c-input__edit is-invalid" value={email} onChange={e=>setEmail(e.target.value)} required autoFocus/>
|
||||
</div>
|
||||
|
||||
<div className="c-input mt-4">
|
||||
<label htmlFor="text" className="c-input__label"> お問合せ内容 </label>
|
||||
<textarea name="text" id="text" rows="7" className="w-100 c-input__edit is-invalid" value={text} onChange={e=>setText(e.target.value)} required/>
|
||||
</div>
|
||||
|
||||
<div className="mt-4">
|
||||
<LoadingButton type="submit" fullWidth className="p-3 rounded-20 ft-15 font-weight-bold text-black bg-color-2">送信</LoadingButton>
|
||||
</div>
|
||||
</form>
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
if(document.getElementById('contact')){
|
||||
ReactDOM.render(
|
||||
<Contact />,
|
||||
document.getElementById('contact')
|
||||
)
|
||||
}
|
|
@ -78,11 +78,11 @@ return [
|
|||
],
|
||||
'max' => [
|
||||
'numeric' => 'The :attribute must not be greater than :max.',
|
||||
'file' => 'The :attribute must not be greater than :max kilobytes.',
|
||||
'file' => 'プロフィール画像は最大1M以内です。',
|
||||
'string' => 'The :attribute must not be greater than :max characters.',
|
||||
'array' => 'The :attribute must not have more than :max items.',
|
||||
],
|
||||
'mimes' => 'The :attribute must be a file of type: :values.',
|
||||
'mimes' => 'ファイル形式は :values のみです。',
|
||||
'mimetypes' => 'The :attribute must be a file of type: :values.',
|
||||
'min' => [
|
||||
'numeric' => 'The :attribute must be at least :min.',
|
||||
|
|
|
@ -0,0 +1,41 @@
|
|||
// Body
|
||||
$body-bg: #f8fafc;
|
||||
|
||||
// Typography
|
||||
$font-family-sans-serif: 'Nunito', sans-serif;
|
||||
$font-size-base: 0.9rem;
|
||||
$line-height-base: 1.6;
|
||||
|
||||
// Colors
|
||||
$blue: #3490dc;
|
||||
$indigo: #6574cd;
|
||||
$purple: #9561e2;
|
||||
$pink: #f66d9b;
|
||||
$red: #e3342f;
|
||||
$orange: #f6993f;
|
||||
$yellow: #ffed4a;
|
||||
$green: #38c172;
|
||||
$teal: #4dc0b5;
|
||||
$cyan: #6cb2eb;
|
||||
|
||||
//------------------------
|
||||
$color1: #F5F7F8;
|
||||
$color2: #F0DE00;
|
||||
|
||||
$colorRed: #af0606;
|
||||
$colorBlue: #004DC7;
|
||||
$colorBlack: #000000;
|
||||
$colorGray: #B2B2B2;
|
||||
/* border color */
|
||||
$borderColorGray: #eeeeee;
|
||||
/* input color */
|
||||
$inputBorderGray: #D8D8D8;
|
||||
|
||||
|
||||
.bg-color-1{
|
||||
background-color: $color1 !important;
|
||||
}
|
||||
|
||||
.bg-color-2{
|
||||
background-color: $color2 !important;
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
// Fonts
|
||||
@charset "UTF-8";
|
||||
|
||||
@import url('https://fonts.googleapis.com/css?family=Nunito');
|
||||
|
||||
// Variables
|
||||
@import 'variables';
|
||||
|
||||
|
||||
$breakpoint-up: (
|
||||
'pc': 'screen and (min-width: 1068px)',
|
||||
'sp': 'screen and (min-width: 431px)',
|
||||
'sp02': 'screen and (min-width: 375px)',
|
||||
) !default;
|
||||
|
||||
$breakpoint-down: (
|
||||
'sp': 'screen and (max-width: 1067px)',
|
||||
'sp02': 'screen and (max-width: 430px)',
|
||||
'min': 'screen and (max-width: 374px)',
|
||||
) !default;
|
||||
|
||||
@mixin mq_up($breakpoint: md) {
|
||||
@media #{map-get($breakpoint-up, $breakpoint)} {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin mq_down($breakpoint: md) {
|
||||
@media #{map-get($breakpoint-down, $breakpoint)} {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// Bootstrap
|
||||
@import '~bootstrap/scss/bootstrap';
|
||||
|
||||
@import './base/layout';
|
||||
@import './base/loader';
|
||||
@import './base/color';
|
||||
@import './base/font';
|
||||
@import './base/_typography';
|
||||
|
||||
@import './layouts/main';
|
||||
|
||||
@import './component/alert';
|
||||
@import './component/button';
|
||||
@import './component/flex';
|
||||
@import './component/img';
|
||||
@import './component/input';
|
||||
@import './component/list';
|
||||
|
|
@ -0,0 +1,10 @@
|
|||
.bg-red-4{ background-color: rgba(255, 0, 0, 0.4); }
|
||||
.bg-red-6{ background-color: rgba(255, 0, 0, 0.6); }
|
||||
.bg-black-4{ background-color: rgba(0, 0, 0, 0.4); }
|
||||
.bg-black-6{ background-color: rgba(0, 0, 0, 0.6); }
|
||||
.bg-black{ background-color: black; }
|
||||
.bg-green{ background-color: #093100 }
|
||||
.bg-green-6{ background-color: #093100; opacity: .6;}
|
||||
.bg-none{ background-color: transparent; }
|
||||
.bg-white-2{ background-color: rgb(255,255,255, .2) !important; }
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
|
||||
|
||||
.ft-12{ font-size: 12px !important; }
|
||||
.ft-13{ font-size: 13px !important; }
|
||||
.ft-14{ font-size: 14px !important; }
|
||||
.ft-15{ font-size: 15px !important; }
|
||||
.ft-16{ font-size: 16px !important; }
|
||||
.ft-17{ font-size: 17px !important; }
|
||||
.ft-18{ font-size: 18px !important; }
|
||||
.ft-19{ font-size: 19px !important; }
|
||||
.ft-20{ font-size: 20px !important; }
|
||||
|
||||
.ft-30{ font-size: 30px !important; }
|
||||
|
||||
|
||||
.ft-md-15{
|
||||
@include media-breakpoint-down(md){
|
||||
font-size: 15px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.ft-md-20{
|
||||
@include media-breakpoint-down(md){
|
||||
font-size: 20px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.text-black{ color:black !important;}
|
||||
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,121 @@
|
|||
|
||||
|
||||
table, th, td{
|
||||
padding: 5px !important;
|
||||
@include media-breakpoint-down(md){
|
||||
font-size: 16px !important;
|
||||
}
|
||||
}
|
||||
|
||||
.reviewRateStar{
|
||||
font-family: 'Font Awesome 5 Free';
|
||||
content: "\f005";
|
||||
font-size: 1.8vw;
|
||||
font-weight: 900;
|
||||
}
|
||||
|
||||
span.star{
|
||||
display: inline-block;
|
||||
width: 80px;
|
||||
line-height: 1;
|
||||
vertical-align: middle;
|
||||
margin-top: -1px;
|
||||
font-size: 0;
|
||||
}
|
||||
|
||||
pre{
|
||||
font-family: inherit;
|
||||
white-space: pre-wrap;
|
||||
word-break: break-word;
|
||||
height: 100%;
|
||||
overflow-y: visible;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.count{
|
||||
float: right;
|
||||
position: absolute;
|
||||
// display: inline-block;
|
||||
display: none;
|
||||
padding: .2em .3em;
|
||||
margin-top: 20px;
|
||||
margin-right: -10px;
|
||||
margin-left: -10px;
|
||||
color: #fff;
|
||||
font-size: 10px;
|
||||
font-weight: bold;
|
||||
line-height: 1.1;
|
||||
letter-spacing: -.05em;
|
||||
white-space: nowrap;
|
||||
text-shadow: -1px -1px 1px rgb(0 0 0 / 15%);
|
||||
background-color: #ff2e13;
|
||||
border-radius: 3px;
|
||||
z-index: 1010;
|
||||
text-rendering: optimizeLegibility;
|
||||
-webkit-font-smoothing: subpixel-antialiased;
|
||||
max-width: 5.03333em;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
|
||||
/* Chrome, Safari, Edge, Opera */
|
||||
input::-webkit-outer-spin-button,
|
||||
input::-webkit-inner-spin-button {
|
||||
-webkit-appearance: none;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* Firefox */
|
||||
input[type=number] {
|
||||
-moz-appearance: textfield;
|
||||
}
|
||||
|
||||
|
||||
|
||||
::-webkit-scrollbar {
|
||||
width: 20px;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-track {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb {
|
||||
background-color: #d6dee1;
|
||||
border-radius: 20px;
|
||||
border: 6px solid transparent;
|
||||
background-clip: content-box;
|
||||
}
|
||||
|
||||
::-webkit-scrollbar-thumb:hover {
|
||||
background-color: #a8bbbf;
|
||||
}
|
||||
|
||||
|
||||
input[type='checkbox']{
|
||||
border-radius: 0px;
|
||||
// background-color: white;
|
||||
border-color: #707070;
|
||||
|
||||
&:checked{
|
||||
border-color: #707070;
|
||||
background-image: url(/images/icon-checked.svg);
|
||||
background-color: white;
|
||||
background-size: 14px;
|
||||
}
|
||||
&:focus{
|
||||
box-shadow: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
input[type="date"].hide-calender{
|
||||
|
||||
&::-webkit-inner-spin-button,&::-webkit-calendar-picker-indicator{
|
||||
display: none;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
}
|
|
@ -0,0 +1,169 @@
|
|||
@use "sass:math";
|
||||
|
||||
.loader2-wrap{
|
||||
display: none;
|
||||
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
background-color: rgb(0,0,0,0.6);
|
||||
top: 0px;
|
||||
position: fixed;
|
||||
|
||||
.loading {
|
||||
position: fixed;
|
||||
|
||||
margin: auto;
|
||||
width: 4rem;
|
||||
height: 4rem;
|
||||
transform-style: preserve-3d;
|
||||
perspective: 800px;
|
||||
|
||||
top: calc(50vh - 2rem);
|
||||
left: calc(50vw - 2rem);
|
||||
|
||||
.arc {
|
||||
position: absolute;
|
||||
content: "";
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
border-radius: 50%;
|
||||
border-bottom: 5px solid white;
|
||||
|
||||
@for $i from 1 through 3 {
|
||||
&:nth-child(#{$i}) {
|
||||
animation: rotate#{$i} 1.15s linear infinite;
|
||||
}
|
||||
}
|
||||
|
||||
&:nth-child(1) {
|
||||
animation-delay: -0.8s;
|
||||
}
|
||||
|
||||
&:nth-child(2) {
|
||||
animation-delay: -0.4s;
|
||||
}
|
||||
|
||||
&:nth-child(3) {
|
||||
animation-delay: 0s;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate1 {
|
||||
from {
|
||||
transform: rotateX(35deg) rotateY(-45deg) rotateZ(0);
|
||||
}
|
||||
|
||||
to {
|
||||
transform: rotateX(35deg) rotateY(-45deg) rotateZ(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate2 {
|
||||
from {
|
||||
transform: rotateX(50deg) rotateY(10deg) rotateZ(0);
|
||||
}
|
||||
|
||||
to {
|
||||
transform: rotateX(50deg) rotateY(10deg) rotateZ(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
@keyframes rotate3 {
|
||||
from {
|
||||
transform: rotateX(35deg) rotateY(55deg) rotateZ(0);
|
||||
}
|
||||
|
||||
to {
|
||||
transform: rotateX(35deg) rotateY(55deg) rotateZ(1turn);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
.loader1-wrap {
|
||||
display: none;
|
||||
background-color: rgb(0,0,0,0.4);
|
||||
position: fixed;
|
||||
top: 0;
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
|
||||
.ring {
|
||||
position:absolute;
|
||||
top:50%;
|
||||
left:50%;
|
||||
transform:translate(-50%,-50%);
|
||||
width:150px;
|
||||
height:150px;
|
||||
background:#262626;
|
||||
border:3px solid #3c3c3c;
|
||||
border-radius:50%;
|
||||
text-align:center;
|
||||
line-height:150px;
|
||||
font-family:sans-serif;
|
||||
font-size:20px;
|
||||
color:#fff000;
|
||||
letter-spacing:4px;
|
||||
text-transform:uppercase;
|
||||
text-shadow:0 0 10px #fff000;
|
||||
box-shadow:0 0 20px rgba(0,0,0,.5);
|
||||
}
|
||||
.ring:before {
|
||||
content:'';
|
||||
position:absolute;
|
||||
top:-3px;
|
||||
left:-3px;
|
||||
width:150px;
|
||||
height:150px;
|
||||
border:3px solid transparent;
|
||||
border-top:3px solid #fff000;
|
||||
border-right:3px solid #fff000;
|
||||
border-radius:50%;
|
||||
animation:animateC 2s linear infinite;
|
||||
}
|
||||
#loading {
|
||||
display:block;
|
||||
position:absolute;
|
||||
top:calc(50% - 2px);
|
||||
left:50%;
|
||||
width:50%;
|
||||
height:4px;
|
||||
background:transparent;
|
||||
transform-origin:left;
|
||||
animation:animate 2s linear infinite;
|
||||
}
|
||||
#loading:before {
|
||||
content:'';
|
||||
position:absolute;
|
||||
width:16px;
|
||||
height:16px;
|
||||
border-radius:50%;
|
||||
background:#fff000;
|
||||
top:-6px;
|
||||
right:-8px;
|
||||
box-shadow:0 0 20px #fff000;
|
||||
}
|
||||
|
||||
@keyframes animateC
|
||||
{
|
||||
0% {
|
||||
transform:rotate(0deg);
|
||||
}
|
||||
100% {
|
||||
transform:rotate(360deg);
|
||||
}
|
||||
}
|
||||
@keyframes animate
|
||||
{
|
||||
0% {
|
||||
transform:rotate(45deg);
|
||||
}
|
||||
100% {
|
||||
transform:rotate(405deg);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
|
||||
.shadow-lg{ box-shadow: 0 0 8px #000 !important; }
|
||||
|
||||
.w-30{ width: 30% !important; }
|
||||
|
||||
.w-md-25{
|
||||
@include media-breakpoint-down(md){
|
||||
width: 25% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.w-md-50{
|
||||
@include media-breakpoint-down(md){
|
||||
width: 50% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.w-md-75{
|
||||
@include media-breakpoint-down(md){
|
||||
width: 75% !important;
|
||||
}
|
||||
}
|
||||
|
||||
.rounded-right-20{
|
||||
border-top-right-radius: 20px;
|
||||
border-bottom-right-radius: 20px;
|
||||
}
|
||||
|
||||
.rounded-top-15{
|
||||
border-top-right-radius: 15px;
|
||||
border-top-left-radius: 15px;
|
||||
}
|
||||
|
||||
.rounded-15{
|
||||
border-radius: 15px !important;
|
||||
}
|
||||
|
||||
.rounded-20{
|
||||
border-radius: 20px !important;
|
||||
}
|
||||
|
||||
.rounded-top-20{
|
||||
border-top-right-radius: 20px;
|
||||
border-top-left-radius: 20px;
|
||||
}
|
||||
|
||||
.mt-80-px{
|
||||
margin-top: 80px;
|
||||
}
|
|
@ -0,0 +1,36 @@
|
|||
/*
|
||||
モーダルエラー
|
||||
*/
|
||||
.alert {
|
||||
position: fixed;
|
||||
top: 0;
|
||||
right: 0;
|
||||
left: 0;
|
||||
width: 100%;
|
||||
padding: 24px 16px;
|
||||
text-align: center;
|
||||
color: #fff;
|
||||
font-weight: 700;
|
||||
// duration | timing-function | delay | iteration-count | direction | fill-mode | play-state | name
|
||||
animation: .5s ease-out 1.8s 1 normal forwards running fadeOut;
|
||||
}
|
||||
.alert-danger {
|
||||
@extend .alert;
|
||||
background: rgba(175, 6, 6, .95);
|
||||
}
|
||||
.alert-success {
|
||||
@extend .alert;
|
||||
background: rgba(46, 153, 232, .95);
|
||||
}
|
||||
|
||||
/*
|
||||
テキストエラー
|
||||
*/
|
||||
.l-alert__text--red {
|
||||
display: block;
|
||||
margin-top: 8px;
|
||||
width: 100%;
|
||||
padding: 8px;
|
||||
color: #ff4747;
|
||||
background: #ffeaea;
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
.c-button {
|
||||
text-align: center;
|
||||
margin: auto;
|
||||
}
|
||||
|
||||
.c-button__target {
|
||||
border-radius: 7px;
|
||||
display: inline-block;
|
||||
width: auto;
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/* top emphasis */
|
||||
.c-button__target--fab {}
|
||||
|
||||
/* high emphasis */
|
||||
.c-button__target--contained {
|
||||
@extend .c-button__target;
|
||||
background: $colorBlack;
|
||||
color: #fff;
|
||||
padding: 10px 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* medium emphasis */
|
||||
.c-button__target--outlined {
|
||||
@extend .c-button__target;
|
||||
border: 1px solid $inputBorderGray;
|
||||
padding: 10px 16px;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
/* low emphasis */
|
||||
.c-button__target--text {
|
||||
color: $colorBlue;
|
||||
}
|
||||
|
||||
/* bottom emphasis */
|
||||
.c-button__target--toggle {}
|
||||
|
||||
.c-button--long {
|
||||
max-width: 300px;
|
||||
width: 100%;
|
||||
margin: auto;
|
||||
}
|
|
@ -0,0 +1,76 @@
|
|||
|
||||
// .c-flex {
|
||||
// display:-webkit-box;
|
||||
// display:-ms-flexbox;
|
||||
// display:flex;
|
||||
// -ms-flex-wrap: wrap;
|
||||
// flex-wrap: wrap;
|
||||
// }
|
||||
// .c-flex__sp {
|
||||
// @include mq_down(md) {
|
||||
// display:-webkit-box;
|
||||
// display:-ms-flexbox;
|
||||
// display:flex;
|
||||
// -ms-flex-wrap: wrap;
|
||||
// flex-wrap: wrap;
|
||||
// }
|
||||
// }
|
||||
// .c-flex__pc {
|
||||
// @include mq_up(md) {
|
||||
// display:-webkit-box;
|
||||
// display:-ms-flexbox;
|
||||
// display:flex;
|
||||
// -ms-flex-wrap: wrap;
|
||||
// flex-wrap: wrap;
|
||||
// }
|
||||
// }
|
||||
// .c-flex,
|
||||
// .c-flex__sp,
|
||||
// .c-flex__pc {
|
||||
// &.v-center {
|
||||
// // 高さ:中央揃え
|
||||
// -webkit-box-align: center;
|
||||
// -ms-flex-align: center;
|
||||
// align-items: center;
|
||||
// }
|
||||
// &.v-top {
|
||||
// // 高さ:上揃え
|
||||
// -webkit-box-align: start;
|
||||
// -ms-flex-align: start;
|
||||
// align-items: flex-start;
|
||||
// }
|
||||
// &.v-center__sp {
|
||||
// @include mq_down(md) {
|
||||
// // 高さ:中央揃え
|
||||
// -webkit-box-align: center;
|
||||
// -ms-flex-align: center;
|
||||
// align-items: center;
|
||||
// }
|
||||
// }
|
||||
// &.v-center__pc {
|
||||
// @include mq_up(md) {
|
||||
// // 高さ:中央揃え
|
||||
// -webkit-box-align: center;
|
||||
// -ms-flex-align: center;
|
||||
// align-items: center;
|
||||
// }
|
||||
// }
|
||||
// &.h-center {
|
||||
// // 横:中央揃え
|
||||
// -webkit-box-pack: center;
|
||||
// -ms-flex-pack: center;
|
||||
// justify-content: center;
|
||||
// }
|
||||
// &.h-between {
|
||||
// // 横:左右揃え
|
||||
// -webkit-box-pack: center;
|
||||
// -ms-flex-pack: justify;
|
||||
// justify-content: space-between;
|
||||
// }
|
||||
// &.h-left {
|
||||
// // 横:左寄せ
|
||||
// -webkit-box-pack: start;
|
||||
// -ms-flex-pack: start;
|
||||
// justify-content: flex-start;
|
||||
// }
|
||||
// }
|
|
@ -0,0 +1,53 @@
|
|||
.c-img--cover {
|
||||
position: relative;
|
||||
display: block;
|
||||
&:before {
|
||||
content: "";
|
||||
padding-top: 100%;
|
||||
display: block;
|
||||
}
|
||||
img {
|
||||
position: absolute;
|
||||
object-fit: cover;
|
||||
font-family: 'object-fit: cover;';
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
-webkit-transform: translate(-50%,-50%);
|
||||
transform: translate(-50%,-50%);
|
||||
}
|
||||
}
|
||||
.c-img--contain {
|
||||
position: relative;
|
||||
display: block;
|
||||
img {
|
||||
position: absolute;
|
||||
object-fit: contain;
|
||||
font-family: 'object-fit: contain;';
|
||||
height: 100%;
|
||||
width: 100%;
|
||||
top: 50%;
|
||||
left: 50%;
|
||||
-webkit-transform: translate(-50%,-50%);
|
||||
transform: translate(-50%,-50%);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
画像サークル
|
||||
*/
|
||||
.c-img__circle {
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/*
|
||||
アイコン画像
|
||||
*/
|
||||
.c-img--icon {
|
||||
width: 45px;
|
||||
height: 45px;
|
||||
border-radius: 50%;
|
||||
overflow: hidden;
|
||||
}
|
|
@ -0,0 +1,156 @@
|
|||
.c-input {
|
||||
position: relative;
|
||||
textarea{
|
||||
resize: none;
|
||||
}
|
||||
}
|
||||
|
||||
.c-input__edit{
|
||||
padding: 9px 15px;
|
||||
border-radius: 15px;
|
||||
border: 1px solid gainsboro;
|
||||
&:focus{
|
||||
border: 2px solid #3490dc !important;
|
||||
box-shadow: none !important;
|
||||
}
|
||||
|
||||
}
|
||||
/*
|
||||
label
|
||||
*/
|
||||
.c-input__label {
|
||||
display: block;
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
padding: 0px 10px;
|
||||
background: #fff;
|
||||
top: -12px;
|
||||
left: 15px;
|
||||
font-size: 13px;
|
||||
color: #B2B2B2;
|
||||
// transition: .3s;
|
||||
// transform: translate(10px, 12px) scale(1);
|
||||
// &.is-active, &.is-text {
|
||||
// transform: translate(6px, -10px);
|
||||
// font-size: 10px;
|
||||
// color: $colorBlack;
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
.c-input__target {
|
||||
&.is-invalid {
|
||||
border: 1px solid #ff9999;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
checkbox
|
||||
*/
|
||||
.c-input__checkbox {
|
||||
display: block;
|
||||
position: relative;
|
||||
padding-left: 20px;
|
||||
padding-top: 3px;
|
||||
input[type=checkbox],
|
||||
input[type=radio] {
|
||||
position: absolute;
|
||||
z-index: -1;
|
||||
opacity: 0;
|
||||
left: 0;
|
||||
}
|
||||
label {
|
||||
padding-top: 5px;
|
||||
padding-left: 10px;
|
||||
}
|
||||
.color-box {
|
||||
position: absolute;
|
||||
// top: 2px;
|
||||
top: 9px;
|
||||
left: 0;
|
||||
height: 20px;
|
||||
width: 20px;
|
||||
border-radius: 5px;
|
||||
background: #fff;
|
||||
border: 1px solid #C3C3C3;
|
||||
&.circle {
|
||||
border-radius: 50%;
|
||||
}
|
||||
&:after {
|
||||
content: '';
|
||||
position: absolute;
|
||||
display: none;
|
||||
left: 7px;
|
||||
top: 4px;
|
||||
width: 4px;
|
||||
height: 9px;
|
||||
border: solid #fff;
|
||||
border-width: 0 2px 2px 0;
|
||||
transform: rotate(45deg);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.c-input__checkbox input:checked ~ .color-box {
|
||||
background: #000;
|
||||
border: 1px solid #000;
|
||||
&:after {
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
list
|
||||
*/
|
||||
.c-input__lists {
|
||||
display:-webkit-box;
|
||||
display:-ms-flexbox;
|
||||
display:flex;
|
||||
/* 横幅いっぱい */
|
||||
-webkit-box-pack: justify;
|
||||
-ms-flex-pack: justify;
|
||||
justify-content: space-between;
|
||||
/* 横並び */
|
||||
-ms-flex-wrap: wrap;
|
||||
flex-wrap: wrap;
|
||||
-webkit-box-pack: start;
|
||||
-ms-flex-pack: start;
|
||||
justify-content: flex-start;
|
||||
.c-input__list {
|
||||
position: relative;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
label {
|
||||
cursor: pointer;
|
||||
color: #cccccc;
|
||||
padding: 5px 20px;
|
||||
border: 1px solid #C3C3C3;
|
||||
display: inline-block;
|
||||
border-radius: 30px;
|
||||
transition: .2s;
|
||||
}
|
||||
input {
|
||||
position: absolute;
|
||||
z-index: 1;
|
||||
opacity: 0;
|
||||
top: 0;
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
&:checked ~ label {
|
||||
color: #fff;
|
||||
background: #000;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
&.non-check + label {
|
||||
background: #ddd !important;
|
||||
}
|
||||
&:disabled + label {
|
||||
background: #eee;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
.c-lists {
|
||||
.c-list {
|
||||
margin-bottom: 16px;
|
||||
&:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.c-list__target {}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,127 @@
|
|||
|
||||
|
||||
.l-centeringbox{
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
&-wrap{
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 50%;
|
||||
transform: translate(-50%,0);
|
||||
width: 100%;
|
||||
border-radius: 20px;
|
||||
box-sizing: border-box;
|
||||
@include media-breakpoint-up(lg) {
|
||||
padding: 192px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.l-single {
|
||||
&-main{
|
||||
min-height: 100vh; /* Fallback */
|
||||
min-height: calc(var(--vh, 1vh) * 100);
|
||||
}
|
||||
&-container{
|
||||
max-width: 540px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
border-radius: 8px;
|
||||
padding: 50px 24px 70px;
|
||||
background: #fff;
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
width: 540px;
|
||||
max-width: none;
|
||||
box-shadow: 0 1px 4px #9b8989;
|
||||
padding: 60px 60px 60px;
|
||||
}
|
||||
|
||||
h1{
|
||||
font-size: 3rem;
|
||||
text-align: center;
|
||||
margin-bottom: 35px;
|
||||
line-height: 1;
|
||||
@include media-breakpoint-up(lg) {
|
||||
margin-bottom: 35px;
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
@include media-breakpoint-down(md) {
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
@include media-breakpoint-down(sm) {
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
&-inner{
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
width: 410px;
|
||||
@include media-breakpoint-down(md) {
|
||||
width: 100%;
|
||||
}
|
||||
.form-group{
|
||||
margin: 0 0 17px;
|
||||
@include media-breakpoint-up(lg) {
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
.l-registration{
|
||||
.l-single-container h1{
|
||||
@include media-breakpoint-up(lg) {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.l-container{
|
||||
display: flex;
|
||||
flex-flow: row-reverse;
|
||||
background: #fff;
|
||||
justify-content: flex-end;
|
||||
@include media-breakpoint-up(lg) {
|
||||
// background: $_color-bg02;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
.l-content{
|
||||
max-width: 540px;
|
||||
width: 100%;
|
||||
margin: 0 auto;
|
||||
border-radius: 8px;
|
||||
padding: 30px 20px 70px;
|
||||
background: #fff;
|
||||
box-sizing: border-box;
|
||||
display: block;
|
||||
|
||||
@include media-breakpoint-up(lg) {
|
||||
width: 540px;
|
||||
max-width: none;
|
||||
padding: 60px 60px 60px;
|
||||
}
|
||||
|
||||
h1{
|
||||
font-size: 3rem;
|
||||
text-align: center;
|
||||
margin-bottom: 35px;
|
||||
line-height: 1;
|
||||
@include media-breakpoint-up(lg) {
|
||||
margin-bottom: 35px;
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
@include media-breakpoint-down(md) {
|
||||
letter-spacing: 0.02em;
|
||||
}
|
||||
@include media-breakpoint-down(sm) {
|
||||
font-size: 2.8rem;
|
||||
}
|
||||
}
|
||||
}
|
バイナリファイルは表示されません。
|
@ -0,0 +1,228 @@
|
|||
@charset "UTF-8";
|
||||
@import url('https://fonts.googleapis.com/css?family=Nunito');
|
||||
|
||||
/**
|
||||
* VARIABLE
|
||||
* global...サイト全体に使用するサイズや数値に関する変数です。
|
||||
* breakpoint...メディアクエリで使用するブレイクポイントです。
|
||||
* font-family...font-family指定をまとめています。
|
||||
* color...グローバルに使用する色指定です。
|
||||
* z-index...z-indexの並び順を管理します。
|
||||
* easing...cubic-bezier関数を使用したタイミング関数を定義しています。
|
||||
*
|
||||
* FUNCTION
|
||||
* strip-unit...pxやremなどの単位を取り除きます。
|
||||
* em...pxをemに変換します。
|
||||
* rem...pxをremに変換します。
|
||||
* tint...白色を加えて明度を明るくします。
|
||||
* shade...黒色を加えて明度を暗くします。
|
||||
* z-index...z-indexの並び順を管理します。
|
||||
* tracking...Photoshopのカーニングをemに変換します。
|
||||
*
|
||||
* MIXIN
|
||||
* mq-up...メディアクエリを`min-width`で挿入します。
|
||||
* mq-down...メディアクエリを`max-width`で挿入します。
|
||||
* responsive...レスポンシブ対応クラスを生成します。
|
||||
* clearfix...floatの解除をします。
|
||||
* on-event...:hover, :active, :focusをまとめて指定します。
|
||||
* sr-only...非表示にしてスクリーンリーダーにだけ読み上げさせます。
|
||||
*
|
||||
* BASE
|
||||
* normalize...Normalize.cssをインポートしています。
|
||||
* base...タイプセレクタと属性セレクタのデフォルトスタイルです。
|
||||
*
|
||||
* LAYOUT
|
||||
* header...ヘッダーエリアのコンテナブロックのスタイルです。
|
||||
* footer...フッターエリアのコンテナブロックのスタイルです。
|
||||
* main...コンテンツエリアのコンテナブロックのスタイルです。
|
||||
* side...サイドバーエリアのコンテナブロックのスタイルです。
|
||||
* section...`<section>`要素を使うようなセクションの余白を管理します。
|
||||
*
|
||||
* COMPONENT
|
||||
* wrapper...最大幅を指定します。
|
||||
* layout...汎用的なレイアウトオブジェクトです。グリッドレイアウトなどに使用できます。
|
||||
* media...画像とテキストが横並びになるオブジェクトです。
|
||||
* list-unstyled...`<ul>`と`<ol>`でデフォルトスタイルをリセットします。
|
||||
* embed...Youtubeなどをアスペクト比を固定してレスポンシブ対応させる場合に使用します。
|
||||
* table...tableのレイアウトアルゴリズムの変更、余白の変更をします。
|
||||
*
|
||||
* PROJECT
|
||||
* icon...アイコンフォントです。テンプレートから自動で生成されます。
|
||||
* icon-extend...アイコンフォントを拡張するModifierです。
|
||||
* button...ボタンコンポーネントです。
|
||||
* breadcrumb...パンくずリストコンポーネントです。
|
||||
* label...インラインのラベルコンポーネントです。
|
||||
* badge...投稿数のような数値を表示するバッジコンポーネントです。
|
||||
* card...カードタイプのコンポーネントです。
|
||||
* split...定義リストをブロックからインラインにするコンポーネントです。
|
||||
* notification...お知らせエリアのコンポーネントです。
|
||||
*
|
||||
* SCOPE
|
||||
* blog...ブログページのスタイルです。
|
||||
*
|
||||
* UTILITY
|
||||
* text...テキストのスタイルに関する汎用クラスです。
|
||||
* image...画像のレイアウトに関する汎用クラスです。
|
||||
* margin...マージンで余白の管理をします。常に下方向にだけ余白をとります。
|
||||
* display...要素の表示や改行をコントロールする場合に使用します。
|
||||
* width...おもにグリッドで使用する`width`を指定する汎用クラスです。
|
||||
* offset...おもにグリッドで使用する`margin-right`を指定する汎用クラスです。
|
||||
* percent...`width`プロパティを5%刻みで指定する汎用クラスです。
|
||||
*/
|
||||
/**
|
||||
* このスタイルシートは[FLOCSS](https://github.com/hiloki/flocss)をベースにしています。
|
||||
* 定義されているレイヤー以外にもThemeやTestなどのレイヤーを追加することもできます。
|
||||
* 詳しくは[CSSコーディングルール](https://github.com/manabuyasuda/styleguide/blob/master/css-coding-rule.md#flocss)を参照してください。
|
||||
*/
|
||||
|
||||
/* =============================================================================
|
||||
#Foundation
|
||||
========================================================================== */
|
||||
//
|
||||
// Sassの変数と関数を定義します。
|
||||
// 変数は用途ごとにモジュール化、関数は機能ごとにモジュール化をします。
|
||||
// プレフィックス(接頭辞)として`_`をつけます。
|
||||
|
||||
@import "./foundation/mixin/box";
|
||||
@import "./foundation/mixin/clearfix";
|
||||
@import "./foundation/mixin/layout";
|
||||
@import "./foundation/mixin/on-event";
|
||||
@import "./foundation/mixin/pc";
|
||||
@import "./foundation/mixin/responsive";
|
||||
@import "./foundation/mixin/sp";
|
||||
@import "./foundation/mixin/sr-only";
|
||||
|
||||
// //
|
||||
// @import "./foundation/variable/animation";
|
||||
@import "./foundation/variable/breakpoint";
|
||||
@import "./foundation/variable/color";
|
||||
@import "./foundation/variable/easing";
|
||||
@import "./foundation/variable/font-family";
|
||||
@import "./foundation/variable/global";
|
||||
@import "./foundation/variable/z-index";
|
||||
|
||||
|
||||
@import "foundation/function/_em";
|
||||
@import "foundation/function/_rem";
|
||||
@import "foundation/function/_tint";
|
||||
@import "foundation/function/_shade";
|
||||
|
||||
|
||||
/**
|
||||
* Foundationレイヤーでは`html`や`body`のような広範囲にわたるベーススタイル、
|
||||
* `h2`や`ul`のような基本的なタイプセレクタのデフォルトスタイルを定義します。
|
||||
* 装飾的なスタイルは避けて、できる限り低詳細度に保ちます。idセレクタやclassセレクタは使用しません。
|
||||
*/
|
||||
@import "foundation/base/normalize";
|
||||
@import "foundation/base/base";
|
||||
@import "foundation/base/reset";
|
||||
|
||||
/* =============================================================================
|
||||
#Layout
|
||||
========================================================================== */
|
||||
/**
|
||||
* Layoutレイヤーはヘッダーやフッターのような、ページを構成するコンテナブロックのスタイルを定義します。
|
||||
* 目安としてはワイヤーフレームに書かれるような大きな単位のブロックです。
|
||||
* 汎用性のあるグリッドシステムは次のObject/Componentレイヤーで定義します。
|
||||
* グローバルナビゲーションやコピーライトのようなコンポーネントは、Object/Projectレイヤーで定義します。
|
||||
* 基本的にはclass属性を使用しますが、id属性を使用することもできます。
|
||||
* プレフィックス(接頭辞)として`l-`をつけます。
|
||||
*/
|
||||
@import "./layout/content";
|
||||
@import "./layout/footer";
|
||||
@import "./layout/header";
|
||||
@import "./layout/main";
|
||||
@import "./layout/section";
|
||||
@import "./layout/side";
|
||||
|
||||
/* =============================================================================
|
||||
#Object
|
||||
========================================================================== */
|
||||
/**
|
||||
* Objectレイヤーはプロジェクトにおけるビジュアルパターンです。抽象度や詳細度、
|
||||
* 拡張性などによって、4つのレイヤーにわけられます。
|
||||
* それぞれのレイヤーにはプレフィックス(接頭辞)をつけます。
|
||||
* 1. Component(`c-`)
|
||||
* 2. Project(`p-`)
|
||||
* 3. Scope(`s-`)
|
||||
* 4. Utility(`u-`)
|
||||
*
|
||||
* ランディングページのようにページ特有のスタイルを多く含む場合は、
|
||||
* ページ専用のCSSファイルを作成することもできます。
|
||||
* ページ専用のスタイルは、そのページにだけ読み込ませることでスコープをつくり、
|
||||
* プレフィックス(接頭辞)をつけないことで名前の重複を防ぎます。
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Component
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Componentレイヤーは多くのプロジェクトで横断的に再利用のできるような、小さな単位のモジュール(機能)です。
|
||||
* OOCSSの構造(structure)の機能を担うため、装飾的なスタイルをできるだけ含めないようにします。
|
||||
* また、`width`や`margin`といったレイアウトに影響を与えるプロパティもできるだけ含めないようにします。
|
||||
* 例えばgridやmediaといったレイアウトパターンが該当します。
|
||||
* プレフィックス(接頭辞)として`c-`をつけます。
|
||||
*/
|
||||
@import "object/component/_wrapper";
|
||||
@import "object/component/_layout";
|
||||
@import "object/component/_table";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Project
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Projectレイヤーはプロジェクト固有のパターンで、複数のページで使い回せるようなコンポーネントです。
|
||||
* 具体的なスタイルを持つUI(ユーザーフェイス)で、追加されるコンポーネントのほとんどはこのレイヤーに置かれます。
|
||||
* もし、このレイヤーで同じパターンが3箇所で使われていたら、別のコンポーネントとしてまとめられないか検討しましょう。
|
||||
* プレフィックス(接頭辞)として`p-`をつけます。
|
||||
*/
|
||||
@import "object/project/article";
|
||||
@import "object/project/box";
|
||||
@import "object/project/breadcrumb";
|
||||
@import "object/project/button";
|
||||
@import "object/project/card";
|
||||
@import "object/project/edit";
|
||||
@import "object/project/form";
|
||||
@import "object/project/icon-extend";
|
||||
@import "object/project/icon";
|
||||
@import "object/project/label";
|
||||
@import "object/project/login";
|
||||
@import "object/project/meeting";
|
||||
@import "object/project/modal";
|
||||
@import "object/project/notification";
|
||||
@import "object/project/profile";
|
||||
@import "object/project/search";
|
||||
@import "object/project/user";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Scope
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* ComponentレイヤーやProjectレイヤーのようなコンポーネント単位ではなく、
|
||||
* ページ単位や任意の範囲(スコープ)でのスタイルを定義します。1箇所でしか使わないような特異なスタイルや、
|
||||
* ページ単位でComponentやProjectレイヤーのスタイルを微調整したい場合に使用してもかまいません。
|
||||
* 例えばブログページのスタイルとして_blog.scssを作成します。
|
||||
* このレイヤーでは`.s-blog p`のような要素セレクタとの結合子も使うこともできます。
|
||||
* もし、このレイヤーで同じパターンが3箇所で使われていたら、
|
||||
* ProjectレイヤーやUtilityレイヤーでまとめられないか検討しましょう。
|
||||
* プレフィックス(接頭辞)として`s-`をつけます。
|
||||
*/
|
||||
// @import "object/scope/_blog";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Utility
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Utilityレイヤーはいわゆる汎用クラスで、ほとんどの場合は単一のスタイルをもっています。
|
||||
* コンポーネント間の間隔を調整したり、BEMのModifierが増えすぎるのを防ぎます。
|
||||
* `.mb10`のような具体的な名前より`.mb-small`のような相対的な名前にしたり、
|
||||
* pxよりもemや%で指定することを推奨します。
|
||||
* 確実にスタイルを適応させるために`!important`を使用します。
|
||||
* プレフィックス(接頭辞)として`u-`をつけます。
|
||||
*/
|
||||
@import "object/utility/align";
|
||||
@import "object/utility/display";
|
||||
@import "object/utility/margin";
|
||||
@import "object/utility/percent";
|
||||
@import "object/utility/sr-only";
|
||||
@import "object/utility/text";
|
バイナリファイルは表示されません。
バイナリファイルは表示されません。
|
@ -0,0 +1,27 @@
|
|||
// -----------------------------------------------------------------------------
|
||||
// #Single
|
||||
// -----------------------------------------------------------------------------
|
||||
|
||||
// 各HTMLファイル専用のscssファイルで読み込む変数と関数をまとめています。
|
||||
// variable, function, mixinレイヤーでファイルを追加した場合はこのファイルにも追記してください。
|
||||
// `/css/single.scss` では以下のパスでインポートします。
|
||||
// @import "../assets/css/single";
|
||||
@import "../../foundation/variable/_global";
|
||||
@import "../../foundation/variable/_breakpoint";
|
||||
@import "../../foundation/variable/_font-family";
|
||||
@import "../../foundation/variable/_color";
|
||||
@import "../../foundation/variable/_z-index";
|
||||
@import "../../foundation/variable/_easing";
|
||||
|
||||
@import "../../foundation/function/_em";
|
||||
@import "../../foundation/function/_rem";
|
||||
@import "../../foundation/function/_tint";
|
||||
@import "../../foundation/function/_shade";
|
||||
|
||||
@import "../../foundation/mixin/_pc";
|
||||
@import "../../foundation/mixin/_sp";
|
||||
@import "../../foundation/mixin/_responsive";
|
||||
@import "../../foundation/mixin/_clearfix";
|
||||
@import "../../foundation/mixin/_on-event";
|
||||
@import "../../foundation/mixin/_sr-only";
|
||||
@import "../../foundation/mixin/_layout";
|
|
@ -0,0 +1,243 @@
|
|||
@charset "UTF-8";
|
||||
|
||||
/**
|
||||
* VARIABLE
|
||||
* global...サイト全体に使用するサイズや数値に関する変数です。
|
||||
* breakpoint...メディアクエリで使用するブレイクポイントです。
|
||||
* font-family...font-family指定をまとめています。
|
||||
* color...グローバルに使用する色指定です。
|
||||
* z-index...z-indexの並び順を管理します。
|
||||
* easing...cubic-bezier関数を使用したタイミング関数を定義しています。
|
||||
*
|
||||
* FUNCTION
|
||||
* strip-unit...pxやremなどの単位を取り除きます。
|
||||
* em...pxをemに変換します。
|
||||
* rem...pxをremに変換します。
|
||||
* tint...白色を加えて明度を明るくします。
|
||||
* shade...黒色を加えて明度を暗くします。
|
||||
* z-index...z-indexの並び順を管理します。
|
||||
* tracking...Photoshopのカーニングをemに変換します。
|
||||
*
|
||||
* MIXIN
|
||||
* mq-up...メディアクエリを`min-width`で挿入します。
|
||||
* mq-down...メディアクエリを`max-width`で挿入します。
|
||||
* responsive...レスポンシブ対応クラスを生成します。
|
||||
* clearfix...floatの解除をします。
|
||||
* on-event...:hover, :active, :focusをまとめて指定します。
|
||||
* sr-only...非表示にしてスクリーンリーダーにだけ読み上げさせます。
|
||||
* layout...layoutオブジェクトのベーススタイルです。
|
||||
* media...mediaオブジェクトのベーススタイルです。
|
||||
* flag...flagオブジェクトのベーススタイルです。
|
||||
* list-unstyled...list-unstyledオブジェクトのベーススタイルです。
|
||||
* list-mark...list-markオブジェクトのベーススタイルです。
|
||||
* ratio...ratioオブジェクトのベーススタイルです。
|
||||
* box...boxオブジェクトのベーススタイルです。
|
||||
*
|
||||
* BASE
|
||||
* normalize...Normalize.cssをインポートしています。
|
||||
* base...タイプセレクタと属性セレクタのデフォルトスタイルです。
|
||||
*
|
||||
* LAYOUT
|
||||
* header...`<body>`タグ直下にある`<header>`タグのスタイルです。
|
||||
* footer...`<body>`タグ直下にある`<footer>`タグのスタイルです。
|
||||
* main...`<main>`タグのスタイルです。
|
||||
* content...`<article>`タグが使われるようなメインコンテンツのスタイルです。
|
||||
* side...`<aside>`タグが使われるようなサイドバーのスタイルです。
|
||||
* section...`<section>`要素を使うようなセクションの余白を管理します。
|
||||
*
|
||||
* COMPONENT
|
||||
* wrapper...最大幅を指定します。
|
||||
* layout...汎用的なレイアウトオブジェクトです。グリッドレイアウトなどに使用できます。
|
||||
* media...画像とテキストが横並びになるオブジェクトです。テキストを画像に回り込みさせます。
|
||||
* flag...画像とテキストが横並びになるオブジェクトです。縦方向の指定ができます。
|
||||
* list-unstyled...`<ul>`と`<ol>`でデフォルトスタイルをリセットします。
|
||||
* list-ordered...番号付きリストを入れ子レベルに応じて、1, 1.1のように区切り文字を付け加えます。
|
||||
* list-mark...リストアイテムの左にアイコンを配置します。
|
||||
* embed...Youtubeなどをアスペクト比を固定してレスポンシブ対応させる場合に使用します。
|
||||
* ratio...アスペクト比を固定したまま伸縮させます。
|
||||
* table...tableのレイアウトアルゴリズムの変更、余白の変更をします。
|
||||
*
|
||||
* PROJECT
|
||||
* icon...アイコンフォントです。テンプレートから自動で生成されます。
|
||||
* icon-extend...アイコンフォントを拡張するModifierです。
|
||||
* button...ボタンコンポーネントです。
|
||||
* breadcrumb...パンくずリストコンポーネントです。
|
||||
* label...インラインのラベルコンポーネントです。
|
||||
* box...画像やテキストなどを縦に並べるコンポーネントです。
|
||||
* card...カードタイプのコンポーネントです。
|
||||
* notification...お知らせエリアのコンポーネントです。
|
||||
* meeting...ミーティングエリアのコンポーネントです。
|
||||
* article...詳細ページのコンポーネントです。
|
||||
* modal...モーダルのコンポーネントです。
|
||||
* search...検索ページのコンポーネントです。
|
||||
* profile...プロフィールページのコンポーネントです。
|
||||
* edit...エディットページのコンポーネントです。
|
||||
*
|
||||
* SCOPE
|
||||
* blog...ブログページのスタイルです。
|
||||
*
|
||||
* UTILITY
|
||||
* text...テキストのスタイルに関する汎用クラスです。
|
||||
* align...画像などを中央や右側に配置します。
|
||||
* margin...マージンで余白の管理をします。常に下方向にだけ余白をとります。
|
||||
* display...要素の表示や改行をコントロールする場合に使用します。
|
||||
* width...おもにグリッドで使用する`width`を指定する汎用クラスです。
|
||||
* offset...おもにグリッドで使用する`margin-right`を指定する汎用クラスです。
|
||||
* percent...`width`プロパティを5%刻みで指定する汎用クラスです。
|
||||
* sr-only...要素を非表示にさせますが、スクリーンリーダーには読み上げられます。
|
||||
*/
|
||||
|
||||
/**
|
||||
* このスタイルシートは[FLOCSS](https://github.com/hiloki/flocss)をベースにしています。
|
||||
* 定義されているレイヤー以外にもThemeやTestなどのレイヤーを追加することもできます。
|
||||
* 詳しくは[CSSコーディングルール](https://github.com/manabuyasuda/styleguide/blob/master/css-coding-rule.md#flocss)を参照してください。
|
||||
*/
|
||||
|
||||
/* =============================================================================
|
||||
#Foundation
|
||||
========================================================================== */
|
||||
//
|
||||
// Sassの変数と関数を定義します。
|
||||
// 変数は用途ごとにモジュール化、関数は機能ごとにモジュール化をします。
|
||||
// プレフィックス(接頭辞)として`_`をつけます。
|
||||
//
|
||||
@import"../../foundation/variable/_global";
|
||||
@import "../../foundation/variable/_breakpoint";
|
||||
@import "../../foundation/variable/_font-family";
|
||||
@import "../../foundation/variable/_color";
|
||||
@import "../../foundation/variable/_z-index";
|
||||
@import "../../foundation/variable/_easing";
|
||||
|
||||
@import "../../foundation/function/_em";
|
||||
@import "../../foundation/function/_rem";
|
||||
@import "../../foundation/function/_tint";
|
||||
@import "../../foundation/function/_shade";
|
||||
|
||||
@import "../../foundation/mixin/_pc";
|
||||
@import "../../foundation/mixin/_sp";
|
||||
@import "../../foundation/mixin/_responsive";
|
||||
@import "../../foundation/mixin/_clearfix";
|
||||
@import "../../foundation/mixin/_on-event";
|
||||
@import "../../foundation/mixin/_sr-only";
|
||||
@import "../../foundation/mixin/_layout";
|
||||
@import "../../foundation/mixin/_box";
|
||||
|
||||
/**
|
||||
* Foundationレイヤーでは`html`や`body`のような広範囲にわたるベーススタイル、
|
||||
* `h2`や`ul`のような基本的なタイプセレクタのデフォルトスタイルを定義します。
|
||||
* 装飾的なスタイルは避けて、できる限り低詳細度に保ちます。idセレクタやclassセレクタは使用しません。
|
||||
*/
|
||||
@import "../../foundation/base/_normalize";
|
||||
@import "../../foundation/base/_reset";
|
||||
@import "../../foundation/base/_base";
|
||||
|
||||
|
||||
|
||||
/* =============================================================================
|
||||
#Layout
|
||||
========================================================================== */
|
||||
/**
|
||||
* Layoutレイヤーはヘッダーやフッターのような、ページを構成するコンテナブロックのスタイルを定義します。
|
||||
* 目安としてはワイヤーフレームに書かれるような大きな単位のブロックです。
|
||||
* 汎用性のあるグリッドシステムは次のObject/Componentレイヤーで定義します。
|
||||
* グローバルナビゲーションやコピーライトのようなコンポーネントは、Object/Projectレイヤーで定義します。
|
||||
* 基本的にはclass属性を使用しますが、id属性を使用することもできます。
|
||||
* プレフィックス(接頭辞)として`l-`をつけます。
|
||||
*/
|
||||
@import "../../layout/_header";
|
||||
@import "../../layout/_footer";
|
||||
@import "../../layout/_main";
|
||||
@import "../../layout/_content";
|
||||
@import "../../layout/_side";
|
||||
@import "../../layout/_section";
|
||||
|
||||
/* =============================================================================
|
||||
#Object
|
||||
========================================================================== */
|
||||
/**
|
||||
* Objectレイヤーはプロジェクトにおけるビジュアルパターンです。抽象度や詳細度、
|
||||
* 拡張性などによって、4つのレイヤーにわけられます。
|
||||
* それぞれのレイヤーにはプレフィックス(接頭辞)をつけます。
|
||||
* 1. Component(`c-`)
|
||||
* 2. Project(`p-`)
|
||||
* 3. Scope(`s-`)
|
||||
* 4. Utility(`u-`)
|
||||
*
|
||||
* ランディングページのようにページ特有のスタイルを多く含む場合は、
|
||||
* ページ専用のCSSファイルを作成することもできます。
|
||||
* ページ専用のスタイルは、そのページにだけ読み込ませることでスコープをつくり、
|
||||
* プレフィックス(接頭辞)をつけないことで名前の重複を防ぎます。
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Component
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Componentレイヤーは多くのプロジェクトで横断的に再利用のできるような、小さな単位のモジュール(機能)です。
|
||||
* OOCSSの構造(structure)の機能を担うため、装飾的なスタイルをできるだけ含めないようにします。
|
||||
* また、`width`や`margin`といったレイアウトに影響を与えるプロパティもできるだけ含めないようにします。
|
||||
* 例えばgridやmediaといったレイアウトパターンが該当します。
|
||||
* プレフィックス(接頭辞)として`c-`をつけます。
|
||||
*/
|
||||
@import "../../object/component/_wrapper";
|
||||
@import "../../object/component/_layout";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Project
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Projectレイヤーはプロジェクト固有のパターンで、複数のページで使い回せるようなコンポーネントです。
|
||||
* 具体的なスタイルを持つUI(ユーザーフェイス)で、追加されるコンポーネントのほとんどはこのレイヤーに置かれます。
|
||||
* もし、このレイヤーで同じパターンが3箇所で使われていたら、別のコンポーネントとしてまとめられないか検討しましょう。
|
||||
* プレフィックス(接頭辞)として`p-`をつけます。
|
||||
*/
|
||||
@import "../../object/project/_icon";
|
||||
@import "../../object/project/_icon-extend";
|
||||
@import "../../object/project/_button";
|
||||
@import "../../object/project/_breadcrumb";
|
||||
@import "../../object/project/_label";
|
||||
@import "../../object/project/_box";
|
||||
@import "../../object/project/_card";
|
||||
@import "../../object/project/_form";
|
||||
@import "../../object/project/_login";
|
||||
@import "../../object/project/_user";
|
||||
@import "../../object/project/_notification";
|
||||
@import "../../object/project/_meeting";
|
||||
@import "../../object/project/_article.scss";
|
||||
@import "../../object/project/_modal.scss";
|
||||
@import "../../object/project/_search.scss";
|
||||
@import "../../object/project/_profile.scss";
|
||||
@import "../../object/project/_edit.scss";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Scope
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* ComponentレイヤーやProjectレイヤーのようなコンポーネント単位ではなく、
|
||||
* ページ単位や任意の範囲(スコープ)でのスタイルを定義します。1箇所でしか使わないような特異なスタイルや、
|
||||
* ページ単位でComponentやProjectレイヤーのスタイルを微調整したい場合に使用してもかまいません。
|
||||
* 例えばブログページのスタイルとして_blog.scssを作成します。
|
||||
* このレイヤーでは`.s-blog p`のような要素セレクタとの結合子も使うこともできます。
|
||||
* もし、このレイヤーで同じパターンが3箇所で使われていたら、
|
||||
* ProjectレイヤーやUtilityレイヤーでまとめられないか検討しましょう。
|
||||
* プレフィックス(接頭辞)として`s-`をつけます。
|
||||
*/
|
||||
@import "../../object/scope/_blog";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Utility
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Utilityレイヤーはいわゆる汎用クラスで、ほとんどの場合は単一のスタイルをもっています。
|
||||
* コンポーネント間の間隔を調整したり、BEMのModifierが増えすぎるのを防ぎます。
|
||||
* `.mb10`のような具体的な名前より`.mb-small`のような相対的な名前にしたり、
|
||||
* pxよりもemや%で指定することを推奨します。
|
||||
* 確実にスタイルを適応させるために`!important`を使用します。
|
||||
* プレフィックス(接頭辞)として`u-`をつけます。
|
||||
*/
|
||||
@import "../../object/utility/_text";
|
||||
@import "../../object/utility/_align";
|
||||
@import "../../object/utility/_margin";
|
||||
@import "../../object/utility/_display";
|
||||
@import "../../object/utility/_percent";
|
||||
@import "../../object/utility/_sr-only";
|
バイナリファイルは表示されません。
バイナリファイルは表示されません。
|
@ -0,0 +1,159 @@
|
|||
/* #Base
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Baseレイヤーにはプロジェクトにおける、基本的なベーススタイルを定義します。
|
||||
* 要素セレクタや属性セレクタなど、詳細度はできるかぎり低く保っておきます。
|
||||
* 基本的にclass属性は使用しません。
|
||||
*/
|
||||
/**
|
||||
* `padding`と`border`を`width`に含めます。
|
||||
* https://css-tricks.com/inheriting-box-sizing-probably-slightly-better-best-practice/
|
||||
*/
|
||||
html {
|
||||
overflow-x: hidden;
|
||||
font-size: 62.5%;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
body {
|
||||
min-width: 320px;
|
||||
background: #fff;
|
||||
font-family: "Open Sans", "Myriad", Helvetica, Arial, sans-serif;
|
||||
@include pc{
|
||||
background: #F7FAFC;
|
||||
}
|
||||
}
|
||||
|
||||
body, button, code, input, optgroup, pre, select, textarea {
|
||||
color: #080808;
|
||||
font-family: -apple-system, BlinkMacSystemFont, Helvetica Neue, Segoe UI, Hiragino Kaku Gothic ProN, Hiragino Sans, ヒラギノ角ゴ ProN W3, Arial, メイリオ, Meiryo, sans-serif;
|
||||
font-size: 1.6rem;
|
||||
word-wrap: break-word;
|
||||
-moz-osx-font-smoothing: grayscale;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
-moz-font-smoothing: antialiased;
|
||||
font-smoothing: antialiased;
|
||||
-webkit-font-feature-settings: "kern";
|
||||
font-feature-settings: "kern";
|
||||
-webkit-font-kerning: normal;
|
||||
font-kerning: normal;
|
||||
line-height: 1.6;
|
||||
}
|
||||
|
||||
input[type=number], input[type=url], input[type=tel], input[type=text], input[type=email], input[type=password], select, textarea {
|
||||
font-family: inherit;
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
img[src$=".svg"]:not([width]), img[src*=".svg?"]:not([width]) {
|
||||
|
||||
}
|
||||
|
||||
img, legend {
|
||||
max-width: 100%
|
||||
}
|
||||
|
||||
progress, sub, sup {
|
||||
vertical-align: baseline
|
||||
}
|
||||
|
||||
body, svg:not(:root) {
|
||||
overflow: hidden
|
||||
}
|
||||
|
||||
a, legend {
|
||||
color: inherit
|
||||
}
|
||||
|
||||
a[href^="tel:"] {
|
||||
cursor: text;
|
||||
pointer-events: none;
|
||||
text-decoration: none
|
||||
}
|
||||
|
||||
[type=submit], a, button{
|
||||
cursor: pointer;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
ol, ul{
|
||||
list-style: none;
|
||||
}
|
||||
|
||||
button{
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
button:focus {
|
||||
outline: 0
|
||||
}
|
||||
|
||||
input[type="checkbox"], input[type="radio"]{
|
||||
margin-right: 0.5em;
|
||||
margin-top: -2px;
|
||||
}
|
||||
input[type=number], input[type=url], input[type=tel], input[type=text], input[type=email], input[type=password], input[type=search], select, textarea {
|
||||
border: 1px solid #D0D0D0;
|
||||
background-color: #fff;
|
||||
outline: 0!important;
|
||||
width: 100%;
|
||||
border-radius: 10px;
|
||||
padding: 12px 18px;
|
||||
font-weight: 400;
|
||||
color: #414141;
|
||||
box-sizing: border-box;
|
||||
-webkit-appearance: none;
|
||||
@include pc{
|
||||
padding: 15px 20px;
|
||||
border-radius: 14px;
|
||||
}
|
||||
}
|
||||
input[type=search]{
|
||||
@include pc{
|
||||
padding-right: 52px;
|
||||
}
|
||||
@include sp{
|
||||
padding-right: 40px;
|
||||
}
|
||||
}
|
||||
|
||||
html:not(.sp) input[type=number]:focus, html:not(.sp) input[type=url]:focus, html:not(.sp) input[type=tel]:focus, html:not(.sp) input[type=text]:focus,
|
||||
html:not(.sp) input[type=email]:focus, html:not(.sp) input[type=password]:focus, html:not(.sp) select:focus, html:not(.sp) textarea:focus{
|
||||
border-color: #00c4ac;
|
||||
background-color: #fff;
|
||||
-webkit-transition: all 0.2s ease-out;
|
||||
transition: all 0.2s ease-out;
|
||||
}
|
||||
|
||||
html.sp input[type=number], html.sp input[type=url], html.sp input[type=tel], html.sp input[type=text], html.sp input[type=email], html.sp input[type=password], html.sp select, html.sp textarea {
|
||||
font-size: 16px!important;
|
||||
font-size: 1.6rem!important
|
||||
}
|
||||
|
||||
input[type=file]{
|
||||
display: none;
|
||||
}
|
||||
|
||||
select {
|
||||
-moz-appearance: none;
|
||||
background-color: #fff
|
||||
}
|
||||
|
||||
input[type=number]::-webkit-input-placeholder, input[type=url]::-webkit-input-placeholder, input[type=tel]::-webkit-input-placeholder, input[type=text]::-webkit-input-placeholder, input[type=email]::-webkit-input-placeholder, input[type=password]::-webkit-input-placeholder, textarea::-webkit-input-placeholder {
|
||||
color: #999;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
input[type=number]:-ms-input-placeholder, input[type=url]:-ms-input-placeholder, input[type=tel]:-ms-input-placeholder, input[type=text]:-ms-input-placeholder, input[type=email]:-ms-input-placeholder, input[type=password]:-ms-input-placeholder, textarea:-ms-input-placeholder {
|
||||
color: #999;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
input[type=number]::-moz-placeholder, input[type=url]::-moz-placeholder, input[type=tel]::-moz-placeholder, input[type=text]::-moz-placeholder, input[type=email]::-moz-placeholder, input[type=password]::-moz-placeholder, textarea::-moz-placeholder {
|
||||
color: #999;
|
||||
font-size: 1.6rem;
|
||||
}
|
||||
|
||||
h1,h2,h3,h4,h5{
|
||||
font-weight: bold;
|
||||
}
|
|
@ -0,0 +1,427 @@
|
|||
/* #Normalize.css
|
||||
-------------------------------------------------------------------------- */
|
||||
|
||||
/*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */
|
||||
|
||||
/**
|
||||
* 1. Set default font family to sans-serif.
|
||||
* 2. Prevent iOS and IE text size adjust after device orientation change,
|
||||
* without disabling user zoom.
|
||||
*/
|
||||
|
||||
html {
|
||||
font-family: sans-serif; /* 1 */
|
||||
-ms-text-size-adjust: 100%; /* 2 */
|
||||
-webkit-text-size-adjust: 100%; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default margin.
|
||||
*/
|
||||
|
||||
body {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
/* HTML5 display definitions
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Correct `block` display not defined for any HTML5 element in IE 8/9.
|
||||
* Correct `block` display not defined for `details` or `summary` in IE 10/11
|
||||
* and Firefox.
|
||||
* Correct `block` display not defined for `main` in IE 11.
|
||||
*/
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
main,
|
||||
menu,
|
||||
nav,
|
||||
section,
|
||||
summary {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `inline-block` display not defined in IE 8/9.
|
||||
* 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera.
|
||||
*/
|
||||
|
||||
audio,
|
||||
canvas,
|
||||
progress,
|
||||
video {
|
||||
display: inline-block; /* 1 */
|
||||
vertical-align: baseline; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent modern browsers from displaying `audio` without controls.
|
||||
* Remove excess height in iOS 5 devices.
|
||||
*/
|
||||
|
||||
audio:not([controls]) {
|
||||
display: none;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `[hidden]` styling not present in IE 8/9/10.
|
||||
* Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22.
|
||||
*/
|
||||
|
||||
[hidden],
|
||||
template {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Links
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove the gray background color from active links in IE 10.
|
||||
*/
|
||||
|
||||
a {
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Improve readability of focused elements when they are also in an
|
||||
* active/hover state.
|
||||
*/
|
||||
|
||||
a:active,
|
||||
a:hover {
|
||||
outline: 0;
|
||||
}
|
||||
|
||||
/* Text-level semantics
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9/10/11, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
abbr[title] {
|
||||
border-bottom: 1px dotted;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address style set to `bolder` in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
b,
|
||||
strong {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in Safari and Chrome.
|
||||
*/
|
||||
|
||||
dfn {
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address variable `h1` font-size and margin within `section` and `article`
|
||||
* contexts in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
h1 {
|
||||
font-size: 2em;
|
||||
margin: 0.67em 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address styling not present in IE 8/9.
|
||||
*/
|
||||
|
||||
mark {
|
||||
background: #ff0;
|
||||
color: #000;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent and variable font size in all browsers.
|
||||
*/
|
||||
|
||||
small {
|
||||
font-size: 80%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Prevent `sub` and `sup` affecting `line-height` in all browsers.
|
||||
*/
|
||||
|
||||
sub,
|
||||
sup {
|
||||
font-size: 75%;
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
/* Embedded content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove border when inside `a` element in IE 8/9/10.
|
||||
*/
|
||||
|
||||
img {
|
||||
border: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct overflow not hidden in IE 9/10/11.
|
||||
*/
|
||||
|
||||
svg:not(:root) {
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
/* Grouping content
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Address margin not present in IE 8/9 and Safari.
|
||||
*/
|
||||
|
||||
figure {
|
||||
margin: 1em 40px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address differences between Firefox and other browsers.
|
||||
*/
|
||||
|
||||
hr {
|
||||
box-sizing: content-box;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Contain overflow in all browsers.
|
||||
*/
|
||||
|
||||
pre {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address odd `em`-unit font size rendering in all browsers.
|
||||
*/
|
||||
|
||||
code,
|
||||
kbd,
|
||||
pre,
|
||||
samp {
|
||||
font-family: monospace, monospace;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
/* Forms
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Known limitation: by default, Chrome and Safari on OS X allow very limited
|
||||
* styling of `select`, unless a `border` property is set.
|
||||
*/
|
||||
|
||||
/**
|
||||
* 1. Correct color not being inherited.
|
||||
* Known issue: affects color of disabled elements.
|
||||
* 2. Correct font properties not being inherited.
|
||||
* 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
|
||||
*/
|
||||
|
||||
button,
|
||||
input,
|
||||
optgroup,
|
||||
select,
|
||||
textarea {
|
||||
color: inherit; /* 1 */
|
||||
font: inherit; /* 2 */
|
||||
margin: 0; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Address `overflow` set to `hidden` in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
button {
|
||||
overflow: visible;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address inconsistent `text-transform` inheritance for `button` and `select`.
|
||||
* All other form control elements do not inherit `text-transform` values.
|
||||
* Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
|
||||
* Correct `select` style inheritance in Firefox.
|
||||
*/
|
||||
|
||||
button,
|
||||
select {
|
||||
text-transform: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
|
||||
* and `video` controls.
|
||||
* 2. Correct inability to style clickable `input` types in iOS.
|
||||
* 3. Improve usability and consistency of cursor style between image-type
|
||||
* `input` and others.
|
||||
*/
|
||||
|
||||
button,
|
||||
html input[type="button"], /* 1 */
|
||||
input[type="reset"],
|
||||
input[type="submit"] {
|
||||
-webkit-appearance: button; /* 2 */
|
||||
cursor: pointer; /* 3 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Re-set default cursor for disabled elements.
|
||||
*/
|
||||
|
||||
button[disabled],
|
||||
html input[disabled] {
|
||||
cursor: default;
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and border in Firefox 4+.
|
||||
*/
|
||||
|
||||
button::-moz-focus-inner,
|
||||
input::-moz-focus-inner {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Address Firefox 4+ setting `line-height` on `input` using `!important` in
|
||||
* the UA stylesheet.
|
||||
*/
|
||||
|
||||
input {
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* It's recommended that you don't attempt to style these elements.
|
||||
* Firefox's implementation doesn't respect box-sizing, padding, or width.
|
||||
*
|
||||
* 1. Address box sizing set to `content-box` in IE 8/9/10.
|
||||
* 2. Remove excess padding in IE 8/9/10.
|
||||
*/
|
||||
|
||||
input[type="checkbox"],
|
||||
input[type="radio"] {
|
||||
box-sizing: border-box; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Fix the cursor style for Chrome's increment/decrement buttons. For certain
|
||||
* `font-size` values of the `input`, it causes the cursor style of the
|
||||
* decrement button to change from `default` to `text`.
|
||||
*/
|
||||
|
||||
input[type="number"]::-webkit-inner-spin-button,
|
||||
input[type="number"]::-webkit-outer-spin-button {
|
||||
height: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Address `appearance` set to `searchfield` in Safari and Chrome.
|
||||
* 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
|
||||
*/
|
||||
|
||||
input[type="search"] {
|
||||
-webkit-appearance: textfield; /* 1 */
|
||||
box-sizing: content-box; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove inner padding and search cancel button in Safari and Chrome on OS X.
|
||||
* Safari (but not Chrome) clips the cancel button when the search input has
|
||||
* padding (and `textfield` appearance).
|
||||
*/
|
||||
|
||||
input[type="search"]::-webkit-search-cancel-button,
|
||||
input[type="search"]::-webkit-search-decoration {
|
||||
-webkit-appearance: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Define consistent border, margin, and padding.
|
||||
*/
|
||||
|
||||
fieldset {
|
||||
border: 1px solid #c0c0c0;
|
||||
margin: 0 2px;
|
||||
padding: 0.35em 0.625em 0.75em;
|
||||
}
|
||||
|
||||
/**
|
||||
* 1. Correct `color` not being inherited in IE 8/9/10/11.
|
||||
* 2. Remove padding so people aren't caught out if they zero out fieldsets.
|
||||
*/
|
||||
|
||||
legend {
|
||||
border: 0; /* 1 */
|
||||
padding: 0; /* 2 */
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove default vertical scrollbar in IE 8/9/10/11.
|
||||
*/
|
||||
|
||||
textarea {
|
||||
overflow: auto;
|
||||
}
|
||||
|
||||
/**
|
||||
* Don't inherit the `font-weight` (applied by a rule above).
|
||||
* NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
|
||||
*/
|
||||
|
||||
optgroup {
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
/* Tables
|
||||
========================================================================== */
|
||||
|
||||
/**
|
||||
* Remove most spacing between table cells.
|
||||
*/
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
td,
|
||||
th {
|
||||
padding: 0;
|
||||
}
|
|
@ -0,0 +1,105 @@
|
|||
/* #Reset.css
|
||||
-------------------------------------------------------------------------- */
|
||||
|
||||
/*
|
||||
html5doctor.com Reset Stylesheet
|
||||
v1.6.1
|
||||
Last Updated: 2010-09-17
|
||||
Author: Richard Clark - http://richclarkdesign.com
|
||||
Twitter: @rich_clark
|
||||
*/
|
||||
|
||||
html, body, div, span, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
abbr, address, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, samp,
|
||||
small, strong, sub, sup, var,
|
||||
b, i,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin:0;
|
||||
padding:0;
|
||||
border:0;
|
||||
outline:0;
|
||||
font-size:100%;
|
||||
vertical-align:baseline;
|
||||
background:transparent;
|
||||
}
|
||||
|
||||
body {
|
||||
line-height:1;
|
||||
}
|
||||
|
||||
article,aside,details,figcaption,figure,
|
||||
footer,header,hgroup,menu,nav,section {
|
||||
display:block;
|
||||
}
|
||||
|
||||
nav ul {
|
||||
list-style:none;
|
||||
}
|
||||
|
||||
blockquote, q {
|
||||
quotes:none;
|
||||
}
|
||||
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content:'';
|
||||
content:none;
|
||||
}
|
||||
|
||||
a {
|
||||
margin:0;
|
||||
padding:0;
|
||||
font-size:100%;
|
||||
vertical-align:baseline;
|
||||
background:transparent;
|
||||
}
|
||||
|
||||
/* change colours to suit your needs */
|
||||
ins {
|
||||
background-color:#ff9;
|
||||
color:#000;
|
||||
text-decoration:none;
|
||||
}
|
||||
|
||||
/* change colours to suit your needs */
|
||||
mark {
|
||||
background-color:#ff9;
|
||||
color:#000;
|
||||
font-style:italic;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
del {
|
||||
text-decoration: line-through;
|
||||
}
|
||||
|
||||
abbr[title], dfn[title] {
|
||||
border-bottom:1px dotted;
|
||||
cursor:help;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse:collapse;
|
||||
border-spacing:0;
|
||||
}
|
||||
|
||||
/* change border colour to suit your needs */
|
||||
hr {
|
||||
display:block;
|
||||
height:1px;
|
||||
border:0;
|
||||
border-top:1px solid #cccccc;
|
||||
margin:1em 0;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
input, select {
|
||||
vertical-align:middle;
|
||||
}
|
|
@ -0,0 +1,9 @@
|
|||
// @desc - pxをemに変換します。
|
||||
// @param {Number} $self - 指定したいpx。
|
||||
// @param {Number} $parent - 基準となるpx。
|
||||
// @example - _em(15px, 30px) => 0.5em
|
||||
@use "sass:math";
|
||||
|
||||
@function _em($self, $parent) {
|
||||
@return math.div($self, $parent) * 1em;
|
||||
}
|
|
@ -0,0 +1,10 @@
|
|||
// @desc - pxをremに変換します。
|
||||
// @param {Number} - 指定したいピクセル値。
|
||||
// @param {String} $key [sm] - 指定するブレイクポイントを`$_font-size`のキーで指定。
|
||||
// @example - _rem(15px) => 1rem
|
||||
@use "sass:math";
|
||||
|
||||
@function _rem($px, $key: 'sm') {
|
||||
$value: map-get($_font-size, $key);
|
||||
@return math.div($px, $value) * 1rem;
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// @desc - 黒色を加えて明度を暗くします。
|
||||
// @param {String}
|
||||
// @example - _shade(blue, 50%) => navy
|
||||
@function _shade($color, $percent) {
|
||||
@return mix(#000, $color, $percent);
|
||||
}
|
|
@ -0,0 +1,6 @@
|
|||
// @desc - 白色を加えて明度を明るくします。
|
||||
// @param {String}
|
||||
// @example - _tint(blue, 50%) => #8080ff
|
||||
@function _tint($color, $percent) {
|
||||
@return mix(#fff, $color, $percent);
|
||||
}
|
バイナリファイルは表示されません。
|
@ -0,0 +1,38 @@
|
|||
@mixin _p-box() {
|
||||
display: block;
|
||||
@include _clearfix;
|
||||
}
|
||||
|
||||
@mixin _p-box__image($margin-bottom: null) {
|
||||
position: relative;
|
||||
display: block;
|
||||
margin-bottom: $margin-bottom;
|
||||
> img {
|
||||
width: 100%;
|
||||
max-width: none;
|
||||
}
|
||||
}
|
||||
|
||||
@mixin _p-box__labels() {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
right: 0;
|
||||
padding-left: 0;
|
||||
list-style-type: none;
|
||||
@include _clearfix;
|
||||
}
|
||||
|
||||
@mixin _p-box__label() {
|
||||
float: left;
|
||||
}
|
||||
|
||||
@mixin _p-box__content($padding: 0) {
|
||||
display: block;
|
||||
padding: $padding;
|
||||
> :first-child {
|
||||
margin-top: 0;
|
||||
}
|
||||
> :last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// @desc - クリアーフィックスのスタイルを挿入します。
|
||||
// @param {Bool, String} - 引数$importantに"important"を渡すと`!important`の指定ができます。
|
||||
// @example scss - Usage
|
||||
//
|
||||
// .foo { @include _clearfix; }
|
||||
// .bar { @include _clearfix(important); }
|
||||
//
|
||||
// @example css - CSS output
|
||||
// .foo:after {
|
||||
// content: "";
|
||||
// display: block;
|
||||
// clear: both;
|
||||
// }
|
||||
// .bar:after {
|
||||
// content: "" !important;
|
||||
// display: block !important;
|
||||
// clear: both !important;
|
||||
// }
|
||||
@mixin _clearfix($important: false) {
|
||||
@if ($important == "important") {
|
||||
$important: unquote("!important");
|
||||
} @else {
|
||||
$important: null;
|
||||
}
|
||||
&:after {
|
||||
content: "" $important;
|
||||
display: block $important;
|
||||
clear: both $important;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
@mixin _c-layout() {
|
||||
display: block;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 0;
|
||||
list-style-type: none;
|
||||
}
|
||||
|
||||
@mixin _c-layout__item() {
|
||||
display: inline-block;
|
||||
width: 100%;
|
||||
font-size: medium;
|
||||
font-size: 1rem;
|
||||
vertical-align: top;
|
||||
}
|
|
@ -0,0 +1,30 @@
|
|||
// @desc - マウスオーバーなどのイベントをまとめて指定します。
|
||||
// @author - Harry Roberts
|
||||
// @param {Bool} $self [false] - Whether or not to include current selector
|
||||
// @link https://twitter.com/csswizardry/status/478938530342006784 Original tweet from Harry Roberts
|
||||
// @example scss - Usage
|
||||
// .foo {
|
||||
// @include _on-event{
|
||||
// background-color: red;
|
||||
// }
|
||||
// }
|
||||
// @example css - CSS output
|
||||
// .foo:hover, .foo:active, .foo:focus {
|
||||
// background-color: red;
|
||||
// }
|
||||
@mixin _on-event($self: false) {
|
||||
@if $self {
|
||||
&,
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
&:hover,
|
||||
&:active,
|
||||
&:focus {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
// @desc - メディアクエリを`min-width`で挿入します。
|
||||
// @param {String} $breakpoint [$_default-breakpoint] - 引数に変数のキーワードを渡します。
|
||||
// @see - $_breakpoint-up
|
||||
// @example scss - Usage
|
||||
// .foo {
|
||||
// color: red;
|
||||
// @include _mq-up {
|
||||
// color: blue;
|
||||
// }
|
||||
// }
|
||||
// @example css - CSS output
|
||||
// .foo {
|
||||
// color: red;
|
||||
// }
|
||||
// @media screen and (min-width: 768px) {
|
||||
// .foo {
|
||||
// color: blue;
|
||||
// }
|
||||
// }
|
||||
@mixin pc($breakpoint: $_default-breakpoint) {
|
||||
@if map-has-key($_breakpoint-up, $breakpoint) {
|
||||
@media screen and (min-width: 1068px) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
|
||||
+ "Please make sure it is defined in `$_breakpoint-up` map.";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
// @desc - class名とルールセットを指定することで、レスポンシブに対応したスタイルを生成します。
|
||||
// @param {String} - 共通のclass名をクウォートとドットをつけて渡します(e.g. `.foo`)。
|
||||
// @param {Strind} - 使用するブレイクポイントを定義した変数を渡します。
|
||||
// @see - foundation/variable/_breakpoint.scss
|
||||
// @example scss - Usage
|
||||
// @include _responsive(".display-none") {
|
||||
// display: none;
|
||||
// }
|
||||
// @example css - CSS output
|
||||
// .display-none {
|
||||
// display: none;
|
||||
// }
|
||||
// @media screen and (min-width: 400px) {
|
||||
// .display-none-sm {
|
||||
// display: none;
|
||||
// }
|
||||
// }
|
||||
@mixin _responsive($class, $bp: $_breakpoint-up) {
|
||||
#{$class} {
|
||||
@content;
|
||||
}
|
||||
@each $suffix, $value in $bp {
|
||||
@media #{$value} {
|
||||
#{$class}-#{$suffix} {
|
||||
@content;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
// @desc - メディアクエリを`max-width`で挿入します。
|
||||
// @param {String} $breakpoint [$_default-breakpoint] - 引数に変数のキーワードを渡します。
|
||||
// @see - $_breakpoint-down
|
||||
// @example scss - Usage
|
||||
// .foo {
|
||||
// color: red;
|
||||
// @include sp {
|
||||
// color: blue;
|
||||
// }
|
||||
// }
|
||||
// @example css - CSS output
|
||||
// .foo {
|
||||
// color: red;
|
||||
// }
|
||||
// @media screen and (max-width: 767px) {
|
||||
// .foo {
|
||||
// color: blue;
|
||||
// }
|
||||
// }
|
||||
@mixin sp($breakpoint: $_default-breakpoint) {
|
||||
@if map-has-key($_breakpoint-down, $breakpoint) {
|
||||
@media screen and (max-width: 1067px) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
|
||||
+ "Please make sure it is defined in `$_breakpoint-down` map.";
|
||||
}
|
||||
}
|
||||
|
||||
@mixin sp02($breakpoint: $_default-breakpoint) {
|
||||
@if map-has-key($_breakpoint-down, $breakpoint) {
|
||||
@media screen and (max-width: 430px) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
|
||||
+ "Please make sure it is defined in `$_breakpoint-down` map.";
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@mixin min($breakpoint: $_default-breakpoint) {
|
||||
@if map-has-key($_breakpoint-down, $breakpoint) {
|
||||
@media screen and (max-width: 374px) {
|
||||
@content;
|
||||
}
|
||||
} @else {
|
||||
@warn "Unfortunately, no value could be retrieved from `#{$breakpoint}`. "
|
||||
+ "Please make sure it is defined in `$_breakpoint-down` map.";
|
||||
}
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
// @desc - 表示だけをせずに、スクリーンリーダーにだけ対応したい場合に使用します。
|
||||
// @param {String} - 引数に"important"を渡すと`!important`の指定ができます。
|
||||
@mixin _sr-only($important: false) {
|
||||
@if ($important == "important") {
|
||||
$important: unquote("!important");
|
||||
} @else {
|
||||
$important: null;
|
||||
}
|
||||
position: absolute $important;
|
||||
width: 1px $important;
|
||||
height: 1px $important;
|
||||
margin: -1px $important;
|
||||
border: 0 $important;
|
||||
overflow: hidden $important;
|
||||
padding: 0 $important;
|
||||
clip: rect(0, 0, 0, 0) $important;
|
||||
}
|
バイナリファイルは表示されません。
|
@ -0,0 +1,22 @@
|
|||
// アニメーションの管理
|
||||
|
||||
@include mixin.pc{
|
||||
.fade {
|
||||
transition: opacity 0.3s ease;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
&:hover{
|
||||
opacity: 0.7;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
.fade02 {
|
||||
transition: opacity 0.3s ease;
|
||||
-webkit-backface-visibility: hidden;
|
||||
backface-visibility: hidden;
|
||||
&:hover{
|
||||
opacity: 0.5;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,15 @@
|
|||
// min-width
|
||||
$_breakpoint-up: (
|
||||
'sm': 'screen and (min-width: 400px)',
|
||||
'md': 'screen and (min-width: 768px)',
|
||||
'lg': 'screen and (min-width: 1000px)',
|
||||
'xl': 'screen and (min-width: 1200px)',
|
||||
) !default;
|
||||
|
||||
// max-width
|
||||
$_breakpoint-down: (
|
||||
'sm': 'screen and (max-width: 399px)',
|
||||
'md': 'screen and (max-width: 767px)',
|
||||
'lg': 'screen and (max-width: 999px)',
|
||||
'xl': 'screen and (max-width: 1199px)',
|
||||
) !default;
|
|
@ -0,0 +1,15 @@
|
|||
// base color
|
||||
$_color-text: #000 !default;
|
||||
$_color-text--gray: #ccc !default;
|
||||
$_color-text--gray02: #6f7372 !default;
|
||||
$_color-text--gray03: #989898 !default;
|
||||
$_color-bg: #fff !default;
|
||||
$_color-bg02: #F7FAFC !default;
|
||||
|
||||
// link color
|
||||
$_color-link--visited: null !default;
|
||||
|
||||
// component color
|
||||
$_color-ui-gray: #F5F7F8 !default;
|
||||
$_color-ui-bg: #fff !default;
|
||||
$_color-ui-yellow: #F0DE00 !default;
|
|
@ -0,0 +1,48 @@
|
|||
// `transition-timing-function`と`animation-timing-function`プロパティに指定する、
|
||||
// cubic-bezier() 関数記法で定義した、3次ベジェ曲線のタイミング関数です。
|
||||
// 実際に動きは、以下のサイトで確認できます。
|
||||
// https://matthewlein.com/ceaser/
|
||||
//
|
||||
// デフォルトのタイミング関数には以下のような特徴があります。
|
||||
// easeは「ゆっくりと」、inは「始まる」、outは「終わる」に置き換えると想像しやすいです。
|
||||
// * linear - 一定の速度で変化する
|
||||
// * ease - 開始時から急速に加速して、中盤から緩やかになる
|
||||
// * ease-in - 緩やかに始まり、次第に加速し、突然停止する
|
||||
// * ease-in-out - 緩やかに始まり、加速が緩やかになっていく
|
||||
// * ease-out - 急速に始まり、次第に緩やかになっていく
|
||||
|
||||
$_linear: cubic-bezier( 0.250, 0.250, 0.750, 0.750 ) !default;
|
||||
$_ease: cubic-bezier( 0.250, 0.100, 0.250, 1.000 ) !default;
|
||||
|
||||
// ease
|
||||
$_ease-in: cubic-bezier( 0.420, 0.000, 1.000, 1.000 ) !default;
|
||||
$_ease-in-quad: cubic-bezier( 0.550, 0.085, 0.680, 0.530 ) !default;
|
||||
$_ease-in-cubic: cubic-bezier( 0.550, 0.055, 0.675, 0.190 ) !default;
|
||||
$_ease-in-quart: cubic-bezier( 0.895, 0.030, 0.685, 0.220 ) !default;
|
||||
$_ease-in-quint: cubic-bezier( 0.755, 0.050, 0.855, 0.060 ) !default;
|
||||
$_ease-in-sine: cubic-bezier( 0.470, 0.000, 0.745, 0.715 ) !default;
|
||||
$_ease-in-expo: cubic-bezier( 0.950, 0.050, 0.795, 0.035 ) !default;
|
||||
$_ease-in-circ: cubic-bezier( 0.600, 0.040, 0.980, 0.335 ) !default;
|
||||
$_ease-in-back: cubic-bezier( 0.600, -0.280, 0.735, 0.045 ) !default;
|
||||
|
||||
// ease-out
|
||||
$_ease-out: cubic-bezier( 0.000, 0.000, 0.580, 1.000 ) !default;
|
||||
$_ease-out-quad: cubic-bezier( 0.250, 0.460, 0.450, 0.940 ) !default;
|
||||
$_ease-out-cubic: cubic-bezier( 0.215, 0.610, 0.355, 1.000 ) !default;
|
||||
$_ease-out-quart: cubic-bezier( 0.165, 0.840, 0.440, 1.000 ) !default;
|
||||
$_ease-out-quint: cubic-bezier( 0.230, 1.000, 0.320, 1.000 ) !default;
|
||||
$_ease-out-sine: cubic-bezier( 0.390, 0.575, 0.565, 1.000 ) !default;
|
||||
$_ease-out-expo: cubic-bezier( 0.190, 1.000, 0.220, 1.000 ) !default;
|
||||
$_ease-out-circ: cubic-bezier( 0.075, 0.820, 0.165, 1.000 ) !default;
|
||||
$_ease-out-back: cubic-bezier( 0.175, 0.885, 0.320, 1.275 ) !default;
|
||||
|
||||
// ease-in-out
|
||||
$_ease-in-out: cubic-bezier( 0.420, 0.000, 0.580, 1.000 ) !default;
|
||||
$_ease-in-out-quad: cubic-bezier( 0.455, 0.030, 0.515, 0.955 ) !default;
|
||||
$_ease-in-out-cubic: cubic-bezier( 0.645, 0.045, 0.355, 1.000 ) !default;
|
||||
$_ease-in-out-quart: cubic-bezier( 0.770, 0.000, 0.175, 1.000 ) !default;
|
||||
$_ease-in-out-quint: cubic-bezier( 0.860, 0.000, 0.070, 1.000 ) !default;
|
||||
$_ease-in-out-sine: cubic-bezier( 0.445, 0.050, 0.550, 0.950 ) !default;
|
||||
$_ease-in-out-expo: cubic-bezier( 1.000, 0.000, 0.000, 1.000 ) !default;
|
||||
$_ease-in-out-circ: cubic-bezier( 0.785, 0.135, 0.150, 0.860 ) !default;
|
||||
$_ease-in-out-back: cubic-bezier( 0.680, -0.550, 0.265, 1.550 ) !default;
|
|
@ -0,0 +1,160 @@
|
|||
// font-familyを定義しています。WindowsとMacで指定する名前が微妙に変わるので、
|
||||
// 半角スペースなどを変更しないようにしてください。
|
||||
|
||||
// ## ゴシックとsans-serif
|
||||
// 欧文書体は"Helvetica Neue"か"Verdana"、
|
||||
// "Helvetica Neue"を指定する場合はWindowsのフォールバックに"Arial"か"Verdana"、
|
||||
// HelveticaはWindowsではArialとして表示される。
|
||||
// 和文書体は游ゴシックかヒラギノ角ゴ、游書体はWindowsのChromeで薄く表示される。
|
||||
// MS書体はアンチエイリアスが効かないために指定せず、メイリオを指定する。
|
||||
|
||||
// 和欧混植、Helvetica優先、游ゴシックなし
|
||||
$_font-family-sans-serif-1: "Helvetica Neue", Helvetica, "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif !default;
|
||||
// 和欧混植、Helvetica優先、游ゴシック優先
|
||||
$_font-family-sans-serif-2: "Helvetica Neue", Helvetica, "游ゴシック", YuGothic, "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif !default;
|
||||
// 和欧混植、Verdana優先、游ゴシックなし
|
||||
$_font-family-sans-serif-3: Verdana, "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif !default;
|
||||
// 和欧混植、游ゴシック優先
|
||||
$_font-family-sans-serif-4: YakuHanJP, "Yu Gothic", "游ゴシック", YuGothic, "游ゴシック体", "Hiragino Kaku Gothic Pro", "ヒラギノ角ゴシック Pro", Meiryo, "メイリオ", Osaka, "MS Pゴシック", "MS PGothic", sans-serif !default;
|
||||
// 和文のみ、游ゴシックなし
|
||||
$_font-family-sans-serif-5: "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif !default;
|
||||
// 和文のみ、游ゴシック優先
|
||||
$_font-family-sans-serif-6: "游ゴシック", YuGothic, "Hiragino Sans", "Hiragino Kaku Gothic ProN", Meiryo, sans-serif !default;
|
||||
|
||||
|
||||
// ## 明朝とserif
|
||||
// 欧文書体は"Times New Roman"か"Georgia"。
|
||||
// 和文書体は游明朝かヒラギノ明朝、游書体はWindowsのChromeで薄く表示される。
|
||||
// 古いWindows用に"HG明朝E"(Officeをインストールしていれば使える)、フォールバックとしてメイリオ。
|
||||
// "MS P明朝"はアンチエイリアスが効かないので指定しない。
|
||||
// Androidは明朝体に非対応。
|
||||
|
||||
// 和欧混植、Times New Roman優先、游明朝なし
|
||||
$_font-family-serif-1: "Times New Roman", "Hiragino Mincho ProN", "HG明朝E", Meiryo, serif !default;
|
||||
// 和欧混植、Times New Roman優先、游明朝優先
|
||||
$_font-family-serif-2: "Times New Roman", "游明朝", "YuMincho", "Hiragino Mincho ProN", "HG明朝E", Meiryo, serif !default;
|
||||
// 和欧混植、Georgia優先、游明朝なし
|
||||
$_font-family-serif-3: Georgia, "Hiragino Mincho ProN", "HG明朝E", Meiryo, serif !default;
|
||||
// 和欧混植、Georgia優先、游明朝優先
|
||||
$_font-family-serif-4: Georgia, "游明朝", "YuMincho", "Hiragino Mincho ProN", "HG明朝E", Meiryo, serif !default;
|
||||
// 和欧混植、游明朝優先
|
||||
$_font-family-serif-5: YuMinch, "Yu Mincho", "游明朝", "Hiragino Mincho ProN W3", "ヒラギノ明朝 ProN W3", "Hiragino Mincho ProN", "HG明朝E", "MS P明朝", "MS 明朝", serif !default;
|
||||
// 和文のみ、游明朝なし
|
||||
$_font-family-serif-6: "Hiragino Mincho ProN", "HG明朝E", Meiryo, serif !default;
|
||||
|
||||
|
||||
// ## 源柔ゴシック
|
||||
$_font-family-genju-p: GenJyuuGothic-P, sans-serif;
|
||||
.font-genju-p-r {
|
||||
font-family: GenJyuuGothic-P, sans-serif;
|
||||
font-weight: 400;
|
||||
-webkit-font-feature-settings: "palt";
|
||||
font-feature-settings: "palt"
|
||||
}
|
||||
.font-genju-p-b {
|
||||
font-family: GenJyuuGothic-P, sans-serif;
|
||||
font-weight: 700;
|
||||
-webkit-font-feature-settings: "palt";
|
||||
font-feature-settings: "palt"
|
||||
}
|
||||
@font-face {
|
||||
font-family: GenJyuuGothic-P;
|
||||
font-weight: 400;
|
||||
src: url(../../assets/fonts/GenJyuuGothic-P/GenJyuuGothic-P-Regular.woff2) format("woff2"), url(../../assets/fonts/GenJyuuGothic-P/GenJyuuGothic-P-Regular.woff) format("woff"), url(../../assets/fonts/GenJyuuGothic-P/GenJyuuGothic-P-Regular.ttf) format("TrueType")
|
||||
}
|
||||
@font-face {
|
||||
font-family: GenJyuuGothic-P;
|
||||
font-weight: 700;
|
||||
src: url(../../assets/fonts/GenJyuuGothic-P/GenJyuuGothic-P-Bold.woff2) format("woff2"), url(../../assets/fonts/GenJyuuGothic-P/GenJyuuGothic-P-Bold.woff) format("woff"), url(../../assets/fonts/GenJyuuGothic-P/GenJyuuGothic-P-Bold.ttf) format("TrueType")
|
||||
}
|
||||
|
||||
|
||||
// ## AdobeBlank
|
||||
@font-face {
|
||||
font-family: AdobeBlank;
|
||||
src: url(data:application/font-woff;base64,d09GRk9UVE8AAATUAAkAAAAACkAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA4AAAAOcAAAEhIl9jq09TLzIAAAHIAAAARQAAAGBRQK3+Y21hcAAAAhAAAAAmAAAALAAMAFNoZWFkAAACOAAAADAAAAA2BZfPvmhoZWEAAAJoAAAAGgAAACQHWf+LaG10eAAAAoQAAAAIAAAACAPoAYhtYXhwAAACjAAAAAYAAAAGAAJQAG5hbWUAAAKUAAACKwAAB2b3USAEcG9zdAAABMAAAAATAAAAIP+4ADJ42mNkYGFmYGRkFHRMyU9KdcpJzMvWLS5ITE4FCZr8kP4h080j183D+EOW8Ycc0w955h8SLN2/eX7V/GJh7eVRkmF4xS/DyCcow/CeR1WG4TuPCgMbEwMjAxsDH0M4QzpDOUM72GDPlNS8ksySSuf8gsqizPSMEgUFIwNDYx0QaaoAVqIQXFlckppbrOCZl5xfVJBflFiSmqKgkVFSUmClr19eXq6XCFKml5yfq6+ph+5cQnwGBpCzGJhBBJjNyMj1Q4FHbYoMI6tQD4/grxqRHx2iDEwsQFlGsAoGBla+Px18AK/lT1cAeNpjYGZ+wTiBgZWBgamLKYKBgcEbQjPGMRgx3GFABYzIHEcXJ38GBwYFBgXmgv8dDAzMBQwVCfqM/5GUKDAwAAArbQs0AAAAeNpjYGBgZGAGYgYGHgYWBgUgzQKEIL7C//8Q8v9DMJ8BAEreBlwAAHjaY2BkYGAA4vc75S7F89t8ZWBmfgEUYbjo4/oZQf/vYH7BXADkMjMwgUQBcKYMvHjaY2BkYGAu+N/BAAXMLxgYGVABEwBNCALqAAAD6AGIAAAAAAAAUAAAAgAAeNrtkz9r20AYxp+zpZhSCEnpBzgolKQk5/8m2FOSJckUYgi0U2VZtlzbkpAVG2+dSukYQj5Bh36A0KFzpw6dOvXLpI/k1ynNYkq3UB8n/+798zx3JwTgufoOhcXvmHPBChtcLTiHAl4K5xl/LWyRI2EbTbwVXmP8i3CB/I2s8DjT/ylMffVMmPqqKkx91RSmvjoRpr56JUx9dSVMffVR+An5JuXbWzwlf6Wash7R91L9EFbQuZ5wDuu5d8J5xq+ELfKNsI0kt+xdg84fCRfIvvAG+b3wJtbznzLeTH3zn4Xpax0J09fyhelrTYXpa10L09da9tLXfiFMX/tEmL72G2H62h8Ow2geD/p+onWlVK7upM+63u+GHU+355PEG0/0ceCGcRTGTuJ19ZafJFGzWJzNZsZJy4wbjovbJms5GDnBcHcSOa535vUvRk58P3x/fe7Fk0EY6LIp1eqt07aAHyZuGEzTldmrtMbO0AuTnhkNOhVTN41qrdRYpfxwT7ZqjUOE/MrmiDFAHz4SaI4KSiijip07rpP20WV1Bx65zZ4Jqz2M+a/57QVwmY2plj6dLNdlZitTTRhvosgxy4ZhxVLNZJ1j5rbJv10OMGJVgCF26RGRXUbPOPu4yHLxyupV+XPOmOsBqwLutswdlFDjeVs45Sn/jPisSrLdBpje5Qz2eEstnsChupfV9BgdUbXDjGGvQYP3WWN145/3/Hc39P8NP/A3/AvEJ2JBAHjaY2BmAIP/WxmMGLAAACzCAeoA) format("woff")
|
||||
}
|
||||
|
||||
|
||||
// ## Yaku Han JP
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 100;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-Thin.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Thin.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Thin.eot)
|
||||
}
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 200;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-Light.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Light.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Light.eot)
|
||||
}
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 300;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-DemiLight.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-DemiLight.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-DemiLight.eot)
|
||||
}
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 400;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-Regular.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Regular.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Regular.eot)
|
||||
}
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 500;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-Medium.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Medium.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Medium.eot)
|
||||
}
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 700;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-Bold.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Bold.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Bold.eot)
|
||||
}
|
||||
@font-face {
|
||||
font-family: YakuHanJP;
|
||||
font-weight: 900;
|
||||
src: url(../../assets/fonts/YakuHanJP/YakuHanJP-Black.woff2) format("woff2"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Black.woff) format("woff"), url(../../assets/fonts/YakuHanJP/YakuHanJP-Black.eot)
|
||||
}
|
||||
|
||||
|
||||
// ## Macで追加できるフォント
|
||||
// ヒラギノ丸ゴ→ "ヒラギノ丸ゴ ProN", "Hiragino Maru Gothic ProN"
|
||||
// EL Captainで追加されたフォント。
|
||||
// 筑紫丸Aゴシック→ "TsukuARdGothic-Regular"(ふところを絞ったデザインの丸ゴシック体で和風、落ち着いた印象)
|
||||
// 筑紫丸Bゴシック→ "TsukuBRdGothic-Regular"(筑紫丸Aゴシックよりも特徴がある)
|
||||
// クレー→ "Klee"(鉛筆やペンのような手書き風で本文組みに適した書体)
|
||||
// ヒラギノ角ゴシック→ "Hiragino Sans"(ヒラギノ角ゴに10種類のウェイトを追加)
|
||||
// 游明朝体+36ポかな→ "YuMin_36pKn-Medium"(毛筆表現のある游明朝体で漢字と英数字は含んでいない)
|
||||
// San Francisco→ -apple-system
|
||||
|
||||
// 主要なフォント。
|
||||
// 游ゴシック Windows8.1以降、MacOS10.9以降
|
||||
// 游明朝 Windows8.1以降、MacOS10.9以降
|
||||
// メイリオ Windows Vista以降
|
||||
// ヒラギノ角ゴ ProN Mac OS 10.5以降、iOS
|
||||
// ヒラギノ明朝 ProN Mac OS 10.5以降、iOS6以降
|
||||
// Droid Sans Android
|
||||
// Roboto Android4以降
|
||||
|
||||
// WindowsとMacでの共通フォント。
|
||||
// Arial
|
||||
// Arial Black
|
||||
// Comic Sans MS
|
||||
// Courier
|
||||
// Courier New
|
||||
// Georgia
|
||||
// Impact
|
||||
// Times New Roman
|
||||
// Trebuchet MS
|
||||
// Verdana
|
||||
|
||||
// ブラウザのデフォルトフォント
|
||||
// Safari 7 / Mac 10.9 Helvetica / ヒラギノ角ゴシック ProN
|
||||
// Firefox 25 / Mac 10.9 ヒラギノ角ゴシック ProN
|
||||
// Chrome 30 / Mac 10.9 ヒラギノ角ゴシック ProN
|
||||
// IE 11 / Win 8.1 メイリオ
|
||||
// IE 8 / Win 7 Arial / MS Pゴシック
|
||||
// Firefox 25 / Win 8.1 MS Pゴシック
|
||||
// Chrome 30 / Win 8.1 MS Pゴシック
|
||||
|
||||
// Androidについて
|
||||
// * 明朝体には対応していない
|
||||
// * 4.0以降ではRobotoとモトヤフォントがデフォルト、それ以前はDroid Sans(Droid Sans Japaneseも含む)
|
||||
// * HelveticaかArialを指定するとブラウザ側でDroid Sansがエイリアスとして表示される
|
|
@ -0,0 +1,38 @@
|
|||
// default breakpoint
|
||||
$_default-breakpoint: 'md';
|
||||
|
||||
// default wrapper width
|
||||
$_max-width: 960px !default;
|
||||
|
||||
// default grid columns
|
||||
$_column: 12 !default;
|
||||
|
||||
// base font-size
|
||||
$_font-size: (
|
||||
'sm': 15px,
|
||||
'md': 16px,
|
||||
) !default;
|
||||
|
||||
$_font-size--large: 16px !default;
|
||||
$_font-size--small: 0.8em !default;
|
||||
|
||||
// base font-weight
|
||||
$_font-weight-light: 300;
|
||||
$_font-weight-normal: 400;
|
||||
$_font-weight-regular: 400;
|
||||
$_font-weight-medium: 500;
|
||||
$_font-weight-semibold: 600;
|
||||
$_font-weight-bold: 700;
|
||||
$_font-weight-extrabold: 800;
|
||||
$_font-weight-heavy: 900;
|
||||
|
||||
// base Rounded corners
|
||||
$_radius: 3px !default;
|
||||
|
||||
// base animation speed
|
||||
$_duration: 0.3s !default;
|
||||
|
||||
// base spacing
|
||||
$_white-space: 1.7rem !default;
|
||||
$_white-space--small: ($_white-space * 0.5) !default;
|
||||
$_white-space--large: ($_white-space * 2) !default;
|
|
@ -0,0 +1,10 @@
|
|||
// z-indexが定義されていない要素は`z-index:0;`として描画されます。
|
||||
// 同じz-indexを持つ要素はスタック文脈が同じであればHTMLの記述順に依存します。
|
||||
// なるべく数値はユニーク(一意)にして、シンプルに管理できるようにします。
|
||||
// @see - 'e-z-index()' (foundation/function/_z-index.scss)
|
||||
$_z-index: (
|
||||
'below': -1,
|
||||
'default': 1,
|
||||
'fixNav': 2,
|
||||
'modal': 3,
|
||||
) !default;
|
|
@ -0,0 +1,224 @@
|
|||
## TOC(目次)
|
||||
|
||||
```scss
|
||||
/**
|
||||
* VARIABLE
|
||||
* global...サイト全体に使用するサイズや数値に関する変数です。
|
||||
* breakpoint...メディアクエリで使用するブレイクポイントです。
|
||||
* font-family...font-family指定をまとめています。
|
||||
* color...グローバルに使用する色指定です。
|
||||
* z-index...z-indexの並び順を管理します。
|
||||
* easing...cubic-bezier関数を使用したタイミング関数を定義しています。
|
||||
*
|
||||
* FUNCTION
|
||||
* strip-unit...pxやremなどの単位を取り除きます。
|
||||
* em...pxをemに変換します。
|
||||
* rem...pxをremに変換します。
|
||||
* tint...白色を加えて明度を明るくします。
|
||||
* shade...黒色を加えて明度を暗くします。
|
||||
* z-index...z-indexの並び順を管理します。
|
||||
* tracking...Photoshopのカーニングをemに変換します。
|
||||
*
|
||||
* MIXIN
|
||||
* mq-up...メディアクエリを`min-width`で挿入します。
|
||||
* mq-down...メディアクエリを`max-width`で挿入します。
|
||||
* responsive...レスポンシブ対応クラスを生成します。
|
||||
* clearfix...floatの解除をします。
|
||||
* on-event...:hover, :active, :focusをまとめて指定します。
|
||||
* sr-only...非表示にしてスクリーンリーダーにだけ読み上げさせます。
|
||||
*
|
||||
* BASE
|
||||
* normalize...Normalize.cssをインポートしています。
|
||||
* base...タイプセレクタと属性セレクタのデフォルトスタイルです。
|
||||
*
|
||||
* LAYOUT
|
||||
* header...ヘッダーエリアのコンテナブロックのスタイルです。
|
||||
* footer...フッターエリアのコンテナブロックのスタイルです。
|
||||
* main...コンテンツエリアのコンテナブロックのスタイルです。
|
||||
* side...サイドバーエリアのコンテナブロックのスタイルです。
|
||||
* section...`<section>`要素を使うようなセクションの余白を管理します。
|
||||
*
|
||||
* COMPONENT
|
||||
* wrapper...最大幅を指定します。
|
||||
* layout...汎用的なレイアウトオブジェクトです。グリッドレイアウトなどに使用できます。
|
||||
* media...画像とテキストが横並びになるオブジェクトです。
|
||||
* list-unstyled...`<ul>`と`<ol>`でデフォルトスタイルをリセットします。
|
||||
* embed...Youtubeなどをアスペクト比を固定してレスポンシブ対応させる場合に使用します。
|
||||
* table...tableのレイアウトアルゴリズムの変更、余白の変更をします。
|
||||
*
|
||||
* PROJECT
|
||||
* icon...アイコンフォントです。テンプレートから自動で生成されます。
|
||||
* icon-extend...アイコンフォントを拡張するModifierです。
|
||||
* button...ボタンコンポーネントです。
|
||||
* breadcrumb...パンくずリストコンポーネントです。
|
||||
* label...インラインのラベルコンポーネントです。
|
||||
* badge...投稿数のような数値を表示するバッジコンポーネントです。
|
||||
* card...カードタイプのコンポーネントです。
|
||||
* split...定義リストをブロックからインラインにするコンポーネントです。
|
||||
* notification...お知らせエリアのコンポーネントです。
|
||||
*
|
||||
* SCOPE
|
||||
* blog...ブログページのスタイルです。
|
||||
*
|
||||
* UTILITY
|
||||
* text...テキストのスタイルに関する汎用クラスです。
|
||||
* image...画像のレイアウトに関する汎用クラスです。
|
||||
* margin...マージンで余白の管理をします。常に下方向にだけ余白をとります。
|
||||
* display...要素の表示や改行をコントロールする場合に使用します。
|
||||
* width...おもにグリッドで使用する`width`を指定する汎用クラスです。
|
||||
* offset...おもにグリッドで使用する`margin-right`を指定する汎用クラスです。
|
||||
* percent...`width`プロパティを5%刻みで指定する汎用クラスです。
|
||||
*/
|
||||
```
|
||||
|
||||
## CSS構成
|
||||
|
||||
```scss
|
||||
/**
|
||||
* このスタイルシートは[FLOCSS](https://github.com/hiloki/flocss)をベースにしています。
|
||||
* 定義されているレイヤー以外にもThemeやTestなどのレイヤーを追加することもできます。
|
||||
* 詳しくは[CSSコーディングルール](https://github.com/manabuyasuda/styleguide/blob/master/css-coding-rule.md#flocss)を参照してください。
|
||||
*/
|
||||
|
||||
/* =============================================================================
|
||||
#Foundation
|
||||
========================================================================== */
|
||||
//
|
||||
// Sassの変数と関数を定義します。
|
||||
// 変数は用途ごとにモジュール化、関数は機能ごとにモジュール化をします。
|
||||
// プレフィックス(接頭辞)として`_`をつけます。
|
||||
//
|
||||
@import "foundation/variable/_global";
|
||||
@import "foundation/variable/_breakpoint";
|
||||
@import "foundation/variable/_font-family";
|
||||
@import "foundation/variable/_color";
|
||||
@import "foundation/variable/_z-index";
|
||||
@import "foundation/variable/_easing";
|
||||
|
||||
@import "foundation/function/_strip-unit";
|
||||
@import "foundation/function/_em";
|
||||
@import "foundation/function/_rem";
|
||||
@import "foundation/function/_tint";
|
||||
@import "foundation/function/_shade";
|
||||
@import "foundation/function/_z-index";
|
||||
@import "foundation/function/_tracking";
|
||||
|
||||
@import "foundation/mixin/_mq-up";
|
||||
@import "foundation/mixin/_mq-down";
|
||||
@import "foundation/mixin/_responsive";
|
||||
@import "foundation/mixin/_clearfix";
|
||||
@import "foundation/mixin/_on-event";
|
||||
@import "foundation/mixin/_sr-only";
|
||||
|
||||
/**
|
||||
* Foundationレイヤーでは`html`や`body`のような広範囲にわたるベーススタイル、
|
||||
* `h2`や`ul`のような基本的なタイプセレクタのデフォルトスタイルを定義します。
|
||||
* 装飾的なスタイルは避けて、できる限り低詳細度に保ちます。idセレクタやclassセレクタは使用しません。
|
||||
*/
|
||||
@import "foundation/base/_normalize";
|
||||
@import "foundation/base/_base";
|
||||
|
||||
/* =============================================================================
|
||||
#Layout
|
||||
========================================================================== */
|
||||
/**
|
||||
* Layoutレイヤーはヘッダーやフッターのような、ページを構成するコンテナブロックのスタイルを定義します。
|
||||
* 目安としてはワイヤーフレームに書かれるような大きな単位のブロックです。
|
||||
* 汎用性のあるグリッドシステムは次のObject/Componentレイヤーで定義します。
|
||||
* グローバルナビゲーションやコピーライトのようなコンポーネントは、Object/Projectレイヤーで定義します。
|
||||
* 基本的にはclass属性を使用しますが、id属性を使用することもできます。
|
||||
* プレフィックス(接頭辞)として`l-`をつけます。
|
||||
*/
|
||||
@import "layout/_header";
|
||||
@import "layout/_footer";
|
||||
@import "layout/_main";
|
||||
@import "layout/_sidebar";
|
||||
@import "layout/_section";
|
||||
|
||||
/* =============================================================================
|
||||
#Object
|
||||
========================================================================== */
|
||||
/**
|
||||
* Objectレイヤーはプロジェクトにおけるビジュアルパターンです。抽象度や詳細度、
|
||||
* 拡張性などによって、4つのレイヤーにわけられます。
|
||||
* それぞれのレイヤーにはプレフィックス(接頭辞)をつけます。
|
||||
* 1. Component(`c-`)
|
||||
* 2. Project(`p-`)
|
||||
* 3. Scope(`s-`)
|
||||
* 4. Utility(`u-`)
|
||||
*
|
||||
* ランディングページのようにページ特有のスタイルを多く含む場合は、
|
||||
* ページ専用のCSSファイルを作成することもできます。
|
||||
* ページ専用のスタイルは、そのページにだけ読み込ませることでスコープをつくり、
|
||||
* プレフィックス(接頭辞)をつけないことで名前の重複を防ぎます。
|
||||
*/
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Component
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Componentレイヤーは多くのプロジェクトで横断的に再利用のできるような、小さな単位のモジュール(機能)です。
|
||||
* OOCSSの構造(structure)の機能を担うため、装飾的なスタイルをできるだけ含めないようにします。
|
||||
* また、`width`や`margin`といったレイアウトに影響を与えるプロパティもできるだけ含めないようにします。
|
||||
* 例えばgridやmediaといったレイアウトパターンが該当します。
|
||||
* プレフィックス(接頭辞)として`c-`をつけます。
|
||||
*/
|
||||
@import "object/component/_wrapper";
|
||||
@import "object/component/_layout";
|
||||
@import "object/component/_media";
|
||||
@import "object/component/_list-unstyled";
|
||||
@import "object/component/_embed";
|
||||
@import "object/component/_table";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Project
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Projectレイヤーはプロジェクト固有のパターンで、複数のページで使い回せるようなコンポーネントです。
|
||||
* 具体的なスタイルを持つUI(ユーザーフェイス)で、追加されるコンポーネントのほとんどはこのレイヤーに置かれます。
|
||||
* もし、このレイヤーで同じパターンが3箇所で使われていたら、別のコンポーネントとしてまとめられないか検討しましょう。
|
||||
* プレフィックス(接頭辞)として`p-`をつけます。
|
||||
*/
|
||||
@import "object/project/_icon";
|
||||
@import "object/project/_icon-extend";
|
||||
@import "object/project/_button";
|
||||
@import "object/project/_breadcrumb";
|
||||
@import "object/project/_label";
|
||||
@import "object/project/_badge";
|
||||
@import "object/project/_card";
|
||||
@import "object/project/_split";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Scope
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* ComponentレイヤーやProjectレイヤーのようなコンポーネント単位ではなく、
|
||||
* ページ単位や任意の範囲(スコープ)でのスタイルを定義します。1箇所でしか使わないような特異なスタイルや、
|
||||
* ページ単位でComponentやProjectレイヤーのスタイルを微調整したい場合に使用してもかまいません。
|
||||
* 例えばブログページのスタイルとして_blog.scssを作成します。
|
||||
* このレイヤーでは`.s-blog p`のような要素セレクタとの結合子も使うこともできます。
|
||||
* もし、このレイヤーで同じパターンが3箇所で使われていたら、
|
||||
* ProjectレイヤーやUtilityレイヤーでまとめられないか検討しましょう。
|
||||
* プレフィックス(接頭辞)として`s-`をつけます。
|
||||
*/
|
||||
@import "object/scope/_blog";
|
||||
|
||||
/* -----------------------------------------------------------------------------
|
||||
#Utility
|
||||
-------------------------------------------------------------------------- */
|
||||
/**
|
||||
* Utilityレイヤーはいわゆる汎用クラスで、ほとんどの場合は単一のスタイルをもっています。
|
||||
* コンポーネント間の間隔を調整したり、BEMのModifierが増えすぎるのを防ぎます。
|
||||
* `.mb10`のような具体的な名前より`.mb-small`のような相対的な名前にしたり、
|
||||
* pxよりもemや%で指定することを推奨します。
|
||||
* 確実にスタイルを適応させるために`!important`を使用します。
|
||||
* プレフィックス(接頭辞)として`u-`をつけます。
|
||||
*/
|
||||
@import "object/utility/_text";
|
||||
@import "object/utility/_image";
|
||||
@import "object/utility/_margin";
|
||||
@import "object/utility/_display";
|
||||
@import "object/utility/_width";
|
||||
@import "object/utility/_offset";
|
||||
@import "object/utility/_percent";
|
||||
```
|
|
@ -0,0 +1,91 @@
|
|||
/* #Content
|
||||
-------------------------------------------------------------------------- */
|
||||
/*doc
|
||||
---
|
||||
title: content
|
||||
name: content
|
||||
categories: [layout]
|
||||
---
|
||||
|
||||
`<article>`タグが使われるようなメインコンテンツのスタイルです。
|
||||
ナビゲーションやバナーなどのレイアウトを含むことはできますが、
|
||||
コンポーネント自体はobject/projectレイヤーで定義します。
|
||||
|
||||
```block
|
||||
<body>
|
||||
<article class="l-content s-blog">
|
||||
<header class="l-content__lead"></header>
|
||||
</article>
|
||||
</body>
|
||||
```
|
||||
*/
|
||||
.l-content {
|
||||
width: 100%;
|
||||
margin: 30px auto 0;
|
||||
padding: 0 20px;
|
||||
@include pc{
|
||||
margin: 25px 0 0 240px;
|
||||
padding: 0 32px;
|
||||
}
|
||||
@include sp{
|
||||
padding-bottom: 130px;
|
||||
max-width: 700px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
@include sp02{
|
||||
padding-bottom: 110px;
|
||||
}
|
||||
&-wrap{
|
||||
margin: 0 auto;
|
||||
box-sizing: border-box;
|
||||
@include pc{
|
||||
max-width: 1064px;
|
||||
-webkit-box-shadow: 0 1px 4px #ddd;
|
||||
box-shadow: 0 1px 4px #ddd;
|
||||
margin-bottom: 40px;
|
||||
border-radius: 8px;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
&__ttl{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
margin: 0 auto 35px;
|
||||
@include pc{
|
||||
max-width: 1064px;
|
||||
justify-content: space-between;
|
||||
margin: 0 auto 25px;
|
||||
}
|
||||
@include sp02{
|
||||
margin: 0 auto 30px
|
||||
}
|
||||
&__left{
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
}
|
||||
h2{
|
||||
font-size: 2.4rem;
|
||||
font-weight: bold;
|
||||
@include pc{
|
||||
margin-right: 30px;
|
||||
font-size: 3rem;
|
||||
}
|
||||
@include sp{
|
||||
letter-spacing: 0.04em;
|
||||
}
|
||||
@include min{
|
||||
font-size: 2rem;
|
||||
}
|
||||
}
|
||||
}
|
||||
&-w560{
|
||||
margin: 0 auto;
|
||||
width: 100%;
|
||||
@include pc{
|
||||
max-width: 560px;
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,32 @@
|
|||
/* #Footer
|
||||
-------------------------------------------------------------------------- */
|
||||
/*doc
|
||||
---
|
||||
title: footer
|
||||
name: footer
|
||||
categories: [layout]
|
||||
---
|
||||
|
||||
`<body>`タグ直下にある`<footer>`タグのスタイルです。
|
||||
コピーライトやナビゲーションのレイアウトを含むことはできますが、
|
||||
コンポーネント自体はobject/projectレイヤーで定義します。
|
||||
|
||||
```block
|
||||
<body>
|
||||
<footer class="l-footer">
|
||||
<div class="l-footer__copyright">
|
||||
<small class="p-copyright"></small>
|
||||
</div>
|
||||
<nav class="l-footer__sub-nav">
|
||||
<ul class="p-foot-nav">
|
||||
<li></li>
|
||||
<li></li>
|
||||
<ul>
|
||||
</nav>
|
||||
</footer>
|
||||
</body>
|
||||
```
|
||||
*/
|
||||
.l-footer {
|
||||
|
||||
}
|
変更されたファイルが多すぎるため、一部のファイルは表示されません さらに表示
新しいイシューから参照