2017-10-24 9 views
2

フレックスボックス要素で「glossary」の種類を作成しようとしています。私は右の文字にスクロールするためのナビゲーションを持っています。フレックスボックス - "width-width"要素が不要なスペースの原因となる

問題があります: 各文字の最初の要素の前にアンカーリンクを配置しました。要素がwidth:0pxを持っていても不要なスペースが発生します。可視性:非表示;私はほとんどすべてを試したと思う...あなたが解決策を持っていることを願っています。

注意:この場合、anchor-linkをposition:absolute!に設定するオプションはありません。

*, *:before, *:after { 
 
\t padding: 0; 
 
\t margin: 0; 
 
\t border: 0; 
 
\t -webkit-box-sizing: border-box; 
 
\t -moz-box-sizing: border-box; 
 
\t box-sizing: border-box; 
 
} 
 

 
body { 
 
\t font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif; 
 
\t font-size: 14px; 
 
} 
 

 
.letters { 
 
\t background: #fff; 
 
\t border-bottom: 1px solid #ccc; 
 
\t text-align: center; 
 
\t padding: 10px; 
 
\t margin-bottom: 20px 
 
} 
 

 
.letters ul li { 
 
\t display: inline-block; 
 
\t height: 34px; 
 
\t line-height: 34px; 
 
\t list-style: outside none none; 
 
\t text-align: center; 
 
\t width: 34px; 
 
\t margin: 0 .27em; 
 
} 
 

 
.letters ul li a { 
 
\t background: #ad1800 none repeat scroll 0 0; 
 
\t border: 1px solid #ad1800; 
 
\t color: #fff; 
 
\t display: block; 
 
\t line-height: 32px; 
 
\t text-decoration: none; 
 
} 
 

 
.letter_around { 
 
\t list-style: none; 
 
\t padding: 20px 50px; 
 
\t position: relative; 
 
\t -webkit-flex-flow: row wrap; 
 
\t -moz-flex-flow: row wrap; 
 
\t flex-flow: row wrap; 
 
\t -webkit-justify-content: space-between; 
 
\t -moz-justify-content: space-between; 
 
\t justify-content: space-between; 
 
\t display: -webkit-box; 
 
\t display: -ms-flexbox; 
 
\t display: -webkit-flex; 
 
\t display: flex; 
 
} 
 

 
.glossary_item { 
 
\t padding: 15px 20px 20px; 
 
\t width: 22%; 
 
\t background: #fff; 
 
\t border: 1px solid #ccc; 
 
\t transition: 0.4s all; 
 
\t overflow: hidden; 
 
\t margin-bottom: 20px; 
 
} 
 

 
.glossary_letter { 
 
\t width: 0px; 
 
\t height: 0px; 
 
\t overflow: hidden; 
 
\t position: relative; 
 
\t visibility: hidden; 
 
}
<div class="wrapper glossary_wrapper"> 
 
    <div class="content clearfix"> 
 
    <div class="letters clearfix"> 
 
     <ul class="letters_ul"> 
 
     <li class="glossarylink"> 
 
      <a href="#A">A</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#B">B</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#C">C</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#D">D</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#E">E</a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    <div class="letter_around"> 
 
     <a class="glossary_letter" id="A" name="A"></a> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="B" name="B"></a> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="C" name="C"></a> 
 
     <div class="glossary_item"><span class="glossary-title">C - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="D" name="D"></a> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="E" name="E"></a> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
    </div> 
 
    </div> 
 
</div>

+0

を!はっきりしている? –

+0

アンカータグに '.glossary-letter'は必要ありません。セマンティクスについては、代わりに 'span'を使うことを検討してください。なぜここでは「ポジション:絶対」はできないのですか? – sol

+0

@rahulmr:スペースは、新しい手紙のすべての最初のボックスの前にあります。あなたは " A A A B B B B B B C D D E E"を得ています。あなたはニードルを見てください。 –

