2010-11-26 4 views
2

레이아웃 용 CSS 파일이있는 웹 양식 앱이 있습니다. ID를 사용하지 않고 CSS에서 수행하기가 훨씬 더 어려울 내 요소 중 하나는 가시성 서버 측을 제어하므로 runat="server"이어야합니다.ASP.NET 웹 양식의 CSS 선택자

<div id="x"> 
    <div id="whatever" runat="server" visible="false"> 
     <div id="y"> 
      .... 
     </div> 
    </div> 
</div> 

내 문제는 CSS에서, 내 선택기와 그 whatever 사업부를 무시하는 방법을 몰라, 나는이 CSS를 인라인 및 클라이언트 제어 번역 서버에 넣어하지 않는 한, 내가 모르는 것입니다 컨트롤은 런타임까지 이름을 지정합니다.

#x 
{ 
    position:absolute; 
    height:30px; 
} 

    #x #whatever??? #y img 
    { 
     margin:-7px 15px 0 30px; 
    } 

    #x #whatever??? div 
    { 
     width:250px; 
     float:left; 
    } 
etc. 

어떻게 해결해야합니까? 출력을 렌더링하지 않지만 해당 내용의 가시성/렌더링을 제어하는 ​​데 사용할 수있는 서버 측 컨테이너 컨트롤이 있습니까? 아니면 해당 중간 div를 무시하는 트릭이 CSS에 있습니까?

이것은 마스터 페이지에 x div가 있고, whatevery div가 모두 페이지 자체에 있다는 사실 때문에 혼란 스럽습니다. MVC를 사용하는 경우 이것이 문제가되지 않을 것이라는 것을 알고 있지만이 시점에서 전환은 옵션이 아닙니다.

답변

1

CSS 클래스 선택기를 사용하면 CSS ID 선택기만큼 빠르지는 않지만이 문제를 빠르고 쉽게 해결할 수 있지만 항상 작동합니다 (div 요소의 클라이언트 ID를 계산할 수는 있지만 예를 들어 Panel 컨트롤, 리피터 컨트롤 등으로 이동)

+0

을,하지만 몇 가지로 실행중인 :

경우 누군가가 필요합니다 그냥, 당신은이처럼 자바 스크립트 프레임 워크에 의해 생성 된 ID를 가져올 수 있습니다 ID/클래스에 의해 지정되지 않은 구성 요소의 문제점 (예 :'#x div'). 그것의 일부를 다시하는 문제 일지 모르지만 나는 CSS에 정통하지 않습니다. 내가 가지고있는 .css 파일은 외부 디자이너로부터 왔고, 필요가 없다면 그것을 바꾸지 않기를 원할 것입니다. – Kendrick

+0

.x_class div를 할 수 없습니까? 이것은 단지 CSS를 약간 다시 쓰고 클래스 선택기로 id 선택자를 변환하는 것을 의미합니다. – WiseGuyEh

+0

클래스로 할 수 있는지 몰랐습니다.우선 저것을 확인해 볼 것이고, 그러면 저의 경우 @JonVD의 추천이 나에게 도움이되지 않을 것입니다. – Kendrick

2

만약 당신의 예제가 맞는지 모르겠지만 뭔가를 선택할 때마다 전체 트리를 뚫고 지나가고있는 것처럼 보입니다. 이것은 CSS에 필요하지 않은, 다음은 트릭을 할 것입니다 :

직접 'x'를 선택

#x 
{ 
    position:absolute; 
    height:30px; 
} 

'Y'

#y img 
{ 
    margin:-7px 15px 0 30px; 
} 
의 하위 어떤 이미지

'x'의 자손 인 모든 div

#x div 
{ 
    width:250px; 
    float:left; 
} 

Here은 편리하고 이해하기 쉬운 선택기 설명입니다. 더 많이 또는 덜 필요한 것 하나만 잡고 어딘가에 here (내가 가장 좋아하는 테스트 사이트)과 같은 곳에서 테스트 해보십시오.

+0

여기에있는 문제는 중개자 div가 속성을 얻는 것을 원하지 않는다는 것입니다. # div 아래에 div가 필요합니다. 서버 측 내부에 직접 중첩 된 다른 클라이언트 측 div를 추가하고 거기에서 참조 할 수도 있습니다. 어쨌든 탐색 할 수있는 좋은 방법 인 것 같습니다 ... – Kendrick

+0

이 경우 'y'div를 래퍼로 유지하고 '#y div'선택기를 사용하여 래퍼에있는 모든 하위 div를 가져옵니다. 이런 식으로 그 성가심을 모두 피할 수 있습니다. – JonVD

1

.net 4를 사용하는 경우 서버 측에서 지정한 동일한 ID가 필요한 블록에 ClientIDMode="Static"을 지정할 수 있습니다. 내가 클래스 선택기로 전환 한 시도

document.getElementById('<%= some_control.ClientID %>');