점선 테두리 점 사이의 공간을 늘리는 방법


286

내 상자에 점선 스타일 테두리를 사용하고 있습니다.

.box {
    width: 300px;
    height: 200px;
    border: dotted 1px #f00;
    float: left;
}

테두리의 각 점 사이의 간격을 늘리고 싶습니다.

답변:


444

이 트릭은 가로 및 세로 테두리 모두에 적용됩니다.

/*Horizontal*/
background-image: linear-gradient(to right, black 33%, rgba(255,255,255,0) 0%);
background-position: bottom;
background-size: 3px 1px;
background-repeat: repeat-x;

/*Vertical*/
background-image: linear-gradient(black 33%, rgba(255,255,255,0) 0%);
background-position: right;
background-size: 1px 3px;
background-repeat: repeat-y;

배경 크기로 크기를 조정하고 선형 그라데이션 비율로 비율을 조정할 수 있습니다. 이 예에서는 1px 도트와 2px 간격의 점선이 있습니다. 이렇게하면 여러 배경을 사용하여 여러 개의 점선 테두리를 가질 수 있습니다.

JSFiddle 에서 시도 하거나 코드 스 니펫 예제를 살펴보십시오.


26
선택한 답변이어야합니다.
Kevin Jurkowski

7
imho 그것은 n 도의 해킹입니다.
Muhammad Umer

7
나는 같은 일을하고 싶지만 점선 테두리 너비는 1px가 아닌 3px이며 이제는 점선이 아닌 정사각형이됩니다.
Bhojendra Rauniyar

5
이것을 구현하고 색상과 간격을 빠르게 변경하기 위해 SCSS 믹스 인을 만들었습니다. github.com/florbraz/Dotted-Border-w-custom-spacing-SCSS-Mixin 에서 확인하십시오 .
Flor Braz

5
4 개의 모서리를 모두 파선하려면 어떻게해야합니까?
Ryan Shillington

141

가로 테두리로 원하는 거의 모든 것을 달성하기 위해 최근 프로젝트에서 사용한 트릭이 있습니다. <hr/>가로 테두리가 필요할 때마다 사용 합니다. 이 시간에 테두리를 추가하는 기본 방법은 다음과 같습니다.

 hr {border-bottom: 1px dotted #000;}

그러나 경계를 제어하고 예를 들어 점 사이의 간격을 늘리려면 다음과 같이 시도하십시오.

hr {
height:14px; /* specify a height for this hr */
overflow:hidden;
}

그리고 다음에서는 테두리를 만듭니다 (여기에 점이있는 예가 있습니다).

hr:after {
content:".......................................................................";
letter-spacing: 4px; /* Use letter-spacing to increase space between dots*/
}

이것은 또한 점, 그라디언트 등에 텍스트 그림자를 추가 할 수 있음을 의미합니다.

가로 테두리에 정말 좋습니다. 수직 형이 필요한 경우 다른 시간에 클래스를 지정하고 CSS3 rotation속성을 사용할 수 있습니다.


2
이 크로스 브라우저는 호환됩니까?
J82

57
나는 a **에서 어떤 고통이 유지 될지 상상할 수 없다.
Kzqai

1
수직으로 동일한 효과를 얻는 방법?
린쿠

4
변환이있는 @Rinku : rotate (90deg); 디스플레이 : 블록;
Jeroen K

4
너무 추악하지만 너무 영리합니다 :) 또한 높이를 설정하면 배치를보다 세밀하게 제어 할 수 있습니다. 패딩을 사용하여 배치를 제어합니다. 그래서 아래쪽에 약간의 공간이있는 아래쪽에 점선이 필요하므로 패딩을 사용했습니다. 0 0 10px;
MatthewLee

121

순수한 CSS 로는 할 수 없습니다 -CSS3 스펙 에도 이것에 대한 구체적인 인용문이 있습니다 :

