MW211 EXIT

devlog
CSS/「;」漏れ対策正規表現
2014年02月22日
CSSで末尾の「;」を忘れると結構厄介だ。

例えばこんな感じ。
┌──────────────────────────────────────┐
│div#main {                                                                  │
│    top                 :0     /* ←「;」が漏れている */                    │
│    height              :1em;  /* ←効かない          */                    │
└──────────────────────────────────────┘
後続の指定が効かなくなってしまう。

ということで、そういうのをみつける正規表現。
┌──────────────────────────────────────┐
│:[^;]*$                                                                     │
└──────────────────────────────────────┘
「:」で始まって、「;」がないまま終わっている行を抽出してくれる。

もちろん、二行に渡って書いたりしたら抽出されてしまうし、
「a:link」みたいなのも抽出されてしまう。
ま、そこはご愛嬌(そんなに多くないはず個別に判断して)ということで。
分類:CSS、正規表現
CSS/float要素の縦幅揃え
2014年02月21日
┌──────────┐
│┌──┬──┬──┐│
││    │    │    ││
││    │    ├──┘│
│└──┤    │      │
│      │    │      │
│      └──┘      │
└──────────┘
float要素を横に並べると、高さが揃わないことがある。
tableタグだったらこんなことにならないのに…などと思ってしまうが
これを解消する方法。

┌──────────────────────────────────────┐
│float           :left;                                                      │
│padding-bottom  : 32767px;                                                  │
│margin-bottom   :-32767px;                                                  │
└──────────────────────────────────────┘
「float:left;」などを定義する要素に、下方向へのとっても大きなパディングと
ネガティブマージンを同時に定義してあげる。
とっても大きなというのは表示ウインドウサイズをはみ出るくらいの大きさ。
ま、指定できる最大値の「32767px」あたりを定義してあげればいい。

これによって、あら不思議、一番長い縦幅に揃ってくれるのだ。
┌──────────┐
│┌──┬──┬──┐│
││    │    │    ││
││    │    ├──┘│
│└──┤    │ ↓ ││
││ ↓ │    │ ↓ ││
│└──└──┘──┘│
└──────────┘
でも、なんか裏技っぽいようなぁ。
なんでdivはtable同等の機能を標準で備えていないんだと
相変わらずの疑問が湧くのであった。

…と思っていたら、将来的には
  「display:table;」(親要素)と「display:table-cell;」(子要素)
ってのが、主流になりそうな感じなのね(IE8から使えてる?)。
分類:CSS
CSS/float要素を内包した領域の幅
2014年02月20日
以下のようなfloat要素を内包するdivタグの場合、高さ(縦幅)は「0」である。
よって、背景色を指定しても表示されない。
┌──────────────────────────────────────┐
│<div style="background-color:#FF0000;">                                     │
│<div style="float:left;height:1em;width:1em;"></div>                        │
│</div>                                                                      │
└──────────────────────────────────────┘
通常は、内包する要素によって外側も拡げられるものだが
float要素の場合は、内包とはいっても浮いてる感じなので
外側としては最低限の大きさしか持たない状況になる。

で、これを解消して、外側のdivタグにも高さや横幅を持たせる方法。
以下のいずれか。

(1) 外側のdivタグに「overflow:hidden;」を持たせる
┌──────────────────────────────────────┐
│<div style="overflow:hidden;background-color:#FF0000;">                     │
│<div style="float:left;height:1em;width:1em;"></div>                        │
│</div>                                                                      │
└──────────────────────────────────────┘
「overflow:auto;」「overflow:scroll;」でも大丈夫。
既定の「overflow:visible;」がダメなようだ。

(2) clear要素を最後につける
┌──────────────────────────────────────┐
│<div style="background-color:#FF0000;">                                     │
│<div style="float:left;height:1em;width:1em;"></div>                        │
│<div style="clear:both;"></div>                                             │
│</div>                                                                      │
└──────────────────────────────────────┘
「float:left;」向けの「clear:left;」、
「float:right;」向けの「clear:right;」もあるが、
両方兼ねる「clear:both;」が便利。

(3)after疑似要素を使う
┌──────────────────────────────────────┐
│<div style="background-color:#FF0000;" class="■">                          │
│<div style="float:left;height:1em;width:1em;"></div>                        │
│</div>                                                                      │
├──────────────────────────────────────┤
│.■:after {                                                                 │
│    content             :"";     /* after疑似要素の必須項目 */              │
│    display             :block;  /* after疑似要素の必須項目 */              │
│    clear               :both;                                              │
│}                                                                           │
└──────────────────────────────────────┘
モダンブラウザ(この場合はIE8以降)であれば、
clear要素のタグをわざわざ作らなくとも、CSS上で制御できる。
「content」の指定がないと効かないので、ダミーで「""」でも指定しておく。

