2016-11-02 4 views
4

罫線が表示され、強調表示されるように、指定された一般的なHTML要素の罫線に印を付けようとしています(そのCSSは自分の制御下にありません)ホバーオン。擬似要素の余白を無視する前または後:

私は現在、擬似要素を使用しています。これを達成するためにbeforeと:afterを使用していますが、余白に苦労しています。 JSではなく、CSSを使用する必要があります。

任意の2つの要素間に1行しかないのが目的ですが、余白があるため、段落「一部のコンテンツ」と「World」という見出しの間に罫線が重複して表示されます。

以下のスニペットに示すように、マーカークラスをラップdivに適用することも、クラス要素に直接適用することもできます。両方ともOKです。

.mark-borders:before, 
 
.mark-borders:after 
 
{ 
 
    content: ''; 
 
    position: absolute; 
 
    left: 0; 
 
    right: 0; 
 
    display: block; 
 
    height: 1px; 
 
    border-bottom: dashed 1px #ccc; 
 
} 
 

 
.mark-borders:hover:before, 
 
.mark-borders:hover:after 
 
{ 
 
    border-bottom: solid 1px red; 
 
    z-index: 1; 
 
}
<div class="mark-borders"> 
 
    <h1> 
 
    Hello 
 
    </h1> 
 
</div> 
 
<div class="mark-borders"> 
 
    <p> 
 
    Some content 
 
    </p> 
 
</div> 
 
<div class="mark-borders"> 
 
    <h1> 
 
    World 
 
    </h1> 
 
</div> 
 
<br /> 
 
<hr /> 
 
<div class="mark-borders"> 
 
    <h1> 
 
    Hello 
 
    </h1> 
 
</div> 
 
<p class="mark-borders"> 
 
Some content 
 
</p> 
 
<h1 class="mark-borders"> 
 
    World 
 
</h1>

境界線を配置するJSを使用せずにホバーハイライト効果を維持しながら、単一の1の間の境界を「マージ」する方法をいくつか方法はありますか?

私はすべての後に:と:最初の要素だけの前に、しかしその場合、上の境界のホバー効果を失っているか、間違った場所に表示されています元のボーダー)。


UPDATE:

私は、次の概念と一緒にほとんど作業溶液を入れることができました。また、国境前

  • 最後の要素が表示されます。

    • 各要素は、そのを表示その:境界の後ろ
    • ホバーはアクティブになります:現在の要素とボーダーの境界の前その次の兄弟

    でも...オリジナルよりもうまく動作していても、「マージン」の領域は応答していません。ホバー、どのように修正できたのでしょうか?

    更新コード:

    .mark-borders:before, 
     
    .mark-borders:last-child:after 
     
    { 
     
        content: ''; 
     
        position: absolute; 
     
        left: 0; 
     
        right: 0; 
     
        display: block; 
     
        height: 1px; 
     
        border-bottom: dashed 1px #ccc; 
     
    } 
     
    
     
    .mark-borders:hover:before, 
     
    .mark-borders:hover:last-child:after, 
     
    .mark-borders:hover + *:before 
     
    { 
     
        border-bottom: solid 1px red; 
     
        z-index: 1; 
     
    }
    <div> 
     
        <div class="mark-borders"> 
     
        <h1> 
     
         Hello 
     
        </h1> 
     
        </div> 
     
        <div class="mark-borders"> 
     
        <p> 
     
         Some content 
     
        </p> 
     
        </div> 
     
        <div class="mark-borders"> 
     
        <h1> 
     
         World 
     
        </h1> 
     
        </div> 
     
    </div>

  • +0

    :after境界線を与えます。右? – claudios

    +0

    はい、各divの間に1つの境界線が表示され、最初と最後の間に境界線が表示されますが、境界線の前後に境界線が強調表示される必要があります。私はちょうど半分の解決策を考え出すことができたばかりです。 –

    +0

    ああ。わかった。この '.mark-borders {overflow:hidden}'を入れ、それに応じて前後の位置を変更してください。 –

    答えて

    2

    アイブ氏は、コードを編集し、この思い付いた:https://jsfiddle.net/7g31c5rp/4/

    .mark-borders:nth-of-type(2):after, 
        p.mark-borders:after{ 
        display: none; 
    } 
    .mark-borders:hover + .mark-borders:before{ 
        border-bottom: solid 1px red; 
        z-index: 1; 
    } 
    

    をした後、いくつかのコンテンツを削除し、前の世界をターゲットにホバー。

    +0

    ありがとう、私はその間に同様のコンセプトで質問を更新しました。また、いくつかの要素にのみクラスを選択的に追加することはできません。単一の親ノードのすべての子に同じクラスを適用する必要があります。 –

    +0

    私は自分の答えを更新しました。それをチェックしてください –

    +0

    私は特定の要素タイプに頼ることはできません。特定の余分なクラス(私の場合はマークの枠)を持つ要素の一般的なフラットリストで作業する必要があります。あなたのソリューションは、私がすでに持っているものと同じ振る舞いをしています。マージン領域をどのようにして反応させるか考えてみましょう。 –

    1

    兄弟セレクタを使用して、境界線:beforeのみを追加します。 はその後、あなたはそれぞれのdivのための1枠を使用していた:last-child

    .mark-borders:before, 
     
    .mark-borders + .mark-borders:before, 
     
    .mark-borders:last-child:after 
     
    { 
     
        content: ''; 
     
        display: block; 
     
        position: absolute; 
     
        height: 0; 
     
        width: 100%; 
     
        margin-top: -1px; 
     
        border-bottom: dashed 1px #ccc; 
     
    } 
     
    
     
    .mark-borders:hover:before, 
     
    .mark-borders:hover + .mark-borders:before, 
     
    .mark-borders:last-child:hover:after 
     
    { 
     
        border-bottom: solid 1px red; 
     
        z-index: 1; 
     
    }
    <div> 
     
        <div class="mark-borders"> 
     
        <h1> 
     
         Hello 
     
        </h1> 
     
        </div> 
     
        <div class="mark-borders"> 
     
        <p> 
     
         Some content 
     
        </p> 
     
        </div> 
     
        <div class="mark-borders"> 
     
        <h1> 
     
         World 
     
        </h1> 
     
        </div> 
     
    </div>

    +0

    最初の見通しで有望に見えますが、元の要素の位置付けに影響を与えることは許されません。境界線に印を付けるだけです。あなたのソリューションは追加の(不要な)スペースを追加します。どのように元の基本的なデザインを変更せずにそれを行うにはどのようなアイデア? –

    +1

    @martinh_kentico最新のスニペットを見てください。私はそれがすべきだと思いますか? – tmslnz

    +0

    これは正確に私の更新された質問にはありますが、マージンエリアは応答していません:ホバー、どのように修正できるか考えてください。 –

    関連する問題