CSS에서 자녀가 부모의 곡선 테두리를 준수하도록 강제


135

다른 div 안에 div가 있습니다. #outer그리고 #inner. #outer곡선 테두리와 흰색 배경이 있습니다. #inner곡선 테두리와 녹색 배경이 없습니다. #inner의 곡선 경계를 넘어 확장됩니다 #outer. 어쨌든 이것을 막을 수 있습니까?

#outer { 
        display: block; float: right; margin: 0; width: 200px;
        background-color: white; overflow: hidden;
        -moz-border-radius: 10px; 
        -khtml-border-radius: 10px; 
        -webkit-border-radius: 10px; 
        border-radius: 10px; 
    }
    #inner { background-color: #209400; height: 10px; border-top: none; }
 <div id="outer">
        <div id="inner"></div>
        <!-- other stuff needs a white background -->
        <!-- bottom corners needs a white background -->
    </div>


    

아무리 노력해도 여전히 겹칩니다. 어떻게 만들 수 있습니다 #inner에 순종하고 채우기 #outer의 경계?

편집하다

다음 해킹은 현재 목적을 달성했습니다. 그러나 문제는 (CSS3 및 웹 브라우저 작가에게) 아마도 자식 요소가 부모의 곡선 테두리를 따르지 않고 강제로 적용 해야하는 이유는 무엇입니까?

내 필요에 따라이 문제를 해결하기위한 해킹으로 곡선을 개별 테두리에 할당 할 수 있습니다. 내 목적을 위해 내부 요소의 맨 위 두 개에 곡선을 지정했습니다.

#inner {
    border-top-right-radius: 10px; -moz-border-radius-topright: 10px; -webkit-border-top-right-radius: 10px;
    border-top-left-radius: 10px; -moz-border-radius-topleft: 10px; -webkit-border-top-left-radius: 10px;
}

내부 요소와 정확히 동일한 테두리 반경을 설정하려고 했습니까?
Daniel O'Hara

1
그러나 내부 요소의 경계 반경이 바닥에 똑바로 있기를 원합니다. 특정 모서리에만 테두리 반경을 설정할 수 있습니까?
Daniel Bingham

확실 해요 당신은 그들처럼 할당 할 수도 있습니다 border-radius: TL TR BL BR.
Daniel O'Hara

29
나는 이것을 "아이가 부모의 명령에 순종하도록 강요"라고 읽었습니다. :)
Bennor McCarthy

사파리를 제외 -moz-border-radius하고 border-radius네 개의 값 속기로서 사용될 수있다 10px 10px 0 0. 그러나 Safari의 경우 개별적으로 설정해야합니다.
Yi Jiang

답변:


199

사양에 따르면 :

테두리 이미지가 아닌 상자의 배경은 적절한 곡선에 클리핑됩니다 ( '배경 클립'에 의해 결정됨). 경계 또는 패딩 가장자리에 클리핑되는 다른 효과 (예 : '표시'이외의 '오버 플로우')도 곡선에 클리핑되어야합니다. 대체 된 요소의 내용은 항상 내용 가장자리 곡선으로 잘립니다. 또한 테두리 가장자리의 곡선 외부 영역은 요소 대신 마우스 이벤트를 허용하지 않습니다.

http://www.w3.org/TR/css3-background/#the-border-radius

이것은 overflow: hidden켜짐 #outer이 작동해야 함을 의미합니다 . 그러나 Firefox 3.6 이하에서는 작동하지 않습니다. 이것은 Firefox 4에서 수정되었습니다.

둥근 모서리가 이제 내용과 이미지를 자릅니다 (오버플로 : 표시가 설정되지 않은 경우).

https://developer.mozilla.org/en/CSS/-moz-border-radius

따라서 여전히 수정 사항이 필요합니다.

#outer {
  overflow: hidden;
}

#inner {
  -moz-border-radius: 10px 10px 0 0;
}

여기에서 작동하는지 확인하십시오 : http://jsfiddle.net/VaTAZ/3/


1
빙고, Firefox 3.6으로 테스트하고있었습니다. 이것이 설명합니다.
Daniel Bingham

1
게임 후반에 등장하는 사람 overflow: hidden;은 현재 FF 버전을 작업 중입니다. 요구 사항에 따라 테스트를 다시 수행하십시오.
BillyNair

바이올린은, 여유를 가지고 그냥 싶어 노트의 실제 효과 때문에 overflow hidden숨겨져
user10089632

오버 플로우 컨텐츠를 숨기지 않으려면 어떻게해야합니까? 숨겨진 오버플로는 툴팁 팝업 및 창 메뉴와 같은 항목을 차단합니다.
mae

1
오버플로를 추가하십시오 : 숨김; DIV 경계선 반경
Nader

1

이것에 무슨 문제가 있습니까?

#outer { 
    display: block; float: right; margin: 0; width: 200px;
    background-color: white; overflow: hidden;
}
#inner { background-color: #209400; height: 10px; border-top: none; }

#outer, #inner{
    -moz-border-radius: 10px; 
    -khtml-border-radius: 10px; 
    -webkit-border-radius: 10px; 
    border-radius: 10px; 
}

바닥이 뾰족 해지기를 원합니다. 두 개의 내부 div가 필요합니다. 하나는 다른 마진과 겹치도록 마진이 주어집니다.
Daniel Bingham

흠 ... 개별 코너를 설정할 수 있습니다. 그래서 나는 단지 두 가지를 설정했습니다.
Daniel Bingham

1

바닥에 날카로운 모서리를 원하면 다음을 사용하십시오.

왼쪽 상단 반경 : 10px;
경계 상단 오른쪽 반경 : 10px; 

-경계 경계 반경-왼쪽
-경계 경계 반경-오른쪽

0

내부 div에 상대적인 position : relative를 만들어 보셨습니까?

그건:

#inner { 
    background-color: #209400; 
    height: 10px; 
    border-top: none; 
    position: relative; 
    left: 15px; 
    top: 15px; 
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.