(4) 外側のdivタグ自体を「float:left;」にして「width:100%;」にする
┌──────────────────────────────────────┐
│<div style="float:left;width:100%;background-color:#FF0000;">               │
│<div style="float:left;height:1em;width:1em;"></div>                        │
│</div>                                                                      │
└──────────────────────────────────────┘
ちと強引すぎるが、こういう方法もあるよということで。
分類:CSS
CSS/ネガティブマージンとボーダーⅡ
2014年02月19日
ネガティブマージンの対象を変えれば、自分の領域を減らすっぽいことができる。
  「margin-bottom:-1em;」→「margin-top:-1em;」
┌───────────┐  ┌───────────┐
│div#A {               │  │div#A {               │
│  height        :2em; │  │  height        :2em; │
│  width         :2em; │  │  width         :2em; │
│  border-right  :1em; │  │  border-right  :1em; │
│  border-bottom :1em; │  │  border-bottom :1em; │
│                      │  │  margin-top    :-1em;│
│}                     │  │}                     │
│div#B {               │  │div#B {               │
│  height        :2em; │  │  height        :2em; │
│  width         :2em; │  │  width         :2em; │
│}                     │  │}                     │
├───────────┤  ├───────────┤
│                      │  │    ┌───┬─┐    │
│                      │  │    │      │  │    │
│‥‥┌───┬─┐‥‥│  │‥‥│  A  │  │‥‥│
│    │      │  │    │  │    │      │  │    │
│    │  A  │  │    │  │    ├───┘  │    │
│    │      │  │    │  │    │        a│    │
│    ├───┘  │    │  │    ├───┬─┤    │
│    │        a│    │→│    │      │  │    │
│    ├───┬─┤    │  │    │  B  ├─┤    │
│    │      │  │    │  │    │      │  │    │
│    │  B  ├─┤    │  │    ├─┬─┼─┤    │
│    │      │  │    │  │    │  │  │  │    │
│    └───┴─┘    │  │    └─┴─┴─┘    │
└───────────┘  └───────────┘
もちろん玉突き式に反対側に迷惑をかけることになるのだが、
ウインドウの端っこであれば、ごまかすこともできる。
分類:CSS
CSS/ネガティブマージンとボーダー
2014年02月18日
「border」で周囲に線を引くと、その分、その領域が占領する面積が増えてしまう。
その結果、隣の領域を追い出す形になる。

そこで、ネガティブマージンを使えば追い出さないようにすることができる。
┌───────────┐  ┌───────────┐
│div#A {               │  │div#A {               │
│  height        :2em; │  │  height        :2em; │
│  width         :2em; │  │  width         :2em; │
│  border-right  :1em; │  │  border-right  :1em; │
│  border-bottom :1em; │  │  border-bottom :1em; │
│                      │  │  margin-bottom :-1em;│
│}                     │  │}                     │
│div#B {               │  │div#B {               │
│  height        :2em; │  │  height        :2em; │
│  width         :2em; │  │  width         :2em; ├───────────┐
│}                     │  │}                     │以下ではない          │
├───────────┤  ├───────────┼───────────┤
│    ┌───┬─┐    │  │    ┌───┬─┐    │    ┌───┬─┐    │
│    │      │  │    │  │    │      │  │    │    │  A  │  │    │
│    │  A  │  │    │  │    │  A  │  │    │    ├───┘  │    │
│    │      │  │    │  │    │      │  │    │    │        a│    │
│    ├───┘  │    │  │    ├───┤  │    │    ├───┬─┤    │
│    │        a│    │→│    │      │a│    │    │      │  │    │
│    ├───┬─┤    │  │    │  B  ├─┤    │    │  B  ├─┤    │
│    │      │  │    │  │    │      │  │    │    │      │  │    │
│    │  B  ├─┤    │  │    ├─┬─┼─┤    │    ├─┬─┼─┤    │
│    │      │  │    │  │    │  │  │  │    │    │  │  │  │    │
│    └───┴─┘    │  │    └─┴─┴─┘    │    └─┴─┴─┘    │
└───────────┘  └───────────┴───────────┘

ここで、間違ってはいけないのが、ネガティブマージにより
自分の本丸を小さくするのではないということ。
隣の領域の開始位置を自分の領域に食い込ませる、つまり、踏んづけてもよしと
するというのがネガティブマージンだ。

つまり、上記のように、「border」と「-margin」を同じ値にするということは、
「boder」の分、自分の領域を減らすのではなく、「border」の上に
のっかてもいいよと許可を出すみたいなもんだ。
もちろん「border<-margin(の絶対値)」の場合には、
「boder」の内側、つまり自分の領域に浸食されることになる。

つまり、「border」と「-margin」を同じ値にするということは、
他人の領地を侵略しないということではなく
他人の領地を侵略しておいて(線を引いておいて)、
自由にそこに物を置いてもいいですよと言っているようなもんだ。
分類:CSS
Excel/データへ移動「Endモード」
2014年02月17日
「ctrl」キーを押しながら「↑」「↓」「←」「→」のいずれかのキーを押すと
そのセルから最も近いデータのあるところまで移動する。
データがなければシートの端っこへ移動する。