참고 : 점과 대시의 간격이나 대시 길이를 제어 할 수 없습니다. 모서리를 대칭으로 만드는 간격을 선택하는 것이 좋습니다.

그러나 트릭을 수행 하는 테두리 이미지 또는 배경 이미지를 사용할 수 있습니다 .


7
완전히 사용자 정의 가능한 테두리에 그라디언트 (순수한 CSS)를 사용할 수 있습니다. 아래 답변 참조
Olivictor

3
-1, @Shadikka는 무엇 CSS3 스펙 말하는 것은 사용하여 수행 할 수 없다는 것입니다 border: dotted, 그러나 이다 Eagorajose의 대답을 보여 주었다으로 그라데이션을 사용하여 수행 할 수 있습니다.
Pacerier

30

표준 CSS 테두리와 의사 element + overflow : hidden을 사용합니다. 이 예에서는 3px의 두 가지 점선 테두리가 있습니다. 보통, 5px 간격, 10px 간격입니다. 실제로 10-8 = 2px 만 표시되는 10px입니다.

div.two{border:2px dashed #FF0000}

div.five:before {
  content: "";
  position: absolute;
  border: 5px dashed #FF0000;
  top: -3px;
  bottom: -3px;
  left: -3px;
  right: -3px;
}

div.ten:before {
  content: "";
  position: absolute;
  border: 10px dashed #FF0000;
  top: -8px;
  bottom: -8px;
  left: -8px;
  right: -8px;
}

div.odd:before {left:0;right:0;border-radius:60px}

div {
  overflow: hidden;
  position: relative;


  text-align:center;
  padding:10px;
  margin-bottom:20px;
}
<div class="two">Kupo nuts here</div>
<div class="five">Kupo nuts<br/>here</div>
<div class="ten">Kupo<br/>nuts<br/>here</div>
<div class="ten odd">Kupo<br/>nuts<br/>here</div>

둥근 모서리가 큰 작은 요소에 적용하면 재미있는 효과가 발생할 수 있습니다.


2
강한 일! 이것은 유지 보수가 끔찍한 일이 아니라 실제로 작동하는 이러한 답변 중 유일한 것입니다. 허용 된 답변조차도 div의 한쪽 가장자리에서만 작동합니다. 이것은 국경 전체에 적용됩니다.
Ryan Shillington

1
이것은 지금까지 가장 훌륭하고 가장 우아한 답변입니다. 해결책으로 표시되어야합니다 ...
Beejee

19

따라서 주어진 대답으로 시작하여 CSS3이 여러 설정을 허용한다는 사실을 적용하면 아래 코드가 완전한 상자를 만드는 데 유용합니다.

#border {
  width: 200px;
  height: 100px;
  background: yellow;
  text-align: center;
  line-height: 100px;
  background: linear-gradient(to right, orange 50%, rgba(255, 255, 255, 0) 0%), linear-gradient(blue 50%, rgba(255, 255, 255, 0) 0%), linear-gradient(to right, green 50%, rgba(255, 255, 255, 0) 0%), linear-gradient(red 50%, rgba(255, 255, 255, 0) 0%);
  background-position: top, right, bottom, left;
  background-repeat: repeat-x, repeat-y;
  background-size: 10px 1px, 1px 10px;
}
<div id="border">
  bordered area
</div>

배경 크기의 10px는 대시와 갭이 차지하는 영역을 제공한다는 점에 유의하십시오. 배경 태그의 50 %는 대시의 실제 너비입니다. 따라서 각 경계면에 길이가 다른 대시를 사용할 수 있습니다.


17

