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

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

新規登録して質問してみよう
ただいま回答率
85.48%
HTML

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

CSS

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

Q&A

解決済

1回答

1030閲覧

スマホ向けレイアウトが崩れるので正常に表示させたい。

_505turkish

総合スコア6

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/11/29 14:26

編集2020/11/30 03:09

前提・実現したいこと

【前提】
ProgateでHTML/CSSを学習中です。
現在、復習のためにProgateの演習で作成したサイトの模写コーディングを行っています。
・演習で作成したサイト→https://turkey505.github.io/yd/

上記URLの模写を行っています。
スマホ表示対応させようと演習の手順の記載通り”.btnのwidthを100%”に指定したところ、スマホ表示時のレイアウトが崩れてしまいます(登録ボタンが引き延ばされすぎて、ページ右側に余白ができる)。
演習の時点では.btnのwidthを100%に指定してもレイアウトが崩れることはありませんでした。

【問題解決のために試した事】
.btnのwidthを100%以下に指定すればページ右側の余白は解消しますが、それでは根本的な解決には至ってないと思われます。

【実現したいこと】
演習時点では上記で述べた現象が起きなかったが、模写コーディンングの時点で上記の現象が起き、困惑しています。演習の手順通りに作業を進めているのにこの様な現象が起きるのは何故でしょう?
そしてこの問題の解決策を教えて頂けますでしょうか?

↓イメージがResponsive.cssにて.btnのwidthを100%に指定した際のスマホ表示のページ。ボタンアイコン3つがトップ画像からはみ出し、右に余白が作られてしまい、レイアウトが崩れてしまう。
誤表示
↓イメージの様に登録ボタンの過剰な引き伸ばしを解消し、ページ右側に余白を作らずに正常な表示をさせたい
正常な表示

該当のソースコード