これを「ctrl」を押さなくても常時やってくれるモードがある。
「Endモード」という。
文字通り「End」キーを押せばそのモードになる。
もちろん解除も「End」キー。
分類:Excel
CSS/マージン相殺(ブラウザの違い)
2014年02月16日
のIEではマージン相殺が効かない場合があった。
IE7以前の話。

IE7以前(IE6、IE7)では、「hasLayout:true;」だとマージン相殺が効かなかった。
「hasLayout」については別途記載したのでそちらを参照ということで、
これを回避する方法のお話。

CSSハックを使う。
┌──────────────────────────────────────┐
│div {                                                                       │
│    margin-bottom   : 1em;                                                  │
│    *margin-bottom  : 0;    /* IE7以下に適用 */                             │
│}                                                                           │
└──────────────────────────────────────┘
頭に「*」をつければ、IE7以下のみに適用されるプロパティとなるので、
これを上書してあげる形とする。
分類:CSS
CSS/IEのhasLayout
2014年02月15日
IE8以降では廃止となったが、
IE6、IE7において「hasLayout」という読取専用プロパティがあった。

既定は「false」で、CSSで以下のいずれかを指定した場合に「true」になるという
代物であった(直接の指定はできない)。
  「display:inline-block;」、「position:absolute;」、
  「float:left;」、「float:right;」、
  「height:■;」、「width:■;」、「zoom:■;」(拡大率(IE独自規格))、
  「writing-mode:tb-rl;」(縦書(IE独自規格))

で、「hasLayout:false;」の時に、
IE6で表示がおかしくなってしまうことがあったそうだ。
(IE7でズームをおこなっても同じ)

なので、敢えて「zoom:1;」とか無害なプロパティを定義して
「hasLayout:true;」にしていたらしい。
分類:CSS
CSS/CSSハック
2014年02月14日
CSSを特定のブラウザだけに有効にさせる記法を「CSSハック」という。

【IE6】
  先頭に「_」をつける
  ┌─┬──────────────────────────────────┐
  │例│_color  :#FFFFFF;                                                   │
  └─┴──────────────────────────────────┘

【IE7以下】
  先頭に「*」をつける
  ┌─┬──────────────────────────────────┐
  │例│*color  :#FFFFFF;                                                   │
  └─┴──────────────────────────────────┘

【IE8以下】
  末尾に「\9」をつける
  ┌─┬──────────────────────────────────┐
  │例│color   :#FFFFFF\9;                                                 │
  └─┴──────────────────────────────────┘
分類:CSS
CSS/マージン相殺
2014年02月13日
マージン(margin)が隣接していると、長い方が採用され、短い方が無視される。
「マージン相殺」である。

「マージン相殺」は垂直方向(縦方向)でのみ起こり、
水平方向(横方向)では起きない。

以下の二つの種類がある。(以下の図は便宜上90度回転している(本来は縦向き))
┌─────────┬──────────────┐
│                  │┌─────┐  ┌────┐│
│                  ││├→      │  │├→    ││
│(隣接)マージン相殺││          │⇒│        ││
│                  ││    ←─┤│  │ ←─┤ ││
│                *1│└─────┘  └────┘│
├─────────┼──────────────┤
│                  │┌─────┐  ┌────┐│
│                  ││├→      │  │├→    ││
│入れ子マージン相殺││          │⇒│        ││
│                  ││   ├─→ │  │├─→  ││
│                *2│└─────┘  └────┘│
└─────────┴──────────────┘
  *1:float同士の場合は相殺が起こらない
  *2:float同士の場合は相殺が起こらない
      また、親要素に「padding」「border」 が含まれているか
      「overflow:hidden」、「overflow:scroll」か
      「position:absolute」、「position:fixed」かの場合にも
      相殺が起こらない

例えば、以下のような入れ子の場合…
┌──────────────────────────────────────┐
│div#外側 {                                                                  │
│    height              :4em;                                               │
│    width               :4em;                                               │
│}                                                                           │
│div#内側 {                                                                  │
│    height              :2em;                                               │
│    width               :2em;                                               │
│    margin              :1em;                                               │
│}                                                                           │
└──────────────────────────────────────┘
以下のようなイメージになる。
┌──────────────────────────────────────┐
│                                                                            │
│┌─┬─┬─┐                                                              │
││  │  │  │                                                              │
││  └─┘  │                                                              │
││          │                                                              │
│└─────┘                                                              │
└──────────────────────────────────────┘
縦方向は外側「margin:0;」と内側「margin:1em;」が操作されて
「margin:1em;」となる(外側から見た場合「相殺」とイメージではないが相殺だ)。
内側は外側が「margin:0;」のまま、内側が「margin:1em;」のままなので
センタリングされたような形になる。
分類:CSS
前へ 1 … 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 … 156 次へ