테두리 길이를 제한하는 방법이 있습니까?


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

1
서클 에서이 작업을 수행 할 수있는 방법이 있습니까?
www139

1
원에 상자 그림자를 적용하십시오.
Piyush Dholariya

3
이것은 고대 브라우저보다 약간의 크로스 브라우저 호환성 이점이있을 수 있으며 JS를 통해 쉽게 제어 할 수 있습니다 ... 그러나 이것들 중 어느 것도 원래 질문의 우려가 아닙니다. 그러나 이것은 원래 질문에서 특별히 피하도록 요구하는 마크 업에 추가 요소를 추가합니다. 그래서 이것이 왜이 질문에 대한 대답인지 이해할 수 없습니다.
스펜서 오라일리

와 이렇게 : 후 추가 마크 업이 필요하지 않습니다
마크

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에서 의사 요소 속성 관리 할 수는 없습니다 (실제로는 할 수 있지만 매우 해킹 될 것입니다). 따라서이 솔루션으로 진행률 표시 줄을 만들 계획이라면 잊어 버리십시오. 이미 수락 된 답변을 선택하십시오. 다른 모든 경우에는이 답변이 더 좋습니다.
Sergei Panfilov

2
이 크로스 브라우저 및 / 또는 JS가 호환됩니까? @SergeyPanfilov의 의견으로 인해 수락 된 답변을 선호합니다.
matthaeus

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 샘플을 추가 할 수 있습니까? 어떻게 그것을 테이블 셀과 함께 사용한다고 생각합니까?
피터 크라우스

21

CSS 속성을 사용하면 테두리의 두께 만 제어 할 수 있습니다. 길이가 아닙니다.

그러나 우리는 모방 테두리 효과를 수하고 제어 width하고 height우리가 다른 방법으로 원하는대로.

CSS (선형 그래디언트) 사용시 :

linear-gradient()테두리 이미지처럼 보이도록 배경 이미지를 만들고 CSS로 크기와 위치를 제어하는 ​​데 사용할 수 있습니다 . 요소에 여러 배경 이미지를 적용 할 수 있으므로이 기능을 사용하여 이미지와 같은 여러 테두리를 만들고 요소의 다른면에 적용 할 수 있습니다. 사용 가능한 나머지 영역을 단색, 그라디언트 또는 배경 이미지로 덮을 수도 있습니다.

필수 HTML :

우리에게 필요한 것은 하나의 요소 일뿐입니다.

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

단계 :

  1. 로 배경 이미지를 만듭니다 linear-gradient().
  2. 테두리처럼 보이도록 위에서 만든 이미지 background-sizewidth/ 를 조정하는 데 사용 합니다 height.
  3. 사용 background-position위치 (같은 조정 left, right, left bottom생성 된 국경 위 (들) 등).

필요한 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 라인 길이"입니다. 테두리 너비와 같은 경우 HR 속성 크기 또는 CSS를 사용하십시오 height. TD 태그에서 셀 경계를 바꾸려면을 사용하십시오 <td>your content<hr/></td>.
피터 크라우스

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+

크롬 : 모두

파이어 폭스 : 15+

더 나은 지원을 위해 공급 업체 접두사도 추가하십시오.

캐니 우스 테두리 이미지


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

면당 하나의 테두리 만 정의 할 수 있습니다. 이를 위해 추가 요소를 추가해야합니다!

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.