Ember 요소를 식별하고 편집/삭제하는 방법?

아주 초보라 CSS 같은 것에 대해 죄송합니다. 아래 내용이 너무 기초적이거나/긴 글일 수 있다면 양해 부탁드립니다.

제 질문은 CSS를 통해 “ember” 요소를 어떻게 식별하고 제거할 수 있는지에 대한 것입니다. “display:none” 속성을 사용하면 될 것 같다고 추측합니다.

무작위로 예를 들어 보겠습니다. 주제 하단의 북마크 버튼을 없애고 싶다고 가정해 보겠습니다. Chrome 콘솔에서 요소를 살펴보면, 개별적인 것이 아니라 주제 푸터 버튼 전체에 대한 CSS만 볼 수 있습니다. 따라서 "display:none"을 붙이면 해당 버튼 하나뿐 아니라 모든 버튼에 적용됩니다.

CSS 버튼 태그에 display:none을 적용한 결과.

이전:

"display:none"을 적용.

이후:

하나만 제거하는 것이 가능할 것이라고 확신하며, 이전에도 다른 ember 요소(구체적으로는 작성 도구 모음의 정렬 버튼)를 삭제한 경험이 있으므로(다만 이 포럼의 다른 사용자들의 도움으로만 가능했지만), 이는 다른 대부분이 유사하게 그룹화된 ember 요소에도 적용될 것입니다.

그러나 "display:none"을 붙일 수 있는 특정 CSS 태그를 어떻게 식별해야 할까요?

다시 한번, 이 질문이 지나치게 기초적이거나 길다면 죄송합니다.

이것은 관리자 설정에서 직접 수행할 수 있으며 CSS가 필요하지 않습니다.

관리자 > 설정 > 기본 설정 > 게시 메뉴

2개의 좋아요

CSS 외부에 옵션이 있다는 것을 몰랐기 때문에, 좋은 예시를 드리지 못해 죄송합니다. 그냥 임의로 임버(ember) 요소를 하나 골랐을 뿐입니다.

더 나은 예시는 사용자 페이지에서 찾아볼 수 있을 것 같습니다. 문제는, 제가 CSS에 무엇을 넣을 수 있는지(위에서 언급한 “MD Composer Extras” 스레드의 인용된 게시물 이후와 유사하게) 어떻게 식별할 수 있는지 찾고 있다는 점입니다. 이렇게 하면 가상의 상황으로 임버 요소가 표시되지 않도록 막을 수 있습니다.

더 좋은 예시는 프로필의 활동(Activity) 섹션의 사이드바입니다. 제가 아는 한, 설정에 이 항목에 대한 특정 옵션은 없으며, CSS를 사용해야 합니다.

@b481 안녕하세요!

찾고 계신 것은 “CSS 셀렉터”(또는 줄여서 “셀렉터”)입니다. CSS 셀렉터는 스타일을 적용하려는 DOM 요소를 “찾기”(또는 당연히 선택하기) 위해 사용됩니다.

예를 들어, 지금 제가 타이핑하고 있는 곳에서 컴포저(composer) 내의 사용자 이름 셀렉터를 찾아보겠습니다(단순한 예시입니다).

우리는 마우스를 해당 요소(컴포저 내의 b481 사용자 이름) 위에 올리고 우클릭하면 "검사(Inspect)"라는 메뉴 항목이 포함된 메뉴가 팝업으로 나타납니다.

"검사"를 클릭하면 개발자 콘솔이 열립니다(현재 저는 macOS에서 Chrome을 사용 중입니다). 그리고 운이 좋으면 우리가 원하는 요소가 하이라이트됩니다.

콘솔에서 하이라이트된 요소 위에 우클릭하면 Copy–>Copy selector(셀렉터 복사) 메뉴 항목을 볼 수 있습니다.

이를 선택하고 셀렉터를 복사하면, 이 예시에서는 다음과 같은 결과를 얻습니다:

#ember433 > span > a

이것은 #ember433이 Ember에 의해 할당되기 때문에 아주 좋은 셀렉터는 아닙니다. 하지만 콘솔에서 마우스를 요소 위에 올리면 관심 있는 페이지와 콘솔 양쪽에서 요소가 하이라이트됩니다. 좋은 소식은 우리가 빠르게 그리고 쉽게 대략적인 범위에 도달했다는 것입니다.

그 다음 숨기고 싶은 요소를 찾을 수 있으며, 이 예시에서는 마우스 메뉴에서 "add attribute(속성 추가)"를 선택하여 셀렉터를 테스트할 수 있습니다.

저는 이 캡처에서 예시로 이것을 방금 수행했습니다:

그리고 이제 'b481’이라는 ID를 가진 그 요소는 DOM의 그 부분에서 숨겨진 상태입니다…

즉, 이 경우 다음 CSS를 사용하면:

span.action-title{
   display:none;
}

이를 테마에 추가하면 그 요소를 숨길 수 있습니다.

