質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.50%

  • JavaScript

    16439questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    8982questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • CSS

    5799questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • HTML5

    4022questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • Webサイト

    1079questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

CSSを使わずにJavaScriptでWebページの装飾を書く方法について

解決済

回答 4

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 427

harunouta

score 95

 前提・実現したいこと

innerHTML,CSSを使わずに、HTMLとJavaScriptだけでWebページを書こうとしています。
以下のサイトの様なことがしたいです。
JavaScriptでCSSを操作1
JavaScriptでCSSを操作2

 発生している問題・エラーメッセージ

以下のコードで該当のソースコード(sample.htmlとsample.css)で表示できるのと同じページを表示させたいのですが、HTMLなのでエラーなども表示されず、どこを修正すればいいかわからない状態です。

samplejs.html

<!DOCTYPE html>
<html lang = "ja">
<head>
    <meta charset= "utf-8">
    <title>サンプルページ</title>
</head>

<body>
    <header>
    <h1>サンプルページ</h1>
    </header>

    <nav class ="dropdown">
        <h2>メニュー</h2>
        <ul>
            <li><a href ="no1.html">その1</a></li>
            <li><a href ="no2.html">その2</a></li>
            <li><a href ="no3.html">その3</a></li>
        </ul>
    </nav>

    <article>
    <h2>内容1</h2>
    <p>文章1</p>
    <br>
    <h2>内容2</h2>
    <p id = "paragraph1">行1
    <br>行2
    <br>行3</p>
    <br>
    <h3>内容3</h3>
    <p id = "paragraph2">行1
        <br>行2</p>
        <ul>
        <ol>
            <li>項目1</li>
            <li>項目2</li>
        </ol>
        </ul>

    <form>
    <h2>フォーム</h2>
        <div>
            <lavel>氏名:<input type="text" size="15" name="name"></lavel><br>
            <label>問い合わせ内容:<input type="text" size="20" name="question"></label><br>
            <input type="submit" value="submit">
        </div>
    </form>

    </article>


    <footer>
        <ul>
            <a href ="page1.html">他のページ1</a>
            <a href ="page2.html">他のページ2</a>
        </ul>
        <small>Copyright &copy; </small>
    </footer>

<!-- JavaScriptで装飾指定 -->
    <script>
     var header = document.getElementsByTagName('header');
   header.style.text-align = 'center';


      var body = document.getElementsByTagName('body');

    var nav = document.getElementsByTagName('nav');
    nav.style.float = 'left';
    nav.style.width ='200px';
     
        //JavaScriptに変更したときに「.dropdown」はどうなるのかわからない部分
    .dropdown{
    position: relative;
    width: 190px;
    }

    .dropdown h2{
    text-align: center;
    background-color: #ffff58;
    margin: 0;
    padding: 12px 16px;
    }

    .dropdown ul{
    display: none;
    position: absolute;
    background-color: rgb(100, 100, 255);
    box-shadow: 0px 8px 16px rgba(0,0,0,0.2);
    list-style-type: none;
    margin: 0;
    padding: 0;
    z-index: 1;
    }

    .dropdown a{
    display: block;
    color: #000;
    padding: 12px 16px;
    text-decoration: none;
    width: 158px;
    }

    .dropdown a:hover{
    background-color: #555;
    color: #fff;
    }

    .dropdown:hover h2{
    background-color: rgb(100, 100, 255);
    }

    .dropdown:hover ul{
    display: block;
    }

    var article = document.getElementsByTagName('article')[0];
    atricle.style.left-margin = '210px';
    atrticle.style.float = 'left'; 

    var h1 = document.getElementsByTagName('h1')[0];
    h1.style.margin = '15px';
    h1.style.font-size = '3.0vw';

    var h3 = document.getElementsByTagName('h3')[0];
      h3.style.textDecoration = 'underline';  

    a:visited{
    color: rgb(206, 96,9);
    }

    p em{
    font-style: italic;
    font-weight: bold;
    }

      var footer = document.getElementsByTagName('footer')[0];
      footer.style.clear = 'left';
    footer.style.margin-left = '200px';
    </script>

</body>
</html>

 該当のソースコード

sample.html

<!DOCTYPE html>
<html lang = "ja">
<head>
    <meta charset= "utf-8">
    <title>サンプルページ</title>
    <link rel="stylesheet" href="sample.css" type="text/css" />
</head>

