footer下固定のcss

/dist/login/html

<body>
	<div class="wrapper">
		<div class="container">
			// 省略
		</div>
		<footer>
			<p>(c)hanbai all right reserved.</p>
		</footer>
	</div>
</body>

/src/scss/style.scss

.wrapper {
	min-height: 100vh;
	position: relative;
	padding-bottom: 120px;
	box-sizing: border-box;
}
footer {
	width: 100%;
	background-color: #89c7de;
	color: #fff;
	text-align: center;
	padding: 30px 0;

	position: absolute;
	bottom: 0;
}

pc

sp

OK! 続いてTopページを作っていきます^^

あ、コピーライトはhtmlでは &copyでした。

		<footer>
			<p>&copy; hanbai All Right Reserved.</p>
		</footer>

ま、Djangoのインクルード時に修正すればいいのですが、気づいたタイミングで変えます。

cssのmozとwebkit

ベンダープレフィックスとは、ブラウザベンダーが独自の拡張機能を実装する際に、それが拡張機能であることを明示するために付ける識別子
/src/scss/style.scss

body {
	height: 100%;
	background-color: #fff;
}

.login {
	.card-container.card {
		max-width: 350px;
		padding: 40px 40px;
	}
	.btn {
		font-weight: 700;
		height: 36px;
		-moz-user-select: none;
		-webkit-user-select: none;
		user-select: none;
		cursor: default;
	}
	.card {
		background-color: #F7F7F7;
		padding: 20px 25px 30px;
		margin: 0 auto 25px;
		margin-top: 50px;
		-moz-border-radius: 2px;
		-webkit-border-radius: 2px;
		border-radius: 2px;
		-moz-box-shadow: 0px 2px 2px rgba(0,0,0,0.3);
		-webkit-box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
		box-shadow: 0px 2px 2px rgba(0, 0, 0, 0.3);
	}
	.profile-img-card {
		width: 96px;
		height: 96px;
		margin: 0 auto 10px;
		display: block;
		-moz-border-radius: 50%;
		-webkit-border-radius: 50%;
		border-radius: 50%;
	}
	.form-signin #inputEmail, .form-signin #inputPassword {
		direction: ltr;
		height: 44px;
		font-size: 16px;
	}
	.form-signin input[type="email"], .form-signin input[type="password"], .form-signin input[type="text"], .form-signin button {
		width: 100%;
		diplay: block;
		margin-bottom: 10px;
		z-index: 1;
		postion: relative;
		-moz-box-sizing: border-box;
		-webkit-box-sizing: border-box;
		box-sizing: border-box;
	}
	.form-signin .form-control:focus {
		border-color: rgb(104, 145, 162);
		outline: 0;
		-webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.75), 0 0 8px rgb(104, 145, 162);
		box-shadow: inset 0 1px 1px rgba(0, 0, 0, .075), 0 0 8px rgb(104, 145, 162);
	}
	.btn.btn-signin {
		background-color: rgb(104, 145, 162);
		padding: 0px;
		font-weight: 700;
		font-size: 14px;
		height: 36px;
		-moz-border-radius: 3px;
		-webkit-border-radius: 3px;
		border-radius: 3px;
		border: none;
		-o-transition: all 0.218s;
		-moz-transition: all 0.218s;
		-webkit-transition: all 0.218s;
		transition: all 0.218s;
	}
}

うむ、まあまあいい感じ。

webpack環境設定: style.cssの設定

### 前提条件
– node:v12.18.3、npm:6.14.6
– webpack, webpack-cli, webpack-dev-serverインストール済

### Style LoaderとCSS Loaderのインストール
$ npm i -D style-loader css-loader

– 拡張子.cssファイルに対して、useで指定したLoaderが後ろから順番に適用される
– cssファイル -> css-loader -> style-loader -> main.js
webpack.config.js

module.exports = {
	// 省略

	module: {
		rules: [
			{
				test: /\.css/,
				use: [
					"style-loader",
					{
						loader: "css-loader",
						options: { url: false }
					}
				]
			}
		]
	}
};

/src/index.js

import "./style.css";

/src/style.css

$ npm run build
-> style.cssが /dist/main.jsにバンドルされる

### ソースマップの出力
– ソースマップとは変換前のコード情報
webpack.config.js

const MODE = "development";
const enabledSourceMap = MODE === "development";