사용 가능한 값 은 MDN 문서 를 참조하십시오 border-style.

  • none : 테두리 없음, 너비를 0으로 설정합니다. 이것이 기본값입니다.
  • hidden : 테이블 요소의 경계 충돌 해결을 제외하고 '없음'과 동일합니다.
  • 점선 : 일련의 짧은 대시 또는 선 세그먼트.
  • 점이 찍힌 : 일련의 점.
  • double : 경계 너비로 정의 된 픽셀 양에 더하는 두 개의 직선.
  • 그루브 : 조각 효과.
  • inset : 상자를 포함 된 것으로 표시합니다.
  • outset : 'inset'과 반대입니다. 상자를 3D로 표시합니다 (양각).
  • 릿지 : '홈'의 반대. 테두리가 3D로 나타납니다 (출시 예정).
  • 실선 : 단일 직선 직선.

이러한 선택 외에도 표준 테두리 스타일에 영향을 줄 수있는 방법은 없습니다.

원하는대로 가능성이 없다면 CSS3을 사용할 border-image있지만 브라우저 지원은 여전히 ​​매우 흔합니다.


고마워 pekka, 즉 테두리 속성을 사용할 수 없다는 의미이므로 이미지를 사용해야합니다.
Kali Charan Rajput

테두리 스타일이 마음에 들지 않으면 @kc, 예.
Pekka

8

간단한 구문으로 @Eagorajose의 답변을 기반으로 4 가장자리 솔루션 구축 :