이 경우, 페이지에 동일한 셀렉터를 가진 요소가 하나 이상 있는지 확인해야 하며, 선택한 셀렉터가 탐욕스럽게 되어 숨기고 싶지 않은 다른 페이지의 요소까지 선택하지 않도록 확인해야 합니다.

셀렉터가 더 구체적일수록 좋습니다.

예를 들어, 이 경우 셀렉터가 부모 요소의 자식임을 지정하여 더 구체적으로 만들 수 있습니다(이 경우, 테스트되지 않음):

div.compose-action-title > span.action-title{
   display:none;
}

더 구체적으로 되고 있음을 볼 수 있습니다. 그리고 이 시점에서 수정하려는 요소를 찾는 방법에 대해 꽤 좋은 아이디어를 가지고 있어야 합니다.

즐거운 사냥 되세요!

마지막으로 한 가지 참고할 점:

JavaScript와 jQuery를 사용하여 요소를 선택할 수 있지만, Discourse/Ember와 같은 SPA 앱에서는 CSS 셀렉터가 잘 작동한다는 것을 발견했습니다(적어도 제 경우엔요). 저는 DOM을 어떤 “난감한” 방식으로 순회해야 할 때에만 JavaScript 셀렉터를 사용하는 경향이 있습니다(이것 또한 매우 재미있을 수 있습니다).

도움이 되기를 바랍니다.

참고:

4개의 좋아요

@neounix 정말 감사합니다. 나중에 한번 시도해볼게요.

조금 문제가 생겼습니다. 위에 게시한 “bookmarks” 예제를 삭제하려고 하는데, 붙어 있는 ember 번호가 계속 바뀌어서 삭제할 수 없습니다.

번호가 52일 때 사용했던 코드는 다음과 같습니다. !important를 빼고 시도해 보기도 했습니다.

span.ember52.ember-view{
display:none !important;
}

좋은 시작이지만, 더 개선이 필요합니다 @b481

네, 이미 말씀드린 바와 같이 @b481, 에임버가 할당한 클래스와 ID를 기반으로 셀렉터를 선택하지 말아야 합니다.

에임버가 할당한 클래스가 아닌 셀렉터를 사용해야 합니다. 이전 답변에서 어떻게 해야 하는지 설명해 드렸습니다.

참고: 참고로, 이렇게 하면 DOM에서 이러한 항목을 "삭제"하는 것이 아닙니다(위에서 언급하신 대로). 단순히 “숨기는” 것일 뿐이며, 이는 다른 날 이야기할 주제입니다 :slight_smile:

에임버가 자동으로 할당하지 않은 셀렉터를 사용해 주세요.

도움이 되길 바랍니다.


참고:

(예시에서처럼) 주제 하단의 북마크 버튼을 숨기려는 것이라면, 다음을 시도해 보셨나요:

#topic-footer-button-bookmark
{
  display:none;
}

죄송하지만, 게시물을 보면 정확히 DOM(예시 또는 실제)의 어떤 요소를 숨기고 싶은지 알기 어렵습니다.

1개의 좋아요

해당 섹션 중 하나를 숨기려면 다음과 같이 하세요:

.user-secondary-navigation li:nth-child(3) {
  display: none;
}

숨기려는 항목의 번호로 치환하면 됩니다.

물론 목록의 순서가 예측 가능한 경우에만 작동하며, 그렇지 않으면 CSS로는 해결할 수 없습니다.

2개의 좋아요

좀 시간이 걸렸지만, 이제 드디어 요령을 터득했습니다.

@neounix 님, 정말 큰 도움이 되었습니다. 제 포럼에도 큰 도움이 될 것 같습니다.

2개의 좋아요

“전체 인용” 옵션만 삭제하는 방법을 아시는 분 계신가요? 왼쪽에 있는 옵션은 그대로 두면서요. 두 옵션은 동일한 CSS와 동일한 부모 div를 공유하고 있어서, 한쪽만 제거하는 방법을 찾지 못했습니다.

@b481 안녕하세요

[ attribute=value ] 선택자를 사용할 수 있습니다:

참고:

https://www.w3schools.com/cssref/sel_attribute_value.asp

속성은 title이고 값은 Blockquote (⌘⇧9)입니다

예시 (미테스트)

button[title="Blockquote (⌘⇧9)"]
{
  display:none;
}

아니면 다음과 같이 사용할 수도 있습니다:

button[title*="Blockquote"]
{
  display:none;
}

테스트를 해보지 않았으므로, 조정해야 할 수 있습니다.

추가로, 더 “폭력적인” 방법으로는 svg 요소만 숨기는 것이 있습니다:

svg.d-icon-quote-right
{
   display:none;
}

해결할 수 있는 다른 CSS 선택자들도 있습니다. 다른 분들께서 더 나은 선택자를 제안해 주실 것 같습니다.

이 답변이 도움이 되기를 바랍니다.

다음도 참고하세요:

  1. CSS Attribute Selectors

  2. 아래 링크

2개의 좋아요