答えて

0

。それは私が推測する最良の解決策ではありませんが、それは正常に動作します。

フレックスボックスで計算されたスペースに、残っているパーセンテージの余白左のマイナス値を入力しました。だから私のケースでは、要素のwidhtは22%でした。この4倍は容器全体の幅の88%です。つまり、要素の計算されたマージンはコンテナの幅の約4%です。したがって、アンカー要素のマージンを4%減らすと、ボックスの正しい位置が得られます。

私はそれが最良の解決策ではないことを知っていますが、それは機能します。あなたがより良いものを手に入れたら、私に見せてください。:)

*, *:before, *:after { 
 
\t padding: 0; 
 
\t margin: 0; 
 
\t border: 0; 
 
\t -webkit-box-sizing: border-box; 
 
\t -moz-box-sizing: border-box; 
 
\t box-sizing: border-box; 
 
} 
 

 
body { 
 
\t font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif; 
 
\t font-size: 14px; 
 
} 
 

 
.letters { 
 
\t background: #fff; 
 
\t border-bottom: 1px solid #ccc; 
 
\t text-align: center; 
 
\t padding: 10px; 
 
\t margin-bottom: 20px 
 
} 
 

 
.letters ul li { 
 
\t display: inline-block; 
 
\t height: 34px; 
 
\t line-height: 34px; 
 
\t list-style: outside none none; 
 
\t text-align: center; 
 
\t width: 34px; 
 
\t margin: 0 .27em; 
 
} 
 

 
.letters ul li a { 
 
\t background: #ad1800 none repeat scroll 0 0; 
 
\t border: 1px solid #ad1800; 
 
\t color: #fff; 
 
\t display: block; 
 
\t line-height: 32px; 
 
\t text-decoration: none; 
 
} 
 

 
.letter_around { 
 
\t list-style: none; 
 
\t padding: 20px 10px; 
 
\t position: relative; 
 
\t -webkit-flex-flow: row wrap; 
 
\t -moz-flex-flow: row wrap; 
 
\t flex-flow: row wrap; 
 
\t -webkit-justify-content: space-between; 
 
\t -moz-justify-content: space-between; 
 
\t justify-content: space-between; 
 
\t display: -webkit-box; 
 
\t display: -ms-flexbox; 
 
\t display: -webkit-flex; 
 
\t display: flex; 
 
} 
 

 
.glossary_item { 
 
\t padding: 15px 20px 20px; 
 
\t width: 22%; 
 
\t background: #fff; 
 
\t border: 1px solid #ccc; 
 
\t transition: 0.4s all; 
 
\t overflow: hidden; 
 
\t margin-bottom: 20px; 
 
} 
 

 
.glossary_letter { 
 
\t width: 0px; 
 
\t height: 0px; 
 
\t overflow: hidden; 
 
\t position: relative; 
 
\t visibility: hidden; 
 
    margin-left: -4%; 
 
}
<div class="wrapper glossary_wrapper"> 
 
    <div class="content clearfix"> 
 
    <div class="letters clearfix"> 
 
     <ul class="letters_ul"> 
 
     <li class="glossarylink"> 
 
      <a href="#A">A</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#B">B</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#C">C</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#D">D</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#E">E</a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    <div class="letter_around"> 
 
     <a class="glossary_letter" id="A" name="A"></a> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="B" name="B"></a> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="C" name="C"></a> 
 
     <div class="glossary_item"><span class="glossary-title">C - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="D" name="D"></a> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="E" name="E"></a> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
    </div> 
 
    </div> 
 
</div>

0

最も簡単な解決策は

.glossary_letter { 
    display: none; 
} 

を追加することですだから、fisicallyになりますが、あなたの余分なスペースが消えます。

+1

これは簡単な解決策ですが、これはアンカーに機能がないことを引き起こします。だから私は今必要なものではありません。 –

0

[OK]を、別の方法を試してみてください、それがアンカーリンクの作業を続けて:

