2017-06-08 6 views
1

私は文書の幅で単純に切り抜く背景画像として擬似要素を入れようとしています。しかし、背景イメージを置くと、ドキュメントの幅が広がり続け、他のdivが実際に広くなります。擬似要素が他の要素の幅を変更しないようにする方法はありますか?

具体的には、スクリーンショットからナビが擬似要素の背景画像に対応するように幅を拡張していることがわかります。

私の試み:enter image description here

私はそれが行わ見られますが、実際の擬似要素のコードが同じであるとして違いは、何であるかないですしました。例: enter image description here

HTML:

<nav class="navbar navbar-default navbar-fixed-top navbar-custom"> 
     <div class="container nav-down"> 
      <div class="navbar-header page-scroll"> 
       <a class="navbar-brand" href="/"><img src="/static/ScoopsLogo.png" alt="${out.global.siteName} Logo"></a> 
       <p class="navbar-blog"><a href="https://blog.scoops.io/">Blog</a></p> 
      </div> 
     </div> 
     <div id="scroll-progress"> 
      <div id="scroll-progress-bar"></div> 
     </div> 
    </nav> 
    <section id="home"> 
     <div class="home-1"> 
      <div class="home1-1"> 
      <h1>Sound smart at the dinner table</h1> 
      <h5>Learning made easy & fun</h5> 
      </div> 
     </div> 
     <div class="home-lessons fade-in-up-static delay-2"> 
      <!-- List of Lessons --> 
      <h5 class="text-center">NEW SCOOPS</h5> 
      <div class="lessons-list"> 
      </div> 
     </div> 
    </section> 

CSS:子要素はtop: 0left: 0を使用しながら、

.navbar { 
    min-height: 50px; 
    margin-bottom: 20px; 
} 
.navbar-default { 
    background-color: #f8f8f8; 
    border-color: #e7e7e7; 
} 
.navbar-fixed-top { 
    top: 0; 
    border-width: 0 0 1px; 
} 
.container { 
    max-width: 600px; 
} 
.navbar-custom { 
    .navbar-header { 
     width: inherit; 
     max-width: inherit; 
    } 
    .navbar-brand { 
     img { 
      width: auto; 
      height: 100%; 
     } 
    } 
    .navbar-blog { 
     float: right; 
     padding: 10px; 
     margin: 3px 10px 0 0; 
    } 
} 
.home-lessons { 
    width: 100%; 
    padding: 3%; 
    @media (min-width: $screen-md-min) { 
     margin-bottom: 20px; 
     padding: 20px 40px; 
    } 
    h5 { 
     margin-top: -100px; 
    } 
    &::before { 
     content: ''; 
     background-image: url(/static/Scoops-Icons.png); 
     background-size: cover; 
     width: 500px; 
     height: 500px; 
     display: block; 
     position: absolute; 
     margin-left: 200px; 
     margin-top: -200px; 
    } 
    } 

答えて

1

私はちょうどyou put a bounty on over hereことを非常によく似た質問に答えました。この場合、あなたの最善の策は、あなたのバックグラウンドを持つ擬似要素の最大幅を強制するか、overflow-xをドキュメントにドロップすることです。以下は

修正して、あなたのCSSのsnipperです:

.home-lessons { 
    width: 100%; 
    padding: 3%; 
    @media (min-width: $screen-md-min) { 
     margin-bottom: 20px; 
     padding: 20px 40px; 
    } 
    h5 { 
     margin-top: -100px; 
    } 
    &::before { 
     content: ''; 
     background-image: url(/static/Scoops-Icons.png); 
     background-size: cover; 
     width: 500px; 
     height: 500px; 
     display: block; 
     position: absolute; 
     margin-left: 200px; 
     margin-top: -200px; 
     max-width: calc(100% - 200px); /* HERE IS THE FIX */ 
    } 
} 

それが機能しなかった場合は、簡単な修正は、このために行くだろう:

html { 
    overflow-x: hidden; 
} 

私が見てきましたCSSセレクタとしてhtml, bodyを使用することで、少し過度に使用される人もいますが、これはあなた次第です。

+0

Fritsありがとうございます。自分自身と他の人を明確にするために、なぜhtml/bodyをoverflow-x:hiddenのCSSセレクタとして使用するのが簡単な修正と過度なのですか?そして、単純に擬似要素の親ではなくそれらのセレクタでなければなりません。 – Chris

+1

こんにちは@Chris。それはあなたの体が 'overflow-x:hidden;を持っているならば、特に横に並んだウェブサイトを持っていなければ、' html'を越えてはならないからです。あなたの2番目の質問に関しては、親要素に 'overflow-x:hidden'を置いたほうがよいでしょうが、あなたの親要素があなたの疑似要素で到達しようとしている領域より小さくない場合に限ります。しばしば、擬似要素上のスタイリングは、意図的に親要素を越えて突き出るように行われるが、依然として文書のサイズを確認する必要がある。それは役に立ちますか? :) – Frits

+1

@Chris - [あなたの恩恵の質問](https://stackoverflow.com/a/44457687/6049581)を見て忘れないでください - 質問は同じように見えますが、私に知らせてください私はそこに何かを残しました:) – Frits

-1

親要素がposition: relativeを使用する必要があります。このよう

.parent { 
    position: relative; 
} 
.child { 
    top: 0; 
    left: 0; 
} 
+0

試してみました - position:要素の相対、top:0、left:0 on pseudo。それでもページの幅を広げる。オーバーフロー:隠された;しかし、私はマスクしたくない別の子divをマスクします。 – Chris

関連する問題