8

背景色が白の2つのdivが隣り合っています。http://jsfiddle.net/J5ZXt/はコードへのリンクです。2 つの div を 1 つの要素のように見せたいので、影の部分を削除する必要があります。何か案は?

4

4 に答える 4

13

はい、可能です。単にそれを覆います:before

/* Add relative positioning */
#two {
  position:relative;
}
/* Add :before element to cover up shadow */
#two:before {
  background:white;
  display:block;
  content:".";
  font-size:0;
  width:4px;
  height:100px;
  position:absolute;
  left:-4px;
  top:0;
}

/* Existing styles */
#one {
  width: 100px;
  height: 100px;
  background: #FFF;
  -moz-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
  -webkit-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
  box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
  float:left;
}
#two {
  width: 100px;
  height: 300px;
  background: #FFF;
  -moz-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
  -webkit-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
  box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
  float:left;
}
<div id="one"></div>
<div id="two"></div>

于 2012-05-16T19:14:41.567 に答える
6

これは私が数分以内に得ることができる最高のものであり、仕事をしていると思います. 一番いいのはそのシンプルさです (CSS を 3 回編集するだけです)。

右端が負の値になるように D1 の影を配置します (-4px で非表示にできます)。

両方の div に相対位置を指定して、それらの重なり順を制御できるようにします。

D1 に D2 よりも高い z-index を指定して、D2 の影の上部をマスクします。

#one {
    width: 100px;
    height: 100px;
    background: #FFF;
    -moz-box-shadow: -4px 0 3px 1px rgba(0,0,0,0.3);
    -webkit-box-shadow: -4px 0 3px 1px rgba(0,0,0,0.3);
    box-shadow: -4px 0px 3px 1px rgba(0,0,0,0.3);
    float:left;
    position: relative;
    z-index: 20;
}
#two {
    width: 100px;
    height: 300px;
    background: #FFF;
    -moz-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
    -webkit-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
    box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
    float:left;
    z-index: 5;
    position: relative;
}
于 2012-05-16T19:16:28.863 に答える
2

私は負けるのが嫌いで完璧主義者になる傾向があるので、特定の高さに依存しない答えを思いつきました-それは#oneより短くなければなりません#two(これは現在受け入れられている答えにも当てはまります) 。また、の片側にギャップや大きな影の欠点もありません#one

注:この回答は、を介して曲が​​ったコーナーの可能性も示していborder-radiusます。に追加border-radius:4px;するだけ#one:afterで結果が表示されます。

jsFiddleの例

新しいCSS

<style type="text/css">
#one {
    width: 100px;
    height: 200px;
    background: #fff;
    float:left;
    position:relative;
    overflow:hidden;
}
#one:after {
    display:block;
    content:".";
    font-size:0;
    color:transparent;
    height:8px;
    width:100%;
    padding-left:4px;
    position:absolute;
    bottom:-4px;
    left:-4px;
    background:#fff;
    z-index:2;
    -moz-box-shadow: inset 0 0 3px 1px rgba(0,0,0,0.3);
    -webkit-box-shadow: inset 0 0 3px 1px rgba(0,0,0,0.3);
    box-shadow: inset 0 0 3px 1px rgba(0,0,0,0.3);
}
#two {
    width: 100px;
    height: 300px;
    background: #FFF;
    -moz-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
    -webkit-box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
    box-shadow: 0 0 3px 1px rgba(0,0,0,0.3);
    float:left;
}
</style>
于 2012-05-16T19:42:30.740 に答える
2

純粋な CSS - いいえ

この例のように、divをその上に絶対に配置することをいつでも試すことができます

::before ソリューションは、すべてのブラウザーで機能するわけではありません

于 2012-05-16T19:11:15.723 に答える