14
13

More than 5 years have passed since last update.

Bootstrap で Modal の中身だけ印刷

Last updated at Posted at 2014-07-12

Bootstrap で Modal が表示されているときは body に .modal-open というクラスが追加されます。

なので、次のように .modal-open があるときに modal 以外を非表示にする CSS を書いておけば、modal の表示時に中身だけ印刷されるようにできます。

style.css
@media print {
    .modal-open > .container,
    .modal-open > footer {
        display: none !important;
    }
}

次のようにしても大丈夫かと思ったのですが、なぜか Chrome で印刷プレビューが表示されなくなってしまいました(FireFox や IE だと大丈夫なのですが)。

style.css
@media print {
    .modal-open > *:not(.modal) {
        display: none !important;
    }
}

↓追記

改めて確認すると、上記のどちらの方法でも Chrome では印刷できませんでした。
どうやら可視な要素がすべて position:fixed だと印刷できなくなるようです。

次のように書けば Chrome でもモーダルの中身だけを印刷できました。

style.css
@media print {
    .modal-open > * {
        display: none !important;
    }
    .modal-open > .modal {
        display: inherit !important;
        position: inherit !important;
    }
}

↑追記

HTML は次のように body の直下に .modal を書いておきます。

index.html
<!doctype html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
    <link rel="stylesheet" href="style.css">
    <style>
        footer {
            margin: 20px;
            padding: 10px;
            border-top: 1px solid #cccccc;
            text-align: center;
        }
    </style>
</head>
<body>

<nav class="navbar navbar-default">
    <div class="container-fluid">
        <div class="navbar-header">
            <a class="navbar-brand" href="#">Example</a>
        </div>
        <div class="collapse navbar-collapse">
            <ul class="nav navbar-nav">
                <li><a href="#">Home</a></li>
                <li><a href="#">Page1</a></li>
                <li><a href="#">Page2</a></li>
            </ul>
        </div>
    </div>
</nav>

<div class="container">
    <h1>ページのタイトル</h1>
    <p>あいうえお。あいうえお。あいうえお。あいうえお。あいうえお。</p>
    <button class="btn btn-primary btn-lg hidden-print" data-toggle="modal" data-target="#modal">モーダル</button>
</div>

<footer>
    <div class="container">
        <p>Copyright &copy; 2014 Unknown All rights reserved.</p>
    </div>
</footer>

<!-- Modal -->
<div class="modal fade" id="modal" tabindex="-1">
    <div class="modal-dialog">
        <div class="modal-content">
            <div class="modal-header">
                <button type="button" class="close hidden-print" data-dismiss="modal">
                    <span>&times;</span><span class="sr-only">閉じる</span>
                </button>
                <h4 class="modal-title">モーダルのタイトル</h4>
            </div>
            <div class="modal-body">
                かきくけこ。かきくけこ。かきくけこ。かきくけこ。かきくけこ。
            </div>
            <div class="modal-footer">
                <button type="button" class="btn btn-default hidden-print" data-dismiss="modal">閉じる</button>
                <p class="visible-print">Copyright &copy; 2014 Unknown All rights reserved.</p>
            </div>
        </div>
    </div>
</div>

<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script>
</body>
</html>
14
13
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
13