.glossary_letter { 
    flex: 0 0 100%; 
} 
+0

私はすでにこれを試しましたが、機能はありますが、スペースもそこに残っています... –

+0

@ F.Esserそれは本当に奇妙です:あなたのコードでこの解決策を試しました - そしてギャップは消えた –

+0

これは、それは文字の間に一種の休憩を設定します。それは要素が持っているべきではない動作だと思いますか? スペースを削除したいだけです... –

0

このソリューションは特にきれいではありません。理想的には、より多くの知識を持つ方がより良い解決策を提供します。

  1. .letter-around
  2. からjustify-contentプロパティを削除するには、項目間のスペースを作成するためにglossary-itemmargin-right: autoを追加します。
  3. nth-of-typeセレクタを使用して各グリッドの最後の項目をターゲットにし、余白を削除します。

私はspanaからglossary-letterを変更している、私はそれが意味的に、より理にかなっていると思います。また、CSSルールの一部を.glossary-itemからspanに移動しました。私自身のための解決策を見つけた

*, 
 
*:before, 
 
*:after { 
 
    padding: 0; 
 
    margin: 0; 
 
    border: 0; 
 
    -webkit-box-sizing: border-box; 
 
    -moz-box-sizing: border-box; 
 
    box-sizing: border-box; 
 
} 
 

 
body { 
 
    font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif; 
 
    font-size: 14px; 
 
} 
 

 
.letters { 
 
    background: #fff; 
 
    border-bottom: 1px solid #ccc; 
 
    text-align: center; 
 
    padding: 10px; 
 
    margin-bottom: 20px 
 
} 
 

 
.letters ul li { 
 
    display: inline-block; 
 
    height: 34px; 
 
    line-height: 34px; 
 
    list-style: outside none none; 
 
    text-align: center; 
 
    width: 34px; 
 
    margin: 0 .27em; 
 
} 
 

 
.letters ul li a { 
 
    background: #ad1800 none repeat scroll 0 0; 
 
    border: 1px solid #ad1800; 
 
    color: #fff; 
 
    display: block; 
 
    line-height: 32px; 
 
    text-decoration: none; 
 
} 
 

 
.letter_around { 
 
    list-style: none; 
 
    padding: 20px 50px; 
 
    position: relative; 
 
    -webkit-flex-flow: row wrap; 
 
    -moz-flex-flow: row wrap; 
 
    flex-flow: row wrap; 
 
    display: -webkit-box; 
 
    display: -ms-flexbox; 
 
    display: -webkit-flex; 
 
    display: flex; 
 
} 
 

 
.glossary_item { 
 
    transition: 0.4s all; 
 
    overflow: hidden; 
 
    margin-bottom: 20px; 
 
    width: 22%; 
 
    margin-right: auto; 
 
} 
 

 
.glossary_item span { 
 
    padding: 15px 20px 20px; 
 
    background: #fff; 
 
    border: 1px solid #ccc; 
 
    display: block; 
 
} 
 

 
.glossary_item:nth-of-type(4n) { 
 
    margin-right: 0; 
 
}
<div class="wrapper glossary_wrapper"> 
 
    <div class="content clearfix"> 
 
    <div class="letters clearfix"> 
 
     <ul class="letters_ul"> 
 
     <li class="glossarylink"> 
 
      <a href="#A">A</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#B">B</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#C">C</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#D">D</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#E">E</a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    <div class="letter_around"> 
 
     <span class="glossary_letter" id="A" name="A"></span> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <span class="glossary_letter" id="B" name="B"></span> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <span class="glossary_letter" id="C" name="C"></span> 
 
     <div class="glossary_item"><span class="glossary-title">C - Lorem ipsum dolor </span></div> 
 
     <span class="glossary_letter" id="D" name="D"></span> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <span class="glossary_letter" id="E" name="E"></span> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
    </div> 
 
    </div> 
 