【index.html】 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1"> <title>Prog8</title> <link rel="stylesheet" href="stylesheet.css"> <link rel="stylesheet" href="responsive.css"> <link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.15.1/css/all.css" integrity="sha384-vp86vTRFVJgpjF9jiIGPEEqYqlDwgyBgEF109VFjmqGmIY/Y4HV4d3Gp2irVfcrp" crossorigin="anonymous"> <script src="https://kit.fontawesome.com/e95c4cdf47.js" crossorigin="anonymous"></script> </head> <body> <header> <div class="container"> <div class="header-left"> <img class="logo" src="img/main_logo.png"> </div> <span class="menu-icon"><i class="fa fa-bars"></i></span> <div class="header-right"> <a href="#">レッスン</a> <a href="#">新規登録</a> <a href="#" class="login">ログイン</a> </div> </div> </header> <div class="top-wrapper"> <div class="container"> <h1> LEARN TO CODE. <br> LEARN TO BE CREATIVE. </h1> <p>Progateはオンラインプログラミング学習サービスです。 <br> 初心者にもやさしいスライドとレッスンで、ウェブサービスを作りながらプログラミングを学んでいきましょう。</p> <div class="btn-wrapper"> <a href="#" class="btn signup"> 新規登録はこちら</a> <p>or</p> <a href="#" class="btn facebook"> <span class="fa fa-facebook"></span> Facebookで登録 </a> <a href="#" class="btn twitter"> <span class="fa fa-twitter"> Twitterで登録 </a> </div> </div> </div> <div class="lesson-wrapper"> <div class="container"> <div class="heading"> <h2>Learn Where to Get Started!</h2> </div> <div class="lessons"> <div class="lesson"> <div class="lesson-icon"> <img src="img/html.png"> <p>HTML&CSS</p> </div> <p class="text-contents">ウェブページの作成に使用される言語です。HTMLとCSSを組み合わせることで、静的なページを作り上げることができます。</p> </div> <div class="lesson"> <div class="lesson-icon"> <img src="img/jQuery.png"> <p>jQuery</p> </div> <p class="text-contents">素敵な動きを手軽に実装できるJavaScriptライブラリです。 アニメーション効果をつけたり、Ajax(エイジャックス)を使って外部ファイルを読み込んだりと色々なことができます。</p> </div> <div class="lesson"> <div class="lesson-icon"> <img src="img/ruby.png"> <p>Ruby</p> </div> <p class="text-contents">オープンソースの動的なプログラミング言語で、 シンプルさと高い生産性を備えています。大きなWebアプリケーションから小さな日用ツールまで、さまざまなソフトウェアを作ることができます。</p> </div> <div class="lesson"> <div class="lesson-icon"> <img src="img/php.png"> <p>PHP</p> </div> <p class="text-contents">HTMLだけではページの内容を変えることはできません。PHPはHTMLにプログラムを埋め込み、それを可能にします。</p> </div> </div> </div> </div> <div class="message-wrapper"> <div class="container"> <div class="heading"> <h2>さぁ、あなたもProgateでプログラミングを学んでみませんか?</h2> <h3>Let's learn to code, learn to be creative!</h3> </div> <span class="btn message">さっそく開発する</span> </div> </div> <footer> <div class="container"> <img src="img/footer_logo.png"> <p>Learn to Code, Learn to be Creative.</p> </div> </footer> </body> </html> 【stylesheet.css】 body { margin: 0; font-family: "Hiragino Kaku Gothic ProN"; } a { text-decoration: none; } .container { width: 100%; margin: 0 auto; } header { height: 65px; width: 100%; background-color: rgba(34,49,52,0.9); position: fixed; top: 0; z-index: 10; } .logo { width: 124px; margin-top: 20px; margin-left: 15px; } .header-left { float: left; } .header-right { float: right; margin-left: 10px; } .header-right a { line-height: 65px; padding: 0 25px; color: white; display: block; float: left; transition: all 0.5s; } .header-right:hover { background-color: rgba(255, 255, 255, 0.5); } .menu-icon { color: white; float: right; font-size: 25px; padding: 21px 0; display: none; } .top-wrapper { padding: 180px 0 100px 0; background-image: url(img/top.png); color: white; background-size: cover; text-align: center; } .top-wrapper h1 { opacity: 0.7; font-size: 45px; letter-spacing: 5px; } .top-wrapper p { opacity: 0.7; font-size: 16px; margin-bottom: 40px; } .btn { padding: 8px 24px; color: white; display: inline-block; opacity: 0.8; border-radius: 4px; text-align: center; } .signup { background-color: #239b76; } .btn-wrapper p { margin-bottom: 20px; } .facebook { background-color: #3b5998; margin-right: 10px; } .twitter { background-color: #55acee; } .lesson-wrapper { height: 580px; padding-bottom: 80px; padding-left: 5%; padding-right: 5%; background-color: #f7f7f7; text-align: center; } .heading { padding-top: 80px; padding-bottom: 50px; color: #5f5d60; } .heading h2 { font-weight: normal; } .lesson { float: left; width: 25%; } .lesson-icon { position: relative; } .lesson-icon p { position: absolute; top: 37%; width: 100%; color: white; } .text-contents { width: 80%; display: inline-block; margin-top: 15px; font-size: 13px; color: #b3aeb5; } .message-wrapper { border-bottom: 1px solid #eee; padding-bottom: 80px; text-align: center; } .heading { padding-top: 80px; padding-bottom: 50px; color: #5f5d60; } .heading h2 { font-weight: normal; } .heading h3 { font-weight: normal; } .message { padding: 15px 40px; background-color: #5dca88; cursor: pointer; box-shadow: 0px 7px #1a7940; } .message:hover { filter: brightness(1.10); } .message:active { box-shadow: none; position: relative; top: 7px; } footer { padding-top: 30px; padding-bottom: 20px; margin-left: 15px; } footer img { width: 125px; } footer p { color: #b3aeb5; font-size: 12px; } 【responsive.css】 /* tab */ @media (max-width: 1000px) { .lesson-wrapper { height: 990px; } .lesson { width: 50%; margin-bottom: 50px; } } /* sp */ @media (max-width: 670px) { .lesson-wrapper { height: 1700px; } .lesson { width: 100%; } footer { text-align: center; } .btn { width: 100%; } }

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

使用機器:Dynabook 15インチ
使用ブラウザ:Chrome
使用エディタ:Visual Studio Code

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2020/11/29 19:44

cssだけでは再現できません。 他者がコピペで再現できる情報を全てご提示ください。
_505turkish

2020/11/30 03:09

ご指摘ありがとうございます。 加筆修正しました。
guest

回答1

0

ベストアンサー

こんにちは。

問題は、「登録ボタンが引き延ばされすぎて、ページ右側に余白ができる」について、という理解でいいですか?

それであれば、width: 100% padding: 8px 24pxとなっているので、親要素より大きくなる指定をしているのが原因です。

css

1.btn { 2 box-sizing: border-box; 3}

要素に割り当てられた width および height は、要素のコンテンツ領域のみに適用されます。要素に境界線やパディングがある場合、画面にレンダリングされる矩形の大きさは width および height にこれらを加えたものになります。つまり、 width および height を設定する際には、境界線やパディングが加えられるように値を調整しなければなりません。

box-sizing - CSS: カスケーディングスタイルシート | MDN

投稿2020/11/30 03:54

Lhankor_Mhy

総合スコア36089

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

_505turkish

2020/11/30 04:16

回答ありがとうございます。解決しました。 問題の原因についても述べて頂きありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問