하나의 테두리에만 윤곽선


86

인세 트 테두리 를 HTML 요소 에 적용하는 방법 ( 한쪽에 만 적용). 지금까지 저는 이미지 (GIF / PNG)를 사용하여 배경으로 사용하고 늘이고 (반복 -x) 블록 상단에서 약간 떨어진 위치에 배치했습니다. 최근에 저는 outline CSS 속성을 발견했습니다 . 그러나 전체 블록을 동그라미로하는 것 같습니다 ...이 윤곽선 속성을 사용하여 하나의 테두리에서만 수행 할 수 있습니까? 또한 그렇지 않은 경우 배경 이미지를 대체 할 수있는 CSS 트릭이 있습니까? (나중에 CSS 등을 사용하여 윤곽선의 색상을 개인화 할 수 있도록). 미리 감사드립니다!

다음은 달성하려는 이미지입니다. http://exiledesigns.com/stack.jpg


7
당신의 링크는 죽었습니다. 그림 도구를 사용하여 이미지를 질문에 직접 붙여 넣을 수 있습니다.
toddmo

답변:


46

개요는 실제로 전체 요소에 적용됩니다 .

이제 이미지를 보았으므로이를 달성하는 방법은 다음과 같습니다.

.element {
  padding: 5px 0;
  background: #CCC;
}
.element:before {
  content: "\a0";
  display: block;
  padding: 2px 0;
  line-height: 1px;
  border-top: 1px dashed #000; 
}
.element p {
  padding: 0 10px;
}
<div class="element">
  <p>Some content comes here...</p>
</div>

(또는 외부 데모를 참조하십시오 . )

모든 크기와 색상은 자리 표시 자일 뿐이며 원하는 결과와 정확히 일치하도록 변경할 수 있습니다.

중요 참고 사항 : .element에 display:block;(div의 기본값)이 있어야 작동합니다. 그렇지 않은 경우 특정 답변을 자세히 설명 할 수 있도록 전체 코드를 제공해주세요.


안녕하세요, Giona, 방금 질문에 이미지를 추가하여 더 명확하게 설명했습니다. 블록의 한계와 경계 사이에 공간이 필요합니다.
Corinne

@GionaF에게 감사하지만 테두리는 여전히 '내부'가 아닌 블록 '위'에있는 것 같습니다. (\ a0은 무엇입니까? 블록을 생성하기위한 임의의 콘텐츠입니까?) exiledesigns.com/stack2.jpg (5px의 패딩으로 시도했지만 변경된 사항이 없음)
Corinne

1
@DominicTobias 사실 ;-) 기억이 안나요
Giona

1
참고로 \a0는 비 분리 공백입니다.

1
내 사용 사례에서는 이것을 가져다가 약간 수정했습니다. 다른 사람이 같은 문제를 겪을 경우를 대비하여 : before 가상 클래스를 사용하여 요소의 상단에 절대 위치와 100 % 너비를 추가하고 요소에 대한 상대 위치를 추가해야합니다.
josh1978

131

box-shadow한쪽에 윤곽선을 만드는 데 사용할 수 있습니다 . 마찬가지로 outline, box-shadow박스 모델의 크기를 변경하지 않습니다.

이것은 맨 위에 줄을 놓습니다.

box-shadow: 0 -1px 0 #000;

실제로 확인할 수 있는 jsFiddle을 만들었습니다 .


삽입

를 들어 삽입 된 테두리 사용 삽입 된 키워드를. 이렇게하면 맨 위에 삽입 된 선이 표시됩니다.

box-shadow: 0 1px 0 #000 inset;

쉼표로 구분 된 문을 사용하여 여러 줄을 추가 할 수 있습니다. 이렇게하면 상단과 왼쪽에 인세 트 라인이 표시됩니다.

box-shadow: 0 1px 0 #000 inset,
            1px 0 0 #000 inset;

box-shadow작동 방식 에 대한 자세한 내용 은 MDN 페이지를 확인 하세요 .


1
이 창의적인 접근 방식이 마음에 듭니다. 공유해 주셔서 감사합니다!
NPC

인세 트 테두리를 만들지 않았고 box-shadow 구문을 설명하지 않았습니다. 감사.
toddmo

사용자 정의 스타일 테두리가 필요한 경우 이것은 제한이 있습니다!
안드리


1

나는 이것이 오래된 것을 압니다. 하지만 그래. Giona 대답보다 훨씬 짧은 솔루션을 선호합니다.

[contenteditable] {
    border-bottom: 1px solid transparent;
    &:focus {outline: none; border-bottom: 1px dashed #000;}
}

0

나는 내 입력 필드에 테두리를 지정하고, 포커스에서 윤곽선을 제거하고, 대신 테두리를 "윤곽선"으로 지정하고 싶습니다.

input {
  border: 1px solid grey;

  &:focus {
    outline: none;
    border-left: 1px solid violet;
  }
 }

투명한 테두리로 할 수도 있습니다.

input {
  border: 1px solid transparent;

  &:focus {
    outline: none;
    border-left: 1px solid violet;
  }
 }

-1

HTML / CSS의 장점은 일반적으로 동일한 효과를 얻을 수있는 방법이 여러 가지라는 것입니다. 다음은 원하는 작업을 수행하는 또 다른 솔루션입니다.

<nav id="menu1">
    <ul>
        <li><a href="#">Menu Link 1</a></li>
        <li><a href="#">Menu Link 2</a></li>
    </ul>
</nav>

nav {
    background:#666;
    margin:1em;
    padding:.5em 0;
}
nav ul {
    border-top:1px dashed #fff;
    list-style:none;
    padding:.5em;
}
nav ul li {
    display:inline-block;
}
nav ul li a {
    color:#fff;
}

http://jsfiddle.net/10basetom/uCX3G/1/


-2

한쪽 만 outline작동하지 않습니다.border-left/right/top/bottom

내가 제대로 당신의 코멘트를 받고 있다면

여기에 이미지 설명 입력


2
테두리 왼쪽 / 오른쪽 / 등을 삽입하는 방법은 무엇입니까? 예를 들어, 블록 경계에서 3 픽셀 떨어진 곳에 있지만 내부는 ?
Corinne

@CorinneStoppelli 설명해 주시겠습니까?
Database_Query

@Database_Query, 개요 속성 (또는 이와 유사한)을 사용하는 부분을 놓친 것 같습니다. 즉, div에 더 많은 무게 / 높이를 추가하고 싶지 않다는 의미입니다. border 속성은 실제로 추가되지만 윤곽선은 추가되지 않습니다. 상자 그림자 대안은 옵션으로 조금 플레이해야 할지라도 더 나은 옵션 인 것 같습니다.
xarlymg89 2014
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.