background: linear-gradient(to right, #000 33%, #fff 0%) top/10px 1px repeat-x, /* top */
linear-gradient(#000 33%, #fff 0%) right/1px 10px repeat-y, /* right */
linear-gradient(to right, #000 33%, #fff 0%) bottom/10px 1px repeat-x, /* bottom */
linear-gradient(#000 33%, #fff 0%) left/1px 10px repeat-y; /* left */

#page {
    background: linear-gradient(to right, #000 33%, #fff 0%) top/10px 1px repeat-x, /* top */
    linear-gradient(#000 33%, #fff 0%) right/1px 10px repeat-y, /* right */
    linear-gradient(to right, #000 33%, #fff 0%) bottom/10px 1px repeat-x, /* bottom */
    linear-gradient(#000 33%, #fff 0%) left/1px 10px repeat-y; /* left */
    
    width: 100px;
    height: 100px;
}
<div id="page"></div>


8

이것은 오래되었지만 여전히 관련성이 높은 주제입니다. 현재 상단의 대답은 잘하지만, 매우 작은 점에 대해 작동합니다. Bhojendra Rauniyar는 주석에서 이미 지적했듯이 더 큰 (> 2px) 점의 경우 점이 아닌 정사각형으로 나타납니다. 이 페이지는 간격이 정사각형이 아닌 간격 점을 검색합니다 (여기서 답변이 사용됨에 따라 대시).

이것을 바탕으로 나는을 사용했다 radial-gradient. 또한 Ukuser32의 답변을 사용 하면 네 가지 경계 모두에 대해 도트 속성을 쉽게 반복 할 수 있습니다. 모서리 만 완벽하지는 않습니다.

div {
    padding: 1em;
    background-image:
        radial-gradient(circle at 2.5px, #000 1.25px, rgba(255,255,255,0) 2.5px),
        radial-gradient(circle, #000 1.25px, rgba(255,255,255,0) 2.5px),
        radial-gradient(circle at 2.5px, #000 1.25px, rgba(255,255,255,0) 2.5px),
        radial-gradient(circle, #000 1.25px, rgba(255,255,255,0) 2.5px);
    background-position: top, right, bottom, left;
    background-size: 15px 5px, 5px 15px;
    background-repeat: repeat-x, repeat-y;
}
<div>Some content with round, spaced dots as border</div>

radial-gradient 예상하는 :

  • 모양과 선택적인 위치
  • 두 개 이상의 정지 점 : 색상 및 반경

여기에서는 도트 사이의 직경 (10px)의 2 배인 5 픽셀 직경 (2.5px 반경)의 점을 원했으며 최대 15px를 더했습니다. 이것 background-size과 일치해야합니다.

두 개의 정지 점은 점이 훌륭하고 매끄 럽도록 정의됩니다. 반지름의 반은 전체 검정의 그라데이션보다 검은 색입니다.


6

이것은 정말 오래된 질문이지만 Google에서 높은 순위를 차지하므로 필요에 따라 작동 할 수있는 방법을 사용할 것입니다.

내 경우에는 대시 사이에 최소한의 휴식이있는 두꺼운 점선 테두리를 원했습니다. CSS 패턴 생성기 (예 : http://www.patternify.com/ )를 사용하여 가로 10px x 세로 1px의 패턴을 만들었습니다. 그 중 9px는 단색 대시, 1px는 흰색입니다.

CSS에서 해당 패턴을 배경 이미지로 포함한 다음 background-size 속성을 사용하여 확장했습니다. 나는 20px x 2px 반복 대시, 18px는 실선 및 2px 흰색으로 끝났습니다. 정말 두꺼운 파선으로 더 확장 할 수 있습니다.

좋은 점은 이미지가 추가 외부 HTTP 요청이없는 데이터로 인코딩되므로 성능 부담이 없다는 것입니다. 내 이미지를 SASS 변수로 저장하여 내 사이트에서 재사용 할 수 있습니다.



2

많은 사람들이 "당신은 할 수 없습니다"라고 말합니다. 그래 넌 할수있어. 대시 사이의 거터 공간을 제어하는 ​​CSS 규칙은 없지만 CSS에는 다른 기능이 있습니다. 일을 할 수 없다고 너무 빨리 말하지 마십시오.

.hr {
    border-top: 5px dashed #CFCBCC;
    margin: 30px 0;
    position: relative;
}

.hr:before {
    background-color: #FFFFFF;
    content: "";
    height: 10px;
    position: absolute;
    top: -2px;
    width: 100%;
}

.hr:after {
    background-color: #FFFFFF;
    content: "";
    height: 10px;
    position: absolute;
    top: -13px;
    width: 100%;
}

기본적으로 테두리 상단 높이 (이 경우 5px)는 거터 "폭"을 결정하는 규칙입니다. 물론, 필요에 따라 색상을 조정해야합니다. 이것은 또한 수평선의 작은 예입니다. 수직선을 만들기 위해 왼쪽과 오른쪽을 사용하십시오.


1
공평하게 말하면, 대부분의 사람들은 테두리 점선 스타일을 조정하는 문자 문제에 대해서는 할 수 없다고 말합니다. 그들은 다른 CSS 속성을 사용하여 비슷한 것이 불가능하다고 말하지 않습니다. 제 생각에는 의사 요소와 수십 줄의 CSS를 사용하는 것보다 시맨틱 적 관점에서 배경 이미지 또는 테두리 이미지를 사용하는 것이 훨씬 더 의미가 있습니다.
Alex

2

svg로 점을 만드는 자바 스크립트 함수를 만들었습니다. 자바 스크립트 코드에서 점 간격과 크기를 조정할 수 있습니다.

var make_dotted_borders = function() {
    // EDIT THESE SETTINGS:
    
    var spacing = 8;
    var dot_width = 2;
    var dot_height = 2;
    
    //---------------------

    var dotteds = document.getElementsByClassName("dotted");
    for (var i = 0; i < dotteds.length; i++) {
        var width = dotteds[i].clientWidth + 1.5;
        var height = dotteds[i].clientHeight;

        var horizontal_count = Math.floor(width / spacing);
        var h_spacing_percent = 100 / horizontal_count;
        var h_subtraction_percent = ((dot_width / 2) / width) * 100;

        var vertical_count = Math.floor(height / spacing);
        var v_spacing_percent = 100 / vertical_count;
        var v_subtraction_percent = ((dot_height / 2) / height) * 100;

        var dot_container = document.createElement("div");
        dot_container.classList.add("dot_container");
        dot_container.style.display = getComputedStyle(dotteds[i], null).display;

        var clone = dotteds[i].cloneNode(true);

        dotteds[i].parentElement.replaceChild(dot_container, dotteds[i]);
        dot_container.appendChild(clone);

        for (var x = 0; x < horizontal_count; x++) {
            // The Top Dots
            var dot = document.createElement("div");
            dot.classList.add("dot");
            dot.style.width = dot_width + "px";
            dot.style.height = dot_height + "px";

            var left_percent = (h_spacing_percent * x) - h_subtraction_percent;
            dot.style.left = left_percent + "%";
            dot.style.top = (-dot_height / 2) + "px";
            dot_container.appendChild(dot);

            // The Bottom Dots
            var dot = document.createElement("div");
            dot.classList.add("dot");
            dot.style.width = dot_width + "px";
            dot.style.height = dot_height + "px";

            dot.style.left = (h_spacing_percent * x) - h_subtraction_percent + "%";
            dot.style.top = height - (dot_height / 2) + "px";
            dot_container.appendChild(dot);
        }

        for (var y = 1; y < vertical_count; y++) {
            // The Left Dots:
            var dot = document.createElement("div");
            dot.classList.add("dot");
            dot.style.width = dot_width + "px";
            dot.style.height = dot_height + "px";

            dot.style.left = (-dot_width / 2) + "px";
            dot.style.top = (v_spacing_percent * y) - v_subtraction_percent + "%";
            dot_container.appendChild(dot);
        }
        for (var y = 0; y < vertical_count + 1; y++) {
            // The Right Dots:
            var dot = document.createElement("div");
            dot.classList.add("dot");
            dot.style.width = dot_width + "px";
            dot.style.height = dot_height + "px";

            dot.style.left = width - (dot_width / 2) + "px";
            if (y < vertical_count) {
                dot.style.top = (v_spacing_percent * y) - v_subtraction_percent + "%";
            }
            else {
                dot.style.top = height - (dot_height / 2) + "px";
            }

            dot_container.appendChild(dot);
        }
    }
}

make_dotted_borders();
div.dotted {
    display: inline-block;
    padding: 0.5em;
}

div.dot_container {
    position: relative;
    margin-left: 0.25em;
    margin-right: 0.25em;
}

div.dot {
    position: absolute;
    content: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" height="100" width="100"><circle cx="50" cy="50" r="50" fill="black" /></svg>');
}
<div class="dotted">Lorem Ipsum</div>


1

최신 브라우저만을 대상으로하고 컨텐츠와 다른 요소에 테두리를 둘 수 있다면 CSS 스케일 변환을 사용하여 더 큰 점 또는 대시를 얻을 수 있습니다.

border: 1px dashed black;
border-radius: 10px;
-webkit-transform: scale(8);
transform: scale(8);

정렬하려면 많은 위치 조정이 필요하지만 작동합니다. 테두리의 두께, 시작 크기 및 배율을 변경하여 원하는 두께-길이 비율에 도달 할 수 있습니다. 만질 수없는 것은 대시 대 갭 비율입니다.


그렇게함으로써 내용도 적용됩니다scale(8)
Pardeep Jain

테두리 : 1px 검은 점선; 크롬 브라우저에서 알려지지 않은 속성으로 간주됩니다.
Inzmam ul Hassan


0

AFAIK에는 이렇게 할 수있는 방법이 없습니다. 점선 테두리를 사용하거나 테두리 너비를 약간 늘릴 수 있지만 CSS를 사용하면 더 많은 간격을 두는 것이 불가능합니다.


0

(자바 스크립트를 통해) 캔버스를 만들고 안에 점선을 그릴 수 있습니다. 캔버스 내에서 대시와 공백 사이의 간격을 제어 할 수 있습니다.


그것은 매우 복잡한 해결책입니다. 나는 페이지의 나머지 JS의 무게에 따라 성능과 인식되는로드 시간이 조금 더 걸릴 것이라고 생각할 수는 없습니다.
Emmett R.
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.