<body>
    <header>
    <h1>サンプルページ</h1>
    </header>

    <!-- menu -->
    <nav class ="dropdown">
        <h2>メニュー</h2>
        <ul>
            <li><a href ="no1.html">その1</a></li>
            <li><a href ="no2.html">その2</a></li>
            <li><a href ="no3.html">その3</a></li>
        </ul>
    </nav>

    <!-- main content -->
    <article>
    <h2>内容1</h2>
    <p>文章1</p>
    <br>
    <h2>内容2</h2>
    <p id = "paragraph1">行1
    <br>行2
    <br>行3</p>
    <br>
    <h3>内容3</h3>
    <p id = "paragraph2">行1
        <br>行2</p>
        <ul>
        <ol>
            <li>項目1</li>
            <li>項目2</li>
        </ol>
        </ul>

    <form>
    <h2>フォーム</h2>
        <div>
            <lavel>氏名:<input type="text" size="15" name="name"></lavel><br>
            <label>問い合わせ内容:<input type="text" size="20" name="question"></label><br>
            <input type="submit" value="submit">
        </div>
    </form>

    </article>


    <footer>
        <ul>
            <a href ="page1.html">他のページ1</a>
            <a href ="page2.html">他のページ2</a>
        </ul>
        <small>Copyright &copy; </small>
    </footer>

</body>
</html>


sample.css

header{
    height: 100px;
    text-align: center; 
}


body{
    line-height: 2.0;
}


nav{
    float: left;
    width: 200px;
}

.dropdown{
    position: relative;
    width: 190px;
}

.dropdown h2{
    text-align: center;
    background-color: #ffff58;
    margin: 0;
    padding: 12px 16px;
}

.dropdown ul{
    display: none;
    position: absolute;
    background-color: rgb(100, 100, 255);
    box-shadow: 0px 8px 16px rgba(0,0,0,0.2);
    list-style-type: none;
    margin: 0;
    padding: 0;
    z-index: 1;
}

.dropdown a{
    display: block;
    color: #000;
    padding: 12px 16px;
    text-decoration: none;
    width: 158px;
}

.dropdown a:hover{
    background-color: #555;
    color: #fff;
}

.dropdown:hover h2{
    background-color: rgb(100, 100, 255);
}

.dropdown:hover ul{
    display: block;
}

article{
    left-margin: 210px;
    float: left;
}



h1{
    margin: 15px;
    font-size: 3.0vw;
}


h3{
    text-decoration: underline;
}

/*訪問前後でリンクの文字色を指定*/
a:visited{
    color: rgb(255, 0, 0);
}

p em{
    font-style: italic;
    font-weight: bold;
}


footer {
    clear: left;
    margin-left: 200px; 
}

 補足情報(FW/ツールのバージョンなど)

ブラウザ:Google Chrome
Mac OS

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • x_x

    2018/06/07 15:39

    なぜこんなことをしているのでしょうか? インラインスタイルのみでは詳細度の概念がなくなってしまうため、同じことをしたいならdocument.styleSheetsをいじるべきかと思います。

    キャンセル

  • harunouta

    2018/06/08 07:32

    document.styleSheetsを扱う場合でも、innerHTMLは使用しないということになりますでしょうか。

    キャンセル

  • kei344

    2018/06/08 08:33

    回答が付いた質問の編集は慎重に行ってください。質問文のコードについて回答にて指摘があった場合は「追記」し、元のコードを編集する場合も「直したこと」がわかるようにしてください。

    キャンセル

  • harunouta

    2018/06/08 09:01

    問題が別途出てきたので一度こちらの質問はベストアンサーを選択させていただいた上で、質問として投稿させていただきます。

    キャンセル

回答 4

checkベストアンサー

+4

getElementsByTagName が HTMLCollection を返すため、header[0].styleというように要素ごとに処理を繰り返す必要があります。

【document.getElementsByTagName - Web API インターフェイス | MDN】
https://developer.mozilla.org/ja/docs/Web/API/Document/getElementsByTagName

与えられたタグ名を持つ要素の HTMLCollection を返します。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 21:39

    ご回答いただきましてありがとうございます。
    要素ごとに処理を繰り返す必要があることは理解できました。しかし、ご紹介いただいたWebページではCSSに関する例がなく、具体的に今回のコードをどのように修正すれば良いのかわからない状態です。
    お手数おかけしますが、よろしくお願いいたします。

    キャンセル

  • 2018/06/07 21:42

    getElementsByTagName で検索してみてください。

    【getElementsByTagName タグ名から要素を取得 | JavaScript中級編】
    https://wp-p.info/tpl_rep.php?cat=js-intermediate&fl=r3

    キャンセル

+2

