어쨌든 점점 거기에 둥근 모서리를 온 개요 (A)의 div element
유사, border-radius
?
border: 5px red
and outline: 5px blue
및 border-radius: 5px
테두리가 있는 요소 는 둥글지만 윤곽선은 정사각형입니다.
-moz-outline-radius
box-shadow
당신의 인생에서 필요합니다 ..
어쨌든 점점 거기에 둥근 모서리를 온 개요 (A)의 div element
유사, border-radius
?
border: 5px red
and outline: 5px blue
및 border-radius: 5px
테두리가 있는 요소 는 둥글지만 윤곽선은 정사각형입니다.
-moz-outline-radius
box-shadow
당신의 인생에서 필요합니다 ..
답변:
오래된 질문이지만 지금은 비슷한 문제가있는 사람과 관련이 있습니다. 입력 필드가 둥글고 border
포커스 외곽선의 색상을 변경하고 싶었습니다. outline
입력 컨트롤에 끔찍한 사각형 을 길 들이지 못했습니다 .
대신 상자 그림자를 사용했습니다. 실제로 그림자의 부드러운 모양을 선호했지만 둥근 윤곽을 시뮬레이션하기 위해 그림자를 강화할 수 있습니다.
/* Smooth outline with box-shadow: */
.text1:focus {
box-shadow: 0 0 3pt 2pt red;
}
/* Hard "outline" with box-shadow: */
.text2:focus {
box-shadow: 0 0 0 2pt red;
}
<input type=text class="text1">
<br>
<br>
<br>
<br>
<input type=text class="text2">
outline: 0
웹 접근성을 차단합니다. outlinenone.com을
box-shadow
대체 스타일링입니다 (여기에 제시된 바와 같이 실제로 모양이 매우 유사 함 outline
).
나는 보통 : after pseudo-element를 사용하여 이것을 달성합니다 :
물론 사용법에 따라 다르지만이 방법을 사용하면 하드 섀도 방법을 사용하지 않고 개별 테두리를 제어 할 수 있습니다.
-1px 오프셋을 설정하고 다른 효과를 위해 배경 선형 그라데이션 (테두리 없음)을 다시 사용할 수도 있습니다.
body {
margin: 20px;
}
a {
background: #999;
padding: 10px 20px;
border-radius: 5px;
text-decoration: none;
color: #fff;
position: relative;
border: 2px solid #000;
}
a:after {
content: '';
display: block;
position: absolute;
top: 0;
bottom: 0;
left: 0;
right: 0;
border-radius: 5px;
border: 2px solid #ccc;
}
<a href="#">Button</a>
box-shadow
버전 보다 훨씬 유연하기 때문에이 솔루션이 마음에 듭니다. 예를 들어, "개요"를 요소와 간격을두고 (예 : 시뮬레이션 outline-offset
)이 기술을 사용하면 가능합니다.
위의 Lea Hayes와 비슷하지만 여기에 내가 한 방법이 있습니다.
div {
background: #999;
height: 100px;
width: 200px;
border: #999 solid 1px;
border-radius: 10px;
margin: 15px;
box-shadow: 0px 0px 0px 1px #fff inset;
}
<div></div>
DIV 또는 jQuery의 중첩이 필요하지 않습니다. 간결함을 위해 Altho 일부 CSS의 -moz 및 -webkit 변형을 생략했습니다. 위의 결과를 볼 수 있습니다
inset
그래도 사용하지 않았고 원하는 것을 얻었습니다.
Bootstrap navbar의 드롭 다운 메뉴에 대한 멋진 포커스 액세스 기능을 원했으며 다음과 같이 만족했습니다.
a.dropdown-toggle:focus {
display: inline-block;
box-shadow: 0 0 0 2px #88b8ff;
border-radius: 2px;
}
<a href="https://stackoverflow.com" class="dropdown-toggle">Visit Stackoverflow</a>
당신은 이와 같은 것을 찾고 있다고 생각합니다.
div {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
border: 1px solid black;
background-color: #CCC;
height: 100px;
width: 160px;
}
Firefox 만 가능 -moz-outline-radius
하지만 IE / Chrome / Safari / Opera / etc에서는 작동하지 않습니다. 따라서 가장 크로스 브라우저와 호환되는 방식처럼 보입니다. * 테두리 주위에 곡선을 만드는 방법 은 래퍼 div를 사용하는 것입니다.
div.inner {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
border: 1px solid black;
background-color: #CCC;
height: 100px;
width: 160px;
}
div.outer {
display: inline-block;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
border-radius: 10px;
border: 1px solid red;
}
<div class="outer">
<div class="inner"></div>
</div>
* 이미지 사용 제외
방금 이것에 대한 훌륭한 해결책을 찾았으며 지금까지 모든 응답을 검토 한 결과 아직 게시되지 않았습니다. 그래서 여기 내가 한 일이 있습니다.
클래스에 대한 CSS 규칙을 만들고 해당 규칙에 의사 클래스 : focus를 사용했습니다. 나는 설정 outline: none
이 기본 밝은 파란색이 아닌 국경 반경 수 '윤곽'기본적으로 그 크롬의 사용을 제거 할 수 있습니다. 그런 다음 :focus
외곽선이 더 이상 존재하지 않는 동일한 의사 클래스에서 반경 및 경계 속성을 추가했습니다. 다음과 같은
outline: none;
border-radius: 5px;
border: 2px solid maroon;
사용자가 요소를 탭으로 선택할 때 나타나는 테두리 반경의 적갈색 윤곽선을 갖습니다.
우리는 outline-style: auto
WebKits 레이더 에 설정하여 우리의 희망 을 빨리 볼 수 있습니다 : http://trac.webkit.org/changeset/198062/webkit
2030 년에 나중에 보자.
양각 모양을 원하면 다음과 같이 할 수 있습니다.
.embossed {
background: #e5e5e5;
height: 100px;
width: 200px;
border: #FFFFFF solid 1px;
outline: #d0d0d0 solid 1px;
margin: 15px;
}
.border-radius {
border-radius: 20px 20px 20px 20px;
-webkit-border-radius: 20px;
-moz-border-radius: 20px;
-khtml-border-radius: 20px;
}
.outline-radius {
-moz-outline-radius: 21px;
}
<div class="embossed"></div>
<div class="embossed border-radius"></div>
<div class="embossed border-radius outline-radius">-MOZ ONLY</div>
다른 브라우저 에서이 작업을 수행 할 수있는 해결 방법을 찾지 못했습니다.
편집 : 이 작업을 수행 할 수있는 유일한 다른 방법은 상자 그림자를 사용하는 것입니다. 그러나 해당 요소에 상자 그림자가 이미 있으면 작동하지 않습니다.
테두리가없는 윤곽선 만 필요한 경우 해결책이 있습니다. 그건 내 것이 아니다. Bootstrap CSS 파일에서 얻었습니다. 을 지정 outline: 1px auto certain_color
하면 특정 색상의 div 주위에가는 외부 선이 나타납니다. 이 경우 지정된 너비는 중요하지 않습니다. 10px 너비를 지정하더라도 어쨌든 얇은 선이됩니다. 언급 된 규칙의 핵심 단어는 "자동"입니다.
둥근 모서리와 특정 너비의 윤곽이 필요한 경우 필요한 너비와 동일한 색상으로 테두리에 CSS 규칙을 추가 할 수 있습니다. 윤곽을 두껍게 만듭니다.
아니요. 테두리는 요소 외부와 상자 모델 여백 영역의 내부에 있습니다. 윤곽선은 요소 내부에 있으며 상자 모델 패딩 영역에서는이를 무시합니다. 미학을위한 것은 아닙니다. 디자이너에게 요소의 개요를 보여 주기만하면됩니다. 예를 들어, html 문서를 개발하는 초기 단계에서 개발자는 모든 골격 div를 올바른 위치에 배치 한 경우 신속하게 식별해야합니다. 나중에 그들은 다양한 버튼과 형태가 서로 올바른 픽셀 수인지 확인해야 할 수도 있습니다.
테두리는 본질적으로 미적입니다. 윤곽선과 달리 그것들은 실제로 박스 모델과 떨어져 있습니다. 즉, 텍스트 세트를 여백으로 겹치지 않습니다 : 0; 테두리의 각면은 개별적으로 스타일을 지정할 수 있습니다.
윤곽선에 모서리 반경을 적용하려고하면 대부분의 사람들이 테두리를 사용하는 방식으로 사용한다고 가정합니다. 그래서 당신이 나에게 묻는 것을 신경 쓰지 않는다면, 외곽선의 어떤 속성이 경계를 넘어 바람직합니까?
다른 사람들이 말했듯이 파이어 폭스만이 지원합니다. 다음은 동일한 작업을 수행하고 점선 윤곽선으로 작동하는 해결 방법입니다.
.has-outline {
display: inline-block;
background: #51ab9f;
border-radius: 10px;
padding: 5px;
position: relative;
}
.has-outline:after {
border-radius: 10px;
padding: 5px;
border: 2px dashed #9dd5cf;
position: absolute;
content: '';
top: -2px;
left: -2px;
bottom: -2px;
right: -2px;
}
<div class="has-outline">
I can haz outline
</div>
나는 개요를 투명하게 설정했습니다.
input[type=text] {
outline: rgba(0, 0, 0, 0);
border-radius: 10px;
}
input[type=text]:focus {
border-color: #0079ff;
}
나는이 방법을 좋아한다.
.circle:before {
content: "";
width: 14px;
height: 14px;
border: 3px solid #fff;
background-color: #ced4da;
border-radius: 7px;
display: inline-block;
margin-bottom: -2px;
margin-right: 7px;
box-shadow: 0px 0px 0px 1px #ced4da;
}
그것은 주위에 재치 테두리가있는 회색 원을 만들고 테두리 주위에 다시 1px를 만듭니다!
기본 질문에 대한 간단한 대답은 '아니요'입니다. 크로스 브라우저 옵션은 원하는 것을 달성하는 핵을 만드는 것입니다. 이 방법은 기존 컨텐츠를 스타일링 할 때 특정 잠재적 인 문제를 수반 하지만 다른 많은 솔루션보다 개요 (오프셋, 너비, 선 스타일)를 더 많이 사용자 정의 할 수 있습니다.
기본 레벨에서 다음 정적 예제를 고려하십시오 (데모를 위해 코드 조각 실행).
.outline {
border: 2px dotted transparent;
border-radius: 5px;
display: inline-block;
padding: 2px;
margin: -4px;
}
/* :focus-within does not work in Edge or IE */
.outline:focus-within, .outline.edge {
border-color: blue;
}
br {
margin-bottom: 0.75rem;
}
<h3>Javascript-Free Demo</h3>
<div class="outline edge"><input type="text" placeholder="I always have an outline"/></div><br><div class="outline"><input type="text" placeholder="I have an outline when focused"/></div> *<i>Doesn't work in Edge or IE</i><br><input type="text" placeholder="I have never have an outline" />
<p>Note that the outline does not increase the spacing between the outlined input and other elements around it. The margin (-4px) compensates for the space that the outlines padding (-2px) and width (2px) take up, a total of 4px.</p>
이제 고급 레벨에서는 JavaScript를 사용하여 주어진 유형 또는 클래스의 요소를 부트 스트랩하여 페이지로드시 개요를 시뮬레이트하는 div 안에 랩핑 할 수 있습니다. 또한 다음과 같은 사용자 상호 작용에 대한 개요를 표시하거나 숨기도록 이벤트 바인딩을 설정할 수 있습니다 (아래 스 니펫을 실행하거나 JSFiddle 에서 열림 ).
h3 {
margin: 0;
}
div {
box-sizing: border-box;
}
.flex {
display: flex;
}
.clickable {
cursor: pointer;
}
.box {
background: red;
border: 1px solid black;
border-radius: 10px;
height: 5rem;
display: flex;
align-items: center;
text-align: center;
color: white;
font-weight: bold;
padding: 0.5rem;
margin: 1rem;
}
<h3>Javascript-Enabled Demo</h3>
<div class="flex">
<div class="box outline-me">I'm outlined because I contain<br>the "outline-me" class</div>
<div class="box clickable">Click me to toggle outline</div>
</div>
<hr>
<input type="text" placeholder="I'm outlined when focused" />
<script>
// Called on an element to wrap with an outline and passed a styleObject
// the styleObject can contain the following outline properties:
// style, width, color, offset, radius, bottomLeftRadius,
// bottomRightRadius, topLeftRadius, topRightRadius
// It then creates a new div with the properties specified and
// moves the calling element into the div
// The newly created wrapper div receives the class "simulated-outline"
Element.prototype.addOutline = function (styleObject, hideOutline = true) {
var element = this;
// create a div for simulating an outline
var outline = document.createElement('div');
// initialize css formatting
var css = 'display:inline-block;';
// transfer any element margin to the outline div
var margins = ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'];
var marginPropertyNames = {
marginTop: 'margin-top',
marginBottom: 'margin-bottom',
marginLeft: 'margin-left',
marginRight: 'margin-right'
}
var outlineWidth = Number.parseInt(styleObject.width);
var outlineOffset = Number.parseInt(styleObject.offset);
for (var i = 0; i < margins.length; ++i) {
var computedMargin = Number.parseInt(getComputedStyle(element)[margins[i]]);
var margin = computedMargin - outlineWidth - outlineOffset;
css += marginPropertyNames[margins[i]] + ":" + margin + "px;";
}
element.style.cssText += 'margin:0px !important;';
// compute css border style for the outline div
var keys = Object.keys(styleObject);
for (var i = 0; i < keys.length; ++i) {
var key = keys[i];
var value = styleObject[key];
switch (key) {
case 'style':
var property = 'border-style';
break;
case 'width':
var property = 'border-width';
break;
case 'color':
var property = 'border-color';
break;
case 'offset':
var property = 'padding';
break;
case 'radius':
var property = 'border-radius';
break;
case 'bottomLeftRadius':
var property = 'border-bottom-left-radius';
break;
case 'bottomRightRadius':
var property = 'border-bottom-right-radius';
break;
case 'topLeftRadius':
var property = 'border-top-left-radius-style';
break;
case 'topRightRadius':
var property = 'border-top-right-radius';
break;
}
css += property + ":" + value + ';';
}
// apply the computed css to the outline div
outline.style.cssText = css;
// add a class in case we want to do something with elements
// receiving a simulated outline
outline.classList.add('simulated-outline');
// place the element inside the outline div
var parent = element.parentElement;
parent.insertBefore(outline, element);
outline.appendChild(element);
// determine whether outline should be hidden by default or not
if (hideOutline) element.hideOutline();
}
Element.prototype.showOutline = function () {
var element = this;
// get a reference to the outline element that wraps this element
var outline = element.getOutline();
// show the outline if one exists
if (outline) outline.classList.remove('hide-outline');
}
Element.prototype.hideOutline = function () {
var element = this;
// get a reference to the outline element that wraps this element
var outline = element.getOutline();
// hide the outline if one exists
if (outline) outline.classList.add('hide-outline');
}
// Determines if this element has an outline. If it does, it returns the outline
// element. If it doesn't have one, return null.
Element.prototype.getOutline = function() {
var element = this;
var parent = element.parentElement;
return (parent.classList.contains('simulated-outline')) ? parent : null;
}
// Determines the visiblity status of the outline, returning true if the outline is
// visible and false if it is not. If the element has no outline, null is returned.
Element.prototype.outlineStatus = function() {
var element = this;
var outline = element.getOutline();
if (outline === null) {
return null;
} else {
return !outline.classList.contains('hide-outline');
}
}
// this embeds a style element in the document head for handling outline visibility
var embeddedStyle = document.querySelector('#outline-styles');
if (!embeddedStyle) {
var style = document.createElement('style');
style.innerText = `
.simulated-outline.hide-outline {
border-color: transparent !important;
}
`;
document.head.append(style);
}
/*########################## example usage ##########################*/
// add outline to all elements with "outline-me" class
var outlineMeStyle = {
style: 'dashed',
width: '3px',
color: 'blue',
offset: '2px',
radius: '5px'
};
document.querySelectorAll('.outline-me').forEach((element)=>{
element.addOutline(outlineMeStyle, false);
});
// make clickable divs get outlines
var outlineStyle = {
style: 'double',
width: '4px',
offset: '3px',
color: 'red',
radius: '10px'
};
document.querySelectorAll('.clickable').forEach((element)=>{
element.addOutline(outlineStyle);
element.addEventListener('click', (evt)=>{
var element = evt.target;
(element.outlineStatus()) ? element.hideOutline() : element.showOutline();
});
});
// configure inputs to only have outline on focus
document.querySelectorAll('input').forEach((input)=>{
var outlineStyle = {
width: '2px',
offset: '2px',
color: 'black',
style: 'dotted',
radius: '10px'
}
input.addOutline(outlineStyle);
input.addEventListener('focus', (evt)=>{
var input = evt.target;
input.showOutline();
});
input.addEventListener('blur', (evt)=>{
var input = evt.target;
input.hideOutline();
});
});
</script>
마지막으로,이 접근법을 구현하려면 데모에 포함 된 것보다 더 많은 스타일링이 필요할 수 있습니다. 특히 설명하려는 요소의 스타일을 이미 지정한 경우 다시 한 번 설명하겠습니다.