色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

有CSS父選擇器嗎?

李中冰1年前8瀏覽0評論

我如何選擇& lt李& gt是錨元素的直接父元素。

舉個例子,我的CSS大概是這樣的:

li < a.active {
    property: value;
}

顯然,使用JavaScript有很多方法可以做到這一點,但我希望CSS級中存在某種固有的變通方法。

我試圖設計的菜單是由CMS提供的,所以我不能將活動元素移動到& lt李& gt元素...(除非我對菜單創建模塊進行主題化,這是我不愿意做的)。

目前還沒有一種方法可以在所有瀏覽器中選擇CSS中元素的父元素。

選擇器4級工作草案包括一個:has()偽類,它將提供這一功能。它將類似于jQuery實現,但目前不被Firefox支持。

li:has(> a.active) { /* styles to apply to the li tag */ }

Firefox是目前唯一默認不支持它的主流瀏覽器。

與此同時,如果您需要選擇一個完全跨瀏覽器支持的父元素,您將不得不求助于Firefox中的JavaScript。

您可以使用:has() CSS偽類

但它對瀏覽器的支持有限(目前Firefox不支持)。

我認為你不能只在CSS中選擇父節點。

但是既然你已經有了。活動類,將該類移動到li(而不是a)會更容易。這樣你就可以只通過CSS訪問li和a。

您可以使用以下腳本:

*! > input[type=text] { background: #000; }

這將選擇文本輸入的任何父項。但是等等,還有很多。如果需要,您可以選擇指定的父項:

.input-wrap! > input[type=text] { background: #000; }

或者在它活躍時選擇它:

.input-wrap! > input[type=text]:focus { background: #000; }

查看這個HTML:

<div class="input-wrap">
    <input type="text" class="Name"/>
    <span class="help hide">Your name sir</span>
</div>

當輸入激活時,您可以選擇span.help并顯示它:

.input-wrap! .help > input[type=text]:focus { display: block; }

還有更多的能力;只需查看插件的文檔。

順便說一句,它在InternetExplorer中工作。

正如其他幾個人提到的,沒有辦法只使用CSS來樣式化元素的父元素,但是下面的例子可以和jQuery一起使用:

$("a.active").parents('li').css("property", "value");

沒有父選擇器;就像沒有先前的兄弟選擇器一樣。沒有這些選擇器的一個很好的理由是,瀏覽器必須遍歷一個元素的所有子元素,以確定是否應該應用一個類。例如,如果您寫道:

body:contains-selector(a.active) { background: red; }

然后,瀏覽器將不得不等待,直到它已經加載并解析了所有內容,直到& lt/body & gt;以確定頁面是否應該是紅色的。

為什么我們沒有父選擇器這篇文章詳細解釋了這一點。

偽元素:focus-within允許在后代擁有焦點時選擇父元素。

如果元素具有tabindex屬性,則該元素可以被聚焦。

瀏覽器支持焦點在內

塔賓德克斯

例子

.parent:focus-within {
  background: hsl(199deg, 65%, 73%);
}

/* demo styles */
body {
  margin: 0;
}
.parent {
  background: hsl(0, 0%, 80%);
  min-height: 100vh;
  display: grid;
  place-content: center;
}
.child {
  background: hsl(0, 0%, 0%);
  color: white;
  padding: 3rem;
  outline: 0;
  cursor: pointer;
  font: 18px/1.25 sans-serif;
  width: 20ch;
}

<div class="parent">
  <div class="child" tabindex="0">
    Click or Focus on me, my parent will change.
  </div>
</div>

在CSS2中沒有辦法做到這一點。您可以將該類添加到li中并引用a:

li.active > a {
    property: value;
}

嘗試將a切換到阻止顯示,然后使用您想要的任何樣式。a元素將填充li元素,您可以根據需要修改它的外觀。不要忘記將li填充設置為0。

li {
  padding: 0;
  overflow: hidden;
}
a {
  display: block;
  width: 100%;
  color: ..., background: ..., border-radius: ..., etc...
}
a.active {
  color: ..., background: ...
}

CSS選擇器“通用兄弟組合器”可以用于你想要的:

E ~ F {
    property: value;
}

這匹配任何前面有E元素的F元素。

據我所知,CSS 2中沒有。CSS 3有更健壯的選擇器,但是并沒有在所有的瀏覽器中實現。即使有了改進的選擇器,我也不相信它能完全實現您在示例中指定的功能。

這是選擇器級別4規范中討論最多的方面。 這樣,選擇器就能夠根據子元素的樣式,在給定的選擇器(!idspnonenote)后使用感嘆號。).

例如:

body! a:hover{
   background: red;
}

如果用戶懸停在任何錨點上,將設置紅色背景色。

但是我們必須等待瀏覽器的實現:(

您可以嘗試使用hyperlink作為父元素,然后在懸停時更改內部元素。像這樣:

a.active h1 {color:red;}

a.active:hover h1 {color:green;}

a.active h2 {color:blue;}

a.active:hover h1 {color:yellow;}

這樣,您可以基于父元素的翻轉來更改多個內部標記中的樣式。

我知道OP正在尋找一個CSS解決方案,但是使用jQuery很容易實現。在我的情況下,我需要找到& ltul & gt& lt的父標記span & gt標簽包含在子& lt李& gt。jQuery有:has選擇器,所以可以通過它包含的子節點來識別父節點:

$("ul:has(#someId)")

將選擇具有id為someId的子元素的ul元素?;蛘呋卮鹱畛醯膯栴},類似下面的內容應該可以解決問題(未經測試):

$("li:has(.active)")

下面是一個使用指針事件和懸停的方法:

<!doctype html>
<html>
    <head>
        <title></title>
        <style>
/* accessory */
.parent {
    width: 200px;
    height: 200px;
    background: gray;
}
.parent, 
.selector {
    display: flex;
    justify-content: center;
    align-items: center;
}
.selector {
    cursor: pointer;
    background: silver;
    width: 50%;
    height: 50%;
}
        </style>
        <style>
/* pertinent */
.parent {
    background: gray;
    pointer-events: none;
}
.parent:hover {
    background: fuchsia;
}
.parent 
.selector {
    pointer-events: auto;
}
        </style>
    </head>
    <body>
        <div class="parent">
            <div class="selector"></div>
        </div>
    </body>
</html>

在CSS選擇器4規范中,CSS引入了一個名為:has()的新選擇器,它最終允許我們選擇父代。這意味著我們將能夠定位一個包含特定子元素的CSS元素。Safari已經支持這一功能,Chrome 105也支持。顯示了完整的支持表 給你。

父選擇器工作方式 在CSS中,如果我們想要選擇一些東西,我們使用下行DOM的選擇器。

例如,在div標簽中選擇一個p標簽如下所示:

div p {
   color: red;
}

直到現在,還不能真正選擇包含p標簽的div標簽,這意味著我們必須求助于Javascript。這沒有在CSS中實現的主要原因是這是一個相當昂貴的操作。CSS解析起來相對較快,但是選擇父標簽需要相對大量的處理。

使用:has選擇器,我們現在可以選擇有p個子元素的div元素,或者任何選擇器的正常組合。

例如,選擇一個帶有子元素p的div,如下所示:

div:has(p) {
  color: red;
}

這將使任何帶有子元素p的div變成紅色。

將父選擇與其他選擇器相結合 就像任何其他CSS選擇器一樣,我們可以在特定的情況下組合使用它。 例如,如果您只想選擇具有直接span子級的div標記:

div:has(> span) {
  color: red;
}

正如:的詞匯所暗示的,它不僅僅局限于父母選擇。

例如,下面我們可以選擇一個span,它:有一個兄弟div:

span:has(+ div) {
color: red;
}

或者甚至通過使用:not()選擇器選擇一個沒有子元素的元素。

例如,下面將選擇任何沒有p子級的div:

div:not(:has(p)) {
 color: red;
}

在CSS中選擇只包含文本的元素 CSS中一個非常常見的問題是:empty標簽不選擇包含任何文本的元素——所以有時一個元素可以包含一個空格,而:empty將不適用。has選擇器使我們能夠選擇只包含文本節點而不包含其他子元素的元素。

盡管這對于simply :empty elements with spaces(因為這將選擇任何只有文本而沒有額外的HTML DOM元素的元素)來說不是完美的解決方案,但它確實讓我們能夠選擇只有文本節點的DOM元素,這在以前是不可能的。我們可以通過下面的代碼實現這一點:

div:not(:has(*)) {
  background: green;
}

目前沒有父選擇器& amp它甚至沒有在W3C的任何會談中被討論過。你需要了解CSS是如何被瀏覽器評估的,才能真正理解我們是否需要它。

這里有很多技術性的解釋。

喬納森·斯努克解釋了CSS是如何被評估的。

克里斯·科伊爾談父母選擇者。

Harry Roberts再次講述如何編寫高效的CSS選擇器。

但是妮可·沙利文有一些有趣的積極趨勢。

這些人都是前端開發領域的頂尖高手。

有一個插件擴展了CSS,增加了一些非標準的功能,在設計網站時非常有用。它叫做EQCSS。

EQCSS增加的一個功能是父選擇器。它適用于所有瀏覽器,InternetExplorer8及更高版本。格式如下:

@element 'a.active' {
  $parent {
    background: red;
  }
}

因此,在這里,我們在每個元素a.active上打開了一個元素查詢,對于該查詢中的樣式,像$parent這樣的東西是有意義的,因為有一個引用點。瀏覽器可以找到父節點,因為它與JavaScript中的parentNode非常相似。

這里有一個$parent的演示和另一個在InternetExplorer8中工作的$parent演示,還有一個截圖以防你沒有InternetExplorer8來測試。

EQCSS還包括元選擇器:$prev用于所選元素之前的元素,而$this僅用于那些匹配元素查詢的元素,等等。

只是一個橫向菜單的想法...

HTML的一部分

<div class='list'>
  <div class='item'>
    <a>Link</a>
  </div>
  <div class='parent-background'></div>
  <!-- submenu takes this place -->
</div>

CSS的一部分

/* Hide parent backgrounds... */
.parent-background {
  display: none; }

/* ... and show it when hover on children */
.item:hover + .parent-background {
  display: block;
  position: absolute;
  z-index: 10;
  top: 0;
  width: 100%; }

更新的演示和其余代碼

另一個如何使用文本輸入的例子——選擇父字段集

現在都2019年了,CSS嵌套模塊的最新草案居然有這樣的東西。介紹@nest at-rules。

3.2.嵌套At規則:@nest

雖然直接嵌套看起來不錯,但它有些脆弱。一些有效的嵌套選擇器,比如。foo & amp、都是不允許的,以某些方式編輯選擇器可能會使規則意外無效。同樣,一些人發現嵌套很難從視覺上與周圍的聲明區分開來。

為了幫助解決所有這些問題,該規范定義了@nest規則,它對如何有效地嵌套樣式規則施加了更少的限制。它的語法是:

@ nest = @ nest & lt選擇器& gt{ & lt聲明列表& gt}

@nest規則的功能與樣式規則相同:它從選擇器開始,包含應用于選擇器匹配的元素的聲明。唯一的區別是@nest規則中使用的選擇器必須是嵌套的,這意味著它在某個地方包含一個嵌套選擇器。如果一個選擇器列表中的所有單個復合選擇器都是嵌套的,那么這個列表就是嵌套的。

(從上面的URL復制粘貼)。

本規范下的有效選擇器示例:

.foo {
  color: red;
  @nest & > .bar {
    color: blue;
  }
}
/* Equivalent to:
   .foo { color: red; }
   .foo > .bar { color: blue; }
 */

.foo {
  color: red;
  @nest .parent & {
    color: blue;
  }
}
/* Equivalent to:
   .foo { color: red; }
   .parent .foo { color: blue; }
 */

.foo {
  color: red;
  @nest :not(&) {
    color: blue;
  }
}
/* Equivalent to:
   .foo { color: red; }
   :not(.foo) { color: blue; }
 */

CSS父選擇器(也稱為:has()選擇器)終于登陸Safari TP 137。該功能目前也正在Chrome中實現。(MDN文檔)

父選擇是通過偽類:has()完成的。例如,div:has(& gt;。子)將選擇全部& ltdiv & gt子元素有一個子類。

其他示例:

選擇元素的直接父級

<div>
  <p>Child Element</p>
</div>

div:has(> p)

選擇元素的所有父元素

<div id="grandparent">
      <div id="parent">
            <div id="child"></div>
      <div>
</div>

以下選擇器將同時選擇祖父母和父母

div:has(.child)

您還可以將它用于嵌套選擇器,甚至用于其他偽類:

div:has(> :nth-child(10))

其他有效的CSS操作符可用于定制查詢。

留意caniuse.com/css-has的瀏覽器兼容性。

W3C排除了這樣的選擇器,因為它會對瀏覽器產生巨大的性能影響。

從技術上講,沒有直接的方法可以做到這一點。但是,您可以使用jQuery或JavaScript來解決這個問題。

然而,你也可以這樣做。

a.active h1 {color: blue;}
a.active p {color: green;}

jQuery

$("a.active").parents('li').css("property", "value");

如果您想使用jQuery實現這一點,這里是jQuery父選擇器的參考。

簡短的回答是否定的;在CSS的這個階段我們沒有父選擇器,但是如果你不需要交換元素或者類,第二個選擇是使用JavaScript。大概是這樣的:

var activeATag = Array.prototype.slice.call(document.querySelectorAll('a.active'));

activeATag.map(function(x) {
  if(x.parentNode.tagName === 'LI') {
    x.parentNode.style.color = 'red'; // Your property: value;
  }
});

或者,如果在應用程序中使用jQuery,可以用一種更簡單的方式:

$('a.active').parents('li').css('color', 'red'); // Your property: value;

雖然目前標準CSS中沒有父選擇器,但是我正在做一個(個人的)項目,叫做axe(即。增強的CSS選擇器語法/ ACSSSS ),在其7個新的選擇器中,包括:

直接父選擇器& lt(這使得相反的選擇能夠& gt) 任何祖先選擇器^(它使相反的選擇能夠

轉向

enter image description here

點擊時。

基于子元素更改父元素目前只能在我們有& lt輸入& gt父元素中的元素。當輸入獲得焦點時,其對應的父元素會受到CSS的影響。

下面的例子將幫助你理解在CSS中使用:focus-within。

.outer-div {
  width: 400px;
  height: 400px;
  padding: 50px;
  float: left
}

.outer-div:focus-within {
  background: red;
}

.inner-div {
  width: 200px;
  height: 200px;
  float: left;
  background: yellow;
  padding: 50px;
}

<div class="outer-div">
  <div class="inner-div">
    I want to change outer-div(Background color) class based on inner-div. Is it possible?
    <input type="text" placeholder="Name" />
  </div>
</div>