2015-04-09 5 views
0

У меня есть следующий пример HTML:Невозможно удалить текст-украшение с этикетки

<div class="a"> 
    <div> 
     <ul class="b"> 
      <li class="c"> 
       <input id="123" type="checkbox" checked></input> 
       <label for="123">test</label> 
      </li> 
      <li class="c"> 
       <input id="456" type="checkbox"></input> 
       <label for="456">test</label> 
      </li> 
     </ul> 
    </div> 
</div> 

И следующий CSS:

.a { 
    text-decoration: line-through; 
} 

.a .b .c input[type="checkbox"]:not(:checked) + label { 
    text-decoration: none !important; 
} 

Это может быть найдено в этом JS скрипку: https://jsfiddle.net/4q8a7yox/1/

Я хотел бы удалить линию из всех меток для непроверенных элементов. Странно то, что консоль Chrome показывает «вычисленное» текстовое украшение как «нет», но оно все еще показывает это. Все браузеры (IE10 и FF) не срабатывают аналогичным образом. Любая идея, что здесь происходит?

ответ

1

Согласно ответу this question, что это не возможно. Вы не можете удалить свойства оформления текста для дочерних узлов.

Так что лучше всего не добавлять text-decoration: line-through; к вашим .a элементам, а затем пытаться удалить их для неконтролируемых входов, но вместо этого добавьте линейный проход только для отмеченных входов.

EDIT: попробуйте это https://jsfiddle.net/b2bL8ksn/

+0

, так что это ошибка в спецификации HTML/CSS? это не имеет никакого смысла, вы можете удалить любой другой стиль CSS – automaton

+1

Потому что это не технически наследование. Прочитайте это, это объяснит намного лучше, чем я могу: http://www.sitepoint.com/web-foundations/text-decoration-css-property/ – PGBI

+0

спасибо, это объясняет это. это, пожалуй, наименее интуитивный дизайн, который я видел довольно долго. позор, это делается таким образом. – automaton

0

Измените свой селектор от .a на label.

DEMO

label { 
    text-decoration: line-through; 
} 

EDIT:

Updated Demo

использовать больше конкретики. Перевернитесь на ярлык html. для этого примера это будет:

.a > div > .b > .c > label { 
    text-decoration: line-through; 
} 
+0

это было бы для всех меток, которые не желательно. это часть гораздо большего CSS для веб-приложения, я сделал это просто для этого примера – automaton

+0

@automaton Затем используйте более конкретную информацию. развернитесь на ярлыке html. для этого примера это будет '.a> div> .b> .c> label { text-decoration: line-through; } ' – dowomenfart

+0

@automaton https://jsfiddle.net/4q8a7yox/4/ – dowomenfart

0

Можете ли вы просто отменить css?

.a .b .c input[type="checkbox"]:checked + label { 
    text-decoration: line-through; 
} 
+0

на данный момент нет, потому что условие линейного прохождения фактически применяется к родительскому объекту при другом условии. Я сделал пример проще – automaton

0

Пожалуйста, используйте этот css. Я немного изменил ваш CSS.

.a .b .c input[type=checkbox] + label { 
    text-decoration: line-through; 
    } 

    .a .b .c input[type="checkbox"]:not(:checked) + label { 
    text-decoration: inherit !important; 
    } 
+0

'! important;' не требуется просто 'none' будет работать. –

+0

это правильно. если нет переполнения css. – Annshuk

+0

Но я ненавижу '! Important' :) –

0

попробовать что:

.a .c input[type="checkbox"]:checked + label { 
text-decoration: line-through; } 
Смежные вопросы