</div>

+0

'glossary_item'に' margin:auto'、 'glossary_letter'に' margin:0'を使うことができます。私はそれが受け入れられた解決策でなければならないと信じています! –

+0

@IlyaStreltsyn入力いただきありがとうございます。この場合、「余裕:0」を得ることはできません。デモはありますか? – sol

0

justify-content: space-aroundを設定すると、基本的にすべてのフレックス項目(利用可能なスペースが左側に右側に均等に分配されるに左右の余白にautoを設定することと同じですそれらのそれぞれの)。そのため、利用可能なスペースの分布から、いくつかの項目を除外するために、あなたはjustify-contentを削除し、必要なだけのアイテムと同等の余白を設定することができます不要なスペースがどこにある

*, *:before, *:after { 
 
\t padding: 0; 
 
\t margin: 0; 
 
\t border: 0; 
 
\t -webkit-box-sizing: border-box; 
 
\t -moz-box-sizing: border-box; 
 
\t box-sizing: border-box; 
 
} 
 

 
body { 
 
\t font-family: Gotham, "Helvetica Neue", Helvetica, Arial, sans-serif; 
 
\t font-size: 14px; 
 
} 
 

 
.letters { 
 
\t background: #fff; 
 
\t border-bottom: 1px solid #ccc; 
 
\t text-align: center; 
 
\t padding: 10px; 
 
\t margin-bottom: 20px 
 
} 
 

 
.letters ul li { 
 
\t display: inline-block; 
 
\t height: 34px; 
 
\t line-height: 34px; 
 
\t list-style: outside none none; 
 
\t text-align: center; 
 
\t width: 34px; 
 
\t margin: 0 .27em; 
 
} 
 

 
.letters ul li a { 
 
\t background: #ad1800 none repeat scroll 0 0; 
 
\t border: 1px solid #ad1800; 
 
\t color: #fff; 
 
\t display: block; 
 
\t line-height: 32px; 
 
\t text-decoration: none; 
 
} 
 

 
.letter_around { 
 
\t list-style: none; 
 
\t padding: 20px 50px; 
 
\t position: relative; 
 
\t -webkit-flex-flow: row wrap; 
 
\t -moz-flex-flow: row wrap; 
 
\t flex-flow: row wrap; 
 
\t display: -webkit-box; 
 
\t display: -ms-flexbox; 
 
\t display: -webkit-flex; 
 
\t display: flex; 
 
} 
 

 
.glossary_item { 
 
\t padding: 15px 20px 20px; 
 
\t width: 22%; 
 
\t background: #fff; 
 
\t border: 1px solid #ccc; 
 
\t transition: 0.4s all; 
 
\t overflow: hidden; 
 
\t margin: auto; 
 
\t margin-bottom: 20px; 
 
} 
 

 
.glossary_letter { 
 
\t width: 0; 
 
\t margin: 0; 
 
}
<div class="wrapper glossary_wrapper"> 
 
    <div class="content clearfix"> 
 
    <div class="letters clearfix"> 
 
     <ul class="letters_ul"> 
 
     <li class="glossarylink"> 
 
      <a href="#A">A</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#B">B</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#C">C</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#D">D</a> 
 
     </li> 
 
     <li class="glossarylink"> 
 
      <a href="#E">E</a> 
 
     </li> 
 
     </ul> 
 
    </div> 
 
    <div class="letter_around"> 
 
     <a class="glossary_letter" id="A" name="A"></a> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">A - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="B" name="B"></a> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">B - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="C" name="C"></a> 
 
     <div class="glossary_item"><span class="glossary-title">C - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="D" name="D"></a> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">D - Lorem ipsum dolor </span></div> 
 
     <a class="glossary_letter" id="E" name="E"></a> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
     <div class="glossary_item"><span class="glossary-title">E - Lorem ipsum dolor </span></div> 
 
    </div> 
 
    </div> 
 
</div>

関連する問題