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

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

ただいまの
回答率

90.61%

  • JavaScript

    15966questions

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

  • HTML

    8693questions

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

  • CSS

    5593questions

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

  • HTML5

    3888questions

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

  • Webサイト

    1047questions

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

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

解決済

回答 2

投稿

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

harunouta

score 82

 前提・実現したいこと

innerHTML,CSSを使わずに、HTMLとJavaScriptだけでWebページを書こうとしています。
前回の質問でご回答をいただいた上で、発生している問題が変化したので
再度質問させていただきます。
前回の質問

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

HTMLとJavaScriptを組み合わせたコード(samplejs.html)で
該当のソースコード(sample.htmlとsample.css)で表示するものと同じページを表示させたいです。
しかし、以下の2点で問題があり、同じページは表示できていない状態です。
どのように修正すれば良いかアドバイスをいただきたいです。

var header = document.getElementsByTagName('header');
    for (var i = 0; i < header.length; i++) {
    header[i].style['text-align'] = 'center';  //header .style['text-align']?
    header[i].style.height = '100px';
    }


      var body = document.getElementsByTagName('body');
      for (var i = 0; i < body.length; i++) {
      body[i].style.line-height = '2.0';
      }


具体的には、上記の部分でvar bodyを追加すると、var headerの設定が表示されなくなってしまうという問題に直面しています。

また、HTMLの以下の部分にあたり

<nav class ="dropdown">

CSSで以下の様に

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;
}


と設定した部分に関しては、以下の様にdocument.getElementsByTagNameで取得できるのか、

      var .dropdown ul = document.getElementsByTagName('.dropdown ul');

もしくは他のメソッドを使用する方法があるのか調べてもわからなかったため、
JavaScriptでWebページの装飾を各部分でもCSSのままで記述してあります。

該当のソースコード

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');
    for (var i = 0; i < header.length; i++) {
    header[i].style['text-align'] = 'center';  //header .style['text-align']?
    header[i].style.height = '100px';
    }

      var body = document.getElementsByTagName('body');
      for (var i = 0; i < body.length; i++) {
      body[i].style.line-height = '2.0';
      }

    var nav = document.getElementsByTagName('nav');
    for (var i = 0; i < nav.length; i++) {
      nav[i].style.float = 'left';
    nav[i].style.width ='200px';
      }    


    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';  


      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ページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

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

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

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

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

    詳細な説明はこちら

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

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

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

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

  • キャンセル

  • sousuke

    2018/06/08 09:50

    なんらかの要因でCSSを配置できないかCSSを適応できずに…ってところでしょうか?これをしなければいけない理由は私も聞きたいです。詳細度がわかったとしてもコードが複雑過ぎて申し訳ないが質問者さんの技量では別の問題でまた質問にきそうです。

    キャンセル

  • harunouta

    2018/06/08 09:57

    かしこまりました。どれくらい難しいのか理解できておらず、方針を変えます。

    キャンセル

回答 2

+3

// body[i].style.line-height = '2.0';
// ↓
   body[i].style['line-height'] = '2.0';

調べてもわからなかったため、

Webの情報は「体系立てた情報」で無いことが多いので、一度本屋で何冊か本を買って読むと言う方法が良いと思います。

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

【querySelector CSSセレクタで要素を取得 | JavaScript中級編】
https://wp-p.info/tpl_rep.php?cat=js-intermediate&fl=r4

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

checkベストアンサー

+2

今回の問題の直接的な回答ではないことを先に述べさせていただきます。

innerHTML,CSSを使わずに、HTMLとJavaScriptだけでWebページを書こうとしています。

ということであれば、一つ一つの要素のstyleにjsでセットすると管理も面倒なので、
動的にスタイルシートを生成(document.createElement("style"))し、insertRule(IEの場合addRule)していくというアプローチのほうが、既存のCSSからの移植性も高く、管理もCSSと同じ考え方でいけます。いかがでしょうか。

var style = document.createElement("style");
style.setAttribute("type", "text/css");
document.getElementsByTagName("head")[ 0 ].appendChild(style);
style.sheet.insertRule('header {height: 100px; text-align: center;}', 0);
style.sheet.insertRule('a:visited {color: rgb(255, 0, 0);}', 0);


上記が基本コードとなります。シンプルです。
スタイルの定義方法はCSSの文字列がそのまま使えます。
あとはこれをモジュール化し、IEに対応させたり、削除もできるようにしたりと、さらなる高機能化が目指せます。

参考URL:
https://developer.mozilla.org/ja/docs/Web/API/CSSStyleSheet/insertRule
https://www.npmjs.com/package/insert-rule

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

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

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

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

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

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

関連した質問

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

  • JavaScript

    15966questions

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

  • HTML

    8693questions

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

  • CSS

    5593questions

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

  • HTML5

    3888questions

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

  • Webサイト

    1047questions

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