module.exports = {

	entry: `./src/index.js`,

	output: {
		filename: "main.js"
	},

	devServer: {
		host: '192.168.33.10',
		port: '8000',
		contentBase: "dist",
		open: true
	},

	module: {
		rules: [
			{
				test: /\.css/,
				use: [
					"style-loader",
					{
						loader: "css-loader",
						options: { 
							url: false,
							sourceMap: enabledSourceMap
						}
					}
				]
			}
		]
	}
};

さあ、続いてSassに行きます。

BEMとは

BEMとは
– フロントエンドの設計方法
– Block、Element、Modifier
– 厳格なclass名の命名ルール
https://en.bem.info/methodology/

背景
– スタイルの優先順位の指定が難しい
– !importantの多用
– パーツを別の場所に流用すると表示が崩れる
– 制作者本人しかわからないclass名

制作ボリュームが膨大になった時、全体像を誰も理解できないってのはよくありますね。
特に、長いサービスだと、前任者が全員退職して、知っている人がいないとか。

BEMではパーツをBlockと呼ぶ
Blockはid属性ではなく、classを使う
※idは1ページ1回、classは重複利用可能
Blockは入れ子にしない

ElementはBlockの構成要素
Elementのclass名はblockの構成要素名を入れる

.search
.search__input
.search__button
[css]

Modiferは既存のBlockやElementと似た物を作りたいとき
[css]
<ul class="list  list_type_disc">
  <li class="list__item"></li>
  <li class="list__item"></li>
  ...
</ul>
 
<ul class="list  list_type_check">
  <li class="list__item"></li>
  <li class="list__item"></li>
  ...
</ul>

BEMでは、block, element, modiferで一貫したセパレーター(_)を使う

modife: Block_key_value
単語はハイフン(-)もしくはキャメルケースなど

で、BEMはどれ位使われているかというと、50%くらい
50%といえば、かなりの割合ですなー

Q&Aの見出しをCCSで装飾(邪道?)

[ccs]
#qa dt .q {
padding:2px 5px 2px 5px;
background-color:orangered;
color:#fff;
margin-right:5px;
}
#qa dd .a {
padding:2px 5px 2px 5px;
background-color:orangered;
color:#fff;
margin-right:5px;
}
[/ccs]

邪道かな。やっぱimgでやるべきか。。

Specifying multiple elements in CCS

Specify CCS by separating element name + class name with comma.
The same style can be applied by separating element name + class name with comma.
[ccs]
#right-contents input[type=”text”], #right-contents input[type=”email”], #right-contents [type=”number”] {
width: 45%;
height: 3.5%;
border-radius: 5px;
background-color: #a9a9a9;
color: #f5f5f5;
padding-left: 3%;
font-size: 15px;
}
[/ccs]

なるほど~

delete part of table td border:border-right-style: hidden

<table border="1">
		<tr id="title">
			<td colspan="3">検索条件</td>
		</tr>
		<tr>
			<td>hoge</td>
			<td></td>
			<td style="border-right-style: hidden;border-bottom-style: hidden;"></td>
		</tr>
		<tr>
			<td>hoge</td>
			<td>姓 名</td>
		</tr>
		<tr>
			<td>hoge</td>
			<td></td>
		</tr>
		<tr>
			<td>hoge</td>
			<td> </td>
		</tr>
		<tr>
			<td>hoge</td>
			<td> </td>
		</tr>
		<tr>
			<td>hoge</td>
			<td> </td>
		</tr>
	</table>

芸がこまけー

create menu with dl, dt, dd

html

<body>
	<hr>
    <div class="container">
    <div class="menu">
    	<dl>
    		<dt>機能</dt>
    		<dd><a href="">管理<a></dd>
    		<dd><a href="">管理<a></dd>
    		<dd><a href="">管理<a></dd>
    	</dl>
    	<dl>
    		<dt>機能</dt>
    		<dd><a href="">管理<a></dd>
    		<dd><a href="">管理<a></dd>
    		<dd><a href="">管理<a></dd>
    	</dl>
    	<dl>
    		<dt>パスワード変更</dt>
    		<dd><a href="">パスワード変更</a></dd>
    	</dl>
    	<dl>
    		<dt>機能</dt>
    		<dd><a href="">管理<a></dd>
    		<dd><a href="">管理<a></dd>
    		<dd><a href="">管理<a></dd>
    	</dl>
    </div>
    <div class="main">
	<p>テキストが入ります</p>
    </div>
	</div>
</body>

css

.menu dt {
	border-bottom:1px solid gray;
	border-left:1px solid gray;
	padding-left: 10px;
	margin-bottom:5px;
}
.menu dd {
	font-size:14px;
}

view

quite better than expected