境界線の長さを制限する方法はありますか?


216

ボーダーの長さを制限する方法はありますか?<div>下に境界線があるがありますが、の<div>半分だけ上に伸びるの左側に境界線を追加したいと思います。

ページに要素を追加せずにそうする方法はありますか?

回答:


175

お役に立てれば:

#mainDiv {
  height: 100px;
  width: 80px;
  position: relative;
  border-bottom: 2px solid #f51c40;
  background: #3beadc;
}

#borderLeft {
  border-left: 2px solid #f51c40;
  position: absolute;
  top: 50%;
  bottom: 0;
}
<div id="mainDiv">
  <div id="borderLeft"></div>
</div>


5
これはまだそれを行うための最良の方法のようです。クロスブラウザーと互換性があり、メンテナンスが簡単です。
Pim Schaaf 2012

1
サークルでこれを行う方法はありますか?
www139

1
円にボックスシャドウを適用します。
Piyush Dholariya 2016年

3
これは、古いブラウザに比べてブラウザ間の互換性にわずかな利点がある可能性があり、JSを介して制御する方が簡単です...しかし、どちらも元の質問の懸念事項ではありません。ただし、これにより、元の質問が回避するように特に要求するマークアップに要素が追加されます。なぜこれがこの質問の答えとして受け入れられるのか理解できません。
Spencer O'Reilly

:afterでこれを行うには、追加のマークアップは必要ありません
マーク

257

CSSで生成されたコンテンツがこれを解決します。

div {
  position: relative;
}


/* Main div for border to extend to 50% from bottom left corner */

div:after {
  content: "";
  background: black;
  position: absolute;
  bottom: 0;
  left: 0;
  height: 50%;
  width: 1px;
}
<div>Lorem Ipsum</div>

(注- content: "";疑似要素をレンダリングするには宣言が必要です)


21
追加のdivを導入しないので、これは意味的にははるかに良いオプションだと思います。
Louis Otto

21
これは、マークアップよりもスタイルを設定するための唯一の手段としてCSSを優先するため、受け入れられる答えになるはずです。
Lukas

4
完璧です。また、パディングとマージンも期待どおりに機能します。
Nolonar

4
覚えておいてください:JSから疑似要素のプロパティを管理することはできません(実際にはできますが、非常にハッキーになります)。したがって、このソリューションで一種のプログレスバーを作成する場合は、忘れてください。すでに受け入れられている回答を選択してください。他のすべてのケースでは、この答えの方が優れています。
セルゲイパンフィロフ2016年

2
このクロスブラウザやJSは互換性がありますか?@SergeyPanfilovのコメントのため、私は受け入れられた答えを好みます。
matthaeus 2016

36

:after岩:)

少し再生すると、サイズ変更された境界線要素を中央に表示するように設定することも、その隣に別の要素がある場合にのみ表示されるように設定することもできます(メニューなど)。以下はメニューの例です:

#menu > ul > li {
    position: relative;
    float: left;
    padding: 0 10px;
}

#menu > ul > li + li:after {
    content:"";
    background: #ccc;
    position: absolute;
    bottom: 25%;
    left: 0;
    height: 50%;
    width: 1px;
}


1
HTMLサンプルを追加できますか?いくつかの手がかりとして、テーブルセルでどのように使用すると思いますか?
Peter Krauss 2013年

21

CSSプロパティでは、境界線の太さのみを制御できます。長さではありません。

ただし、ボーダー効果を模倣してその境界線を制御しwidthたりheight、他の方法で望みどおりに制御したりできます。

CSS(線形グラデーション):

を使用linear-gradient()して背景画像を作成し、CSSでそのサイズと位置を制御して、境界線のように見えるようにします。1つの要素に複数の背景画像を適用できるため、この機能を使用して、画像のように複数の境界線を作成し、要素のさまざまな側面に適用できます。残りの利用可能な領域を、単色、グラデーション、または背景画像で覆うこともできます。

必要なHTML:

必要なのは、1つの要素のみ(おそらく何らかのクラスを持つ)です。

<div class="box"></div>

手順:

  1. で背景画像を作成しますlinear-gradient()
  2. 利用background-size調整するwidth/ heightそれは国境のように見えるように作成されたイメージ(複数可)上記のを。
  3. 使用background-position位置(等調節するleftrightleft bottom上記で作成した境界(S)のを等)。

必要なCSS:

.box {
  background-image: linear-gradient(purple, purple),
                    // Above css will create background image that looks like a border.
                    linear-gradient(steelblue, steelblue);
                    // This will create background image for the container.

  background-repeat: no-repeat;

  /* First sizing pair (4px 50%) will define the size of the border i.e border
     will be of having 4px width and 50% height. */
  /* 2nd pair will define the size of stretched background image. */
  background-size: 4px 50%, calc(100% - 4px) 100%;

  /* Similar to size, first pair will define the position of the border
     and 2nd one for the container background */
  background-position: left bottom, 4px 0;
}

例:

ではlinear-gradient()、私たちは、ソリッドカラーのボーダーと同様に持つグラデーションを作成することができます。以下は、このメソッドで作成された境界線の例です。

片側のみに境界線を適用した例:

両側に境界線を適用した例:

すべての辺に境界線を適用した例:

スクリーンショット:

半分の長さの境界線を示す出力画像


14

水平線にはhrタグを使用できます:

hr { width: 90%; }

ただし、境界の高さを制限することはできません。要素の高さのみ。


はい、ここで「幅」は「HRラインの長さ」です。border-widthなどの場合は、HR属性サイズまたはCSSを使用しますheight。TDタグのセル境界を置き換えるには、を使用します<td>your content<hr/></td>
Peter Krauss

8

境界線は辺ごとにのみ定義され、辺の端数ではありません。だから、いや、それはできません。

また、新しい要素も境界ではなく、希望する動作を模倣するだけですが、それでも要素です。


7

これを行う別の方法は、ボーダー画像を線形グラデーションと組み合わせて使用​​することです。

div {
  width: 100px;
  height: 75px;
  background-color: green;
  background-clip: content-box; /* so that the background color is not below the border */
  
  border-left: 5px solid black;
  border-image: linear-gradient(to top, #000 50%, rgba(0,0,0,0) 50%); /* to top - at 50% transparent */
  border-image-slice: 1;
}
<div></div>

jsfiddle:https ://jsfiddle.net/u7zq0amc/1/


ブラウザサポート:IE:11+

Chrome:すべて

Firefox:15以上

より良いサポートのために、ベンダープレフィックスも追加します。

caniuse border-image


5

これはCSSのトリックであり、正式なソリューションではありません。要素を配置するのに役立つので、ピリオドを黒いコードのままにします。その後、コンテンツに(color:white)と(margin-top:-5px程度)を色付けして、ピリオドが存在しないかのようにします。

div.yourdivname:after {
content: ".";
  border-bottom:1px solid grey;
  width:60%;
  display:block;
  margin:0 auto;
}

2

別の解決策は、背景画像を使用して左の境界線の外観を模倣することです

  1. 必要な左ボーダースタイルをグラフィックとして作成する
  2. divの左端に配置します(古いブラウザーの場合、テキストサイズの約2つの増加に対応できるように十分長くします)。
  3. divの上から垂直位置を50%に設定します。

IEを微調整する必要がある場合があります(通常どおり)が、それが目的のデザインである場合は、一見の価値があります。

  • 私は一般的に、CSSが本質的に提供するものに画像を使用することに反対していますが、デザインがそれを必要とする場合、他の方法がない場合があります。

1

辺ごとに1つの境界線のみを定義できます。そのための要素を追加する必要があります!

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.