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

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

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

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

CSS

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

Q&A

解決済

1回答

874閲覧

htmlの装飾でcssが効かない

nguyenseiji

総合スコア156

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/08/02 11:34

編集2020/08/02 13:10

PHPの中にhtmlのid属性で指定したものを別のファイルに記載したcssファイルを使って装飾を
したいのですが反映されず困っています

3か所反映させていのですが
1か所は反映されていますので問題なくcssはインクルードできております
『反映した場所』
print '<img id="image1" src="../image/'.$rec["image1"].'">';

『反映していない場所』
print '<span id="ti">'.$rec["tittle"].'</span>';
print '<span id="price">'.$rec["price"].'円</span>';

html

1 <?php 2 3 try{ 4 ini_set('display_errors', "On"); 5 6 $sql = "SELECT * FROM hagoli"; 7 8 $stmt = $dbh->query($sql); 9 10 foreach($stmt as $rec){ 11 12 print '<span id="ti">'.$rec["tittle"].'</span>'; 13 14 print '<span id="price">'.$rec["price"].'円</span>'; 15 16 print '<img id="image1" src="../image/'.$rec["image1"].'">'; 17 18 19 20 21 } 22 23 24 25}catch(PDOException $e){ 26 print "表示エラー"; 27 print "<br>"; 28 die($e->getMessage()); 29 } 30 31 32?>

#image1は問題なく反映しました

css

1#image1{ 2 width: 250px; 3 height: 250px; 4 object-fit: cover; 5 6}#ti{ 7 8 margin-top: 100px; 9 10}#price{ 11 12margin-top: 50px; 13 14 15 16}

実装したいのは画像にあるお姉さんの画像とPHP参考書1000円を
水色で囲ったところに持ってきたいです
イメージ説明

イメージ説明

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

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

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

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

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

guest

回答1

0

ベストアンサー

spanは、インライン要素なので、左右marginのみ有効です。

もし、margin-top を有効にしたいなら、divタグにしてください。
ただし、divにすると改行されてしまいます。

インライン要素=改行されない要素に margin-top を設定する意味がないですよね。
具体的にどのようなレイアウトにしたいのかを具体的に説明されるといいでしょう。


質問にレイアウト画像が追加されたので、それに対しての追記です。

まず、下記のようなHTMLが出力されるようにPHPを組んでください。

html

1<div class="container"> 2 <div class="product"> 3 <img class="image1" src="https://placehold.jp/250x250.png"> 4 <div class="ti">商品1</div> 5 <div class="price">100円</div> 6 </div> 7 <div class="product"> 8 <img class="image1" src="https://placehold.jp/250x250.png"> 9 <div class="ti">商品2</div> 10 <div class="price">200円</div> 11 </div> 12 <div class="product"> 13 <img class="image1" src="https://placehold.jp/250x250.png"> 14 <div class="ti">商品3</div> 15 <div class="price">300円</div> 16 </div> 17 <div class="product"> 18 <img class="image1" src="https://placehold.jp/250x250.png"> 19 <div class="ti">商品4</div> 20 <div class="price">400円</div> 21 </div> 22</div>
  • 一つの商品を productクラスのdivタグで囲む。
  • 商品名と価格はdivタグで囲む。
  • imgタグはdivタグの前に置く。
  • 全体を containerクラスのdivタグで囲む。

CSSは下記のように設定してください。

css

1.container { 2 display: flex; /* 子要素を横並びにする */ 3 flex-wrap: wrap; /* 折り返しを許可する */ 4} 5.product { 6 margin: 10px; 7} 8.image1{ 9 width: 250px; 10 height: 250px; 11 object-fit: cover; 12} 13.ti{ 14 15} 16.price{ 17 18}

Codepenサンプル

投稿2020/08/02 11:56

編集2020/08/02 12:43
hatena19

総合スコア33715

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

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

nguyenseiji

2020/08/02 12:05

データーベースから foreachでタイトルと画像と価格を取得しているのですが ECサイトのようなデザインにしたくて 画像の下にタイトルその下に価格を表示したいのです
nguyenseiji

2020/08/02 12:05

横にどんどん商品を並べていく感じです
hatena19

2020/08/02 12:17 編集

「ECサイトのようなデザイン」のようなデザインといわれてもいろいろなECサイトがありますので、画像でご希望のレイアウトを提示できませんか。 あと、PHPではなく出力されるHTMLコードを提示したほうが回答がつきやすいと思います。 さらに、id は一つの文書内で重複は許されません。複数の商品を並べるなら、classで指定しないとダメですよ。
nguyenseiji

2020/08/02 12:22

失礼しました 画像の方追加しましたのでご参考にお願いいたします idの重複はできないのですね?! ありがとうございます classに変更します
nguyenseiji

2020/08/02 12:24

htmlコードは上記に記載のコードがすべてになります
nguyenseiji

2020/08/02 13:09

ありがとうございます 作って頂いたサンプルコードなのですが データーベースにある商品数だけ動的に商品を横に並べるため 一度、試してみたのでがうまくforeachを使って商品がmysqlに登録されている 分だけ表示する事ができませんでした ですが下記のサイトを参考に一応横並びは成功したので記載させて頂きます。 頂いたサンプルコードですがforeachなどを使った場合でも使用できるのでしょか? 自分で為してみたのですがどうしてもうまくできず... 別の方法になってしまいますが成功はしたので記載させて頂きます 参考サイト->https://cc.musabi.ac.jp/kenkyu/cl1/html5/css_lay01.html
nguyenseiji

2020/08/02 13:09

<?php try{ ini_set('display_errors', "On"); $sql = "SELECT * FROM hagoli"; $stmt = $dbh->query($sql); foreach($stmt as $rec){ print '<figure class="gazo-box">'; print '<img class="image1" src="../image/'.$rec["image1"].'">'; print '<br>'; print '<span class="ti">'.$rec["tittle"].'</span>'; print '<br>'; print '<span class="price">'.$rec["price"].'円</span>'; print '</figure>'; } }catch(PDOException $e){ print "表示エラー"; print "<br>"; die($e->getMessage()); } ?>
nguyenseiji

2020/08/02 13:09

.image1{ width: 250px; height: 250px; object-fit: cover; }.ti{ margin-top: 100px; }.price{ margin-top: 50px; }figure.gazo-box{ margin-left: 50px; float: left; }
nguyenseiji

2020/08/02 13:12

頂いたコードですが foreachを使ってデーターにある分だけ動的に商品を増やせる 場合はすいません... ごしきてき頂けると助かりますm
hatena19

2020/08/02 13:13

主さんが提示しているのはPHPコードです。私の提示したのはHTMLコードです。 PHPを実行するとHTMLコードが出力されます。(HTMLには foreach はありません。) 私が提示したHTMLコードが出力できるようにPHPコードを記述してください。
hatena19

2020/08/02 14:06 編集

主さんがコメントに提示したコードでも一応横並びにはなるので、別にいいのですが、 float: left; で横並びにするのは古い手法です。現在は私の提示した display: flex; を使う方法か主流です。 その辺は興味があったら、調べてみてください。 例えば、 FloatとFlexboxについて - Qiita https://qiita.com/koseiinfratop/items/d569b019823a1c00fae2
hatena19

2020/08/02 13:28

いちおうPHPコード <?php try{ ini_set('display_errors', "On"); $sql = "SELECT * FROM hagoli"; $stmt = $dbh->query($sql); print '<div class="container">'; foreach($stmt as $rec){ print '<div class="product">'; print '<img class="image1" src="../image/'.$rec["image1"].'">'; print '<div class="ti">'.$rec["tittle"].'</div>'; print '<div class="price">'.$rec["price"].'円</div>'; print '</div>'; } print '</div>'; }catch(PDOException $e){ print "表示エラー"; print "<br>"; die($e->getMessage()); } ?>
nguyenseiji

2020/08/02 13:43

そうだったんですね! あやうく古い手法で記載しるところでした ありがとうございます サイトの方も読ませていただきます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問