@kencellarafood

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

CSS・画像の中央配置を教えていただきたいです。

解決したいこと

CSSで画像の中央配置が上手くできません…。
#cotents の内部にある.contents-imageと.contents-textを中央揃えのwidth50%でそれぞれ配置したいです。

#contents .contents-textの中に「padding: 0 7%」を記述すると、どうしても50%というものが崩れてしまいます。

お力添えいただけると幸いです。
本当に初心者で何もわからず、申し訳ないです…。

現状のコード(HTML)

 <main class="container">
            <!--contents-->
            <div id="contents">
                <div class="contents-image">
                    <img src="img/concept.jpg" alt="">
                </div>
                
                <div class="contents-text">
                    <h2 class="title">私たちの考えるジュエリーとは</h2>
                    <p class="sub-title">Concept</p>
                    <p>シンプルで美しい雑貨を作ります。日常に溶け込むような、優しい感覚のジュエリーが一番ですね。</p>
                </div>
            </div>

            <div id="contents">
                <div class="contents-text">
                    <h2 class="title">ハンドメイドにこだわる理由</h2>
                    <p class="sub-title">work</p>
                    <p>身体に優しく、自然体になじむジュエリーを目指して制作しています。皆さんの丁寧な生活に添えて。</p>
                </div>
                
                <div class="contents-image">
                    <img src="img/work.jpg" alt="">
                </div>
            </div>
            
        </main>

現状のコード(CSS)


.container {

    max-width: 1000px;
    margin: 0 auto;
}

#contents {
    margin-bottom: 60px;
    display: flex;
    justify-content: center;
    align-items: center;

}

#contents .contents-text {
    width: 50%;
    padding: 0 7%;
    
}

#contents .contents-image {
    width: 50%;
}

現状の実装画面

スクリーンショット 2023-12-05 162326.png

目的の実装画面

スクリーンショット 2023-12-05 162338.png

0 likes

2Answer

(id="contents"が二つある…)

display: flex;は各要素を画面サイズなどに応じてそれなりにいい感じに並べることを目指しているため、位置を揃えて並べたりするのには向いていません。
そういうレイアウトをしたいならdisplay: grid;を使った方が楽でしょう。

1Like

Comments

  1. @kencellarafood

    Questioner

    ありがとうございます!glidで何とかできそうです・・・。

【問題が発生する原因】
「50%」は親要素に対する値になりますが、親要素は「display: flex;」であるため、
幅を指定できない。

【解決策】
無理やりな方法ですが、以下のような順で修正できます。
①「container」に幅を指定する。今回は横幅に合わせて自動調整される「vw」を単位に使用。左右に50pxの隙間を想定
②「display: flex;」の子要素に、その半分になる長さを適用

【完成イメージはこちら】
https://codepen.io/masa_mf3/pen/NWoedNw

【補足】
「id」はHTML上で一度しか用いられないため、以下のように「contents」を「class」に修正してます。

index.html
 <main class="container">
     <!--contents-->
-    <div id="contents">
+    <div class="contents">
         <div class="contents-image">
             <img src="https://magblog-media-prd.yamap.com/wp-content/uploads/2022/12/01215858/kumanorekishi_01_221201_00.jpg" alt="">
         </div>

         <div class="contents-text">
             <h2 class="title">私たちの考えるジュエリーとは</h2>
             <p class="sub-title">Concept</p>
             <p>シンプルで美しい雑貨を作ります。日常に溶け込むような、優しい感覚のジュエリーが一番ですね。</p>
         </div>
     </div>

-    <div id="contents">
+    <div class="contents">
         <div class="contents-text">
             <h2 class="title">ハンドメイドにこだわる理由</h2>
             <p class="sub-title">work</p>
             <p>身体に優しく、自然体になじむジュエリーを目指して制作しています。皆さんの丁寧な生活に添えて。</p>
         </div>

         <div class="contents-image">
             <img src="https://64.media.tumblr.com/f8da19fafdb89b4a3c80e3a20ae90b28/tumblr_inline_oc9mgiSfsg1tyz422_640.jpg" alt="">
         </div>
     </div>
</main>
style.css
.container {
    max-width: 1000px;
    margin: 0 auto;
+   width: calc(100vw - 100px);
}

.contents {
    margin-bottom: 60px;
    display: flex;
    justify-content: center;
    align-items: center;
}

.contents .contents-text {
-   width: 50%;
+   width: calc(50vw - 50px);
    padding: 0 7%;
}

-.contents .contents-image {
-    width: 50%;
-}

+.contents .contents-image img {
+    width: calc(50vw - 50px);
+}

0Like

Comments

  1. @kencellarafood

    Questioner

    ご丁寧にありがとうございます。力業が凄いです…、憧れます。何とかできそうです!

Your answer might help someone💌