なぜ、<script>タグの中にCSSを書いてるのでしょうか?

具体的な問題点が分からないので何とも言えませんが、
1つ言えることはdocument.getElementsByTagNameの戻り値は配列 HTMLCollection になりますので、

var nav = document.getElementsByTagName('nav');
nav.style.float = 'left';

こういうことはできません。
取得できた配列 HTMLCollection をループなどを使って、要素1つ1つに対してスタイルを当てていくか、
明らかに1つしか取得できないことが分かっているのであれば、
以下のようにしてもいいと思います。

var nav = document.getElementsByTagName('nav')[0]; // HTMLCollectionの1つ目を取得
nav.style.float = 'left';

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 15:32

    すみません、getElementsByTagNameの戻り値は、
    厳密に言うと配列(Array)ではなく kei344さんが言っている通りHTMLCollectionです。
    回答の内容をお詫びして訂正します。

    キャンセル

  • 2018/06/07 21:18

    ご回答いただきましてありがとうございます。
    <script>タグの中にCSSを書いている部分は、JavaScriptで書くときにどの様に変換すれば良いかわからない部分です。ご回答をいただいて、コードを修正してみたのですが、変更後のコードでも適用されていない様です。

    キャンセル

+2

function addStyleRule(selector, styleRule, style) {
    if (!style) {
        // HTML5
        style = document.head.appendChild(document.createElement('style'));
    }

    var sheet = style.sheet;
    sheet.insertRule(selector + '{' + styleRule + '}', sheet.cssRules.length);
    return style;
}

    var style;
    addStyleRule('header', 'text-align: center; height: 100px', style);
    addStyleRule('body', 'line-height: 2.0', style);
    // 以下略。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/06/07 21:24

    ご回答いただきましてありがとうございます。
    function addStyleRuleはhtmlの<function></function>内に書くのでしょうか。
    大変恐縮ですが、コードが何をしているのか理解できておりません。

    キャンセル

  • 2018/06/07 21:39

    JavaScriptなので、<script></script>です。
    スクリプトを扱ったことはないのでしょうか?

    キャンセル

+1

もう直接的な答えが出ていそうですが今後の参考に・・・
ブラウザの開発者ツールを使えばエラーが見れますよ。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.50%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

  • 解決済

    レスポンシブデザインについて

    この画像の上部の油そば池袋とありますが幅を小さくしていくと 赤枠の箇所に油そば池袋と入れたいのですがどうすればよろしいでしょうか <!DOCTYPE html> <html

  • 解決済

    HTMLで作成している検索ボックスの入力欄の高さを広げたいです。

    前提・実現したいこと HTMLで作成している検索ボックスの入力欄の高さを広げたいですが 広げることができません。 cssで設定しているのですが上手くいかないのでご教授いただけた

  • 解決済

    footerの下に余白があく

    前提・実現したいこと footerの下に余白があく。余白を0pxもあかないようにしたい。 発生している問題・エラーメッセージ 特にエラーは発生していない。 該当のソースコー

  • 受付中

    [CSS]floatが聞かず画像が隠れてしまいます...

    以下の画像のようにしたいのですが、floatが効かず画像が隠れてしまいます... 作成中の部分は「カートに登録しました」から上の「header」タグ内の部分です。 ] 以下は僕が作

  • 解決済

    Progateの「HTML & CSS 道場コース 初級編」の「フッターを作ろう」という問題について

    おはようございます。お世話になります。 Progateの「HTML & CSS 道場コース 初級編」の「フッターを作ろう」という問題です。 自分が書いたコードが見本のコード(=

  • 解決済

    JavaScript サイドバー追従が思うように行きません

    ※少々急ぎです。言葉足らずのところがあるかもしれませんが、 都度聞いていただければと思います お世話になっております。 表題についてです。 添付画像のようなレイアウトのwe

  • 解決済

    フッター下の余白を消したい

    いつもお世話になっております。 以前に似たような質問をしたのですが、違うページにて問題を解決できなかったため改めて質問させていただきました。 サイトのフッター下に微妙な余白がで

  • 解決済

    ヘッダーとフッターについて

    ヘッダー(背景:灰色) 影影影影影影影影影影影影 本文(背景) フッター(背景:灰色) このようなページを作りたいのですがdivを使えばいいのでしょうか?また、

同じタグがついた質問を見る

  • JavaScript

    16439questions

    JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

  • HTML

    8982questions

    HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

  • CSS

    5799questions

    CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

  • HTML5

    4022questions

    HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

  • Webサイト

    1079questions

    一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。