Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
CSS で切る・貼る・コピーする

CSS で切る・貼る・コピーする

これは CSS Programming Advent Calendar 2012 の 18 日目の記事です。

現在、いくつかのブラウザベンダーから新しい CSS の機能が提案・実装されており、CSS で今までにできなかった表現も可能になってきています。 例えば、Firefox や Chrome では、要素を自由に切ったり貼ったりできるようになりました。

element() function

Firefox 4 以上では、要素を画像として取得する element() 関数 が実装されています。

background-image: element(#original) /* 実際はまだ -moz-element() */

として、要素 #original をコピーして背景画像に設定します。 background-***mask, clip-path をうまく使えば、ページの一部を切り取って再配置したり、小さなプレビューを表示したりということもできます。 ただし「画像として」貼っているので、ポインタイベントがなく文字選択などができないことには注意が必要です。 element() は残念ながら CSS4 に延期されたので、他のブラウザに実装されるのはまだまだ先になるかもしれません……。

CSS Regions

従来の CSS によるレイアウトでは、例えば雑誌のレイアウトのように、ひと続きの文章を複数の要素にまたがって表示することは難しいことでした。そこで、CSS Regions という仕様が Adobe によって提案されました。

#content {
  flow-into: hoge;
  /* まだ -webkit-flow-into または -ms-flow-into
     hoge は none, inherit 以外の任意の名前をつけることができる */
}
.view {
  flow-from: hoge;
}

とすると、#content の内容を .view(複数要素でもいい)に流し込めます。 Chrome の about:flags で「試験運用版の WebKit 機能を有効にする」をオンにすると使うことができます。 また IE10 にも一部実装が載っていますが、コンテンツを単一の HTML ファイルにして iframe に収める必要があり、やや違ったものとなっています。以下では Chrome を前提にしています。

CSS Regions は文章だけではなく、実際にはあらゆる要素を切断して再配置できます。 CSS Transforms を合わせれば縦や斜めにもページを切断できます。

-webkit-box-reflect で反射させたものを Regions で切断すれば、上の element() 関数と同じように、要素をコピーすることも可能です(これもポインタイベントが失われます)。 ただし background-*** が使えないので、element() 関数を完全に補うことはできません。

CSS Regions で要素をコピー

resize プロパティや contentEditable と組み合わせると面白いことができそうだと思っていましたが、断念しました……。 @region ルールが完全に実装されたらまた考えてみます。

19 日目は

明日は 1026 さん(7 日ぶり 2 度目)です!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment