CSS によるテキスト選択の防止

Migel Hewage Nimesha 2023年6月20日
  1. CSS user-select 属性を使用してテキストの選択を防止する
  2. テキストに user-select: none を追加
  3. テーブル内のテキストに user-select 属性を追加する
  4. まとめ
CSS によるテキスト選択の防止

CSS には、要素に変更を加えるために使用できる属性がたくさんあります。 ここで、変更という言葉は、要素のスタイリング、または要素のさまざまな制御の付与または削除を指します。

CSS user-select 属性を使用してテキストの選択を防止する

Web ページをデザインするとき、通常、段落、表内のデータ、フォーム内のラベルなどのテキストを追加します。そのテキストが Web ページに表示されると、それらを表示する人はテキストを選択して、さまざまなアクティビティのためにコピーできます。 .

たとえば、Web ページにアクセスした人は、このページからテキストを選択し、コピーして使用することができます。 ただし、Web ページの所有者の中には、それを好まない人もいます。 それを防ぐために、テキストの選択をブロックできます。

CSS は、user-select 属性であるテキスト選択を防止する属性を提供します。 この属性を使用して、ユーザーがテキストを選択できないようにすることができます。

しかし、私たちは皆、さまざまな種類の Web ブラウザーを使用しています。 異なる種類の Web ブラウザーを使用する場合は、この属性の使用方法を変更する必要があります。

以下に、さまざまな Web ブラウザーで user-select 属性を使用する方法を示しました。

構文:

-webkit-user-select: none;    /*Standard method. Can be used in Safari*/
-moz-user-select: none;       /*Standard method. Can be used in Firefox*/
-ms-user-select: none;        /*Standard method. Can be used in Internet Explorer or Edge*/
user-select: none;            /*Standard method. Can be used in Google Chrome*/

最初の方法は、デフォルトのブラウザーが Safari であるため、iOS および Mac ユーザー向けです。 Firefox ユーザーは 2 番目の方法を使用でき、Internet Explorer または Edge を使用するユーザーは 3 番目の方法を使用できます。

ブラウザとして Google Chrome を使用している場合は、4 番目の方法を使用できます。

上記の構文には、user-select 属性の値に割り当てることができるいくつかのオプションがあります。

オプション 説明
auto auto 値は、user-select 属性が使用するデフォルト値です。 ブラウザーで許可されている場合は、テキストを選択できます。
none このオプションを使用すると、ユーザーはテキストを選択できなくなります。 つまり、テキストの選択を妨げています。
text これを使用して、ユーザーがテキストを選択できるようにします。
all このオプションを使用すると、ダブルクリックではなくシングルクリックでテキストを選択できます。

この記事では、ユーザーがテキストを選択できないようにする user-select 属性の none オプションについて説明します。

テキストに user-select: none を追加

この概念を簡単に理解するために、次のように Web ページに簡単なテキストを追加してみましょう。

<div>
    <p class="unselect">This is a text</p>
</div>

テキストにスタイルを追加する

見やすくするために、このテキストにいくつかの CSS スタイルを追加してみましょう。

.unselect{
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    font-size: 30px;
    color: navy;
    padding-left: 10px;
}

ここでは、テキストに fontfont-size、および padding を指定しました。 このように表示され、テキストを選択できます。

ご覧のとおり、通常どおりテキストを選択できます。

none 値を持つ user-select 属性を追加する

スタイルを追加した後、user-select 属性を設定して、テキストの選択を防ぐことができます。 以下に示すように、属性の値として none を使用します。

.unselect{
    user-select: none;
    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    font-size: 30px;
    color: navy;
    padding-left: 10px;
}
<div>
    <p class="unselect">This is a text</p>
</div>

ご覧のとおり、テキストは選択できなくなりました。

ただし、上記のコードは、Google Chrome Web ブラウザーを使用している場合にのみ機能します。 上記のコードを変更して、他の Web ブラウザーで使用することができます。

.unselect{
    user-select: none; /*Standard method. Can use in Google Chrome*/
    -webkit-user-select: none; /*Standard method. Can use in Safari*/
    -moz-user-select: none; /*Standard method. Can use in Firefox*/
    -ms-user-select: none; /*Standard method. Can use in Internet Explorer or Edge*/

    font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
    font-size: 30px;
    color: navy;
    padding-left: 10px;
}
<div>
    <p class="unselect">This is a text</p>
</div>

テーブル内のテキストに user-select 属性を追加する

では、この属性を試すためのテーブルを作成してみましょう。 作成するテーブルには、First NameLast Name の 2つの列と、関連データを含む 2つの行があります。

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="Styles.css">
        <title>HTML prevent text selection</title>
    </head>
    <body>
        <table>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
            <tr>
                <td>Jamie</td>
                <td>Anderson</td>
            </tr>
        </table>
    </body>
</html>

ご覧のとおり、テーブルを作成しましたが、スタイルはありません。 CSS を使用してテーブルのスタイルを設定しましょう。

table {
    background-color: rgb(243, 150, 253);
    font-family: arial, sans-serif;
    border-collapse: collapse;
    width: auto;
}

td, th {
    border: 1px solid #000000;
    text-align: left;
    padding: 8px;
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="Styles.css">
        <title>HTML prevent text selection</title>
    </head>
    <body>
        <table>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
            <tr>
                <td>Jamie</td>
                <td>Anderson</td>
            </tr>
        </table>
    </body>
</html>

結果に示すように、テーブルのスタイルが設定されました。 テーブル内のテキストを選択できることもわかるので、無効にしてみましょう。

前の例のように、user-select 属性をテーブルに追加できます。 テーブル全体に追加することも、選択したセルのみに追加することもできます。

テーブル ヘッダーにのみ user-select 属性を追加します。 以下のコード チャンクを同じ CSS コードに追加できます。

th{
    user-select: none; /*Standard method. Can use in Google Chrome*/
    -webkit-user-select: none; /*Standard method. Can use in Safari*/
    -moz-user-select: none; /*Standard method. Can use in Firefox*/
    -ms-user-select: none; /*Standard method. Can use in Internet Explorer or Edge*/
}
<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <link rel="stylesheet" href="Styles.css">
        <title>HTML prevent text selection</title>
    </head>
    <body>
        <table>
            <tr>
                <th>First Name</th>
                <th>Last Name</th>
            </tr>
            <tr>
                <td>Jamie</td>
                <td>Anderson</td>
            </tr>
        </table>
    </body>
</html>

コードを実行すると、以下のような結果が得られます。

ご覧のとおり、ヘッダーのテキストのみを選択することはできません。

まとめ

この記事では、テキスト選択の防止と、CSS の user-select 属性がそれを実現するのにどのように役立つかについて説明しました。 学習したように、さまざまな Web ブラウザーでこの属性を使用するさまざまな方法があります。

テキスト選択を防止する基本的なことを明確にするために、2つの例を取り上げました。 他にも方法はありますが、CSS はこれを実現する簡単な方法を提供します。

Migel Hewage Nimesha avatar Migel Hewage Nimesha avatar

Nimesha is a Full-stack Software Engineer for more than five years, he loves technology, as technology has the power to solve our many problems within just a minute. He have been contributing to various projects over the last 5+ years and working with almost all the so-called 03 tiers(DB, M-Tier, and Client). Recently, he has started working with DevOps technologies such as Azure administration, Kubernetes, Terraform automation, and Bash scripting as well.