2015-01-07 3 views
0

ПроблемыСкрыть или удалить часть содержимого HTML-элемент с помощью CSS

Я не могу изменить путь в whcih ниже HTML выводится, но мне нужно, чтобы изменить способ, в котором отображается его , Я знаю, что могу достичь желаемых результатов с jQuery, но я хотел бы сделать это с чистым CSS возможным?

Что именно мне нужно сделать

Мне нужно, чтобы показать input из приведенного ниже HTML, но сам label является излишним. Тег может оставаться или уходить, я не беспокоюсь об этом, но Username и <br> нужно уйти.

Очевидно, я не могу использовать label[for="user_login"]{ display: none; }, так как это не удастся, потому что оно скроет все в селекторе.

Оригинальный HTML

<label for="user_login"> 
    Username 
    <br> 
    <input id="user_login" class="input" type="text" size="20" value="" name="log"> 
</label> 

Нужный HTML-

<label for="user_login"> 
    <input id="user_login" class="input" type="text" size="20" value="" name="log"> 
</label> 

JQuery подход

$(document).ready(function(){ 

    var username_label = $('label[for="user_login"]'), 
     username_input = username_label.find('input'); 

    username_label.html(username_input); 

}); 

Почему я не хочу использовать jQuery

Подходящий логин для отображения отображается по-разному в зависимости от размера экрана. На небольших устройствах я запрашиваю ярлыки скрытые (чтобы сэкономить место), а на больших экранах ярлык все равно должен быть видимым. Используя подход jQuery, вы удалите метки в обоих случаях.

Хотя я знаю, что могу проверить экран в зависимости от нагрузки, а затем использовать событие resize (при необходимости), при изменении размера экрана (например, на планшете, с портретом на пейзаж) ярлыки могут быть удалены, а затем нет видимые, когда они должны быть.

Вопрос

Могу ли я достичь этого результата (или аналогичный) с чистым CSS?

ответ

2

Попробуйте CSS:

label { 
    visibility:collapse; 
} 

label input { 
    visibility: visible; 
} 

Вот jsfiddle: http://jsfiddle.net/entgqjzk/

Я изменил CSS я нашел на Hide text node in element, but not children

редактировать:

Это не удалите пробелы, как вы указали. я не могу придумать ничего лучше, чем комбинация JQuery и CSS, это не самый красивый код никогда, но он работает в этой ситуации, в которой вы не имеете контроля над HTML:

http://jsfiddle.net/entgqjzk/2/

класс CSS «скрытой для мобильных» может быть использован, например, в сочетании с отдельной таблицей стилей для мобильных устройств (или псевдо-селекторов для различных размеров экрана)

+0

Очень близко ... В то время как это скрывает 'Username' и' '
пространство, которое они занимают по-прежнему принято над' inptu'. Если вы знаете, как удалить это, я был бы великодушен. Благодарю. –

+0

Обновлено мой ответ – geoffreydv

+0

Спасибо. В сочетании с вашим первоначальным предложением я сейчас работаю над установкой 'label' в' position: relative; 'и' input' в 'position: absolute;' и 'top: 0;'. Он еще не совсем работает, но почти там ... –

0

вы пробовали классы псевдо? http://css-tricks.com/a-call-for-nth-everything/

+0

У меня есть, и пока ссылка, которую вы поставляете, отличная, большая часть контента основана на 'whouldn't be good if this existed ', в отличие от доступных в настоящее время псевдо-классов. Благодарю. –

0

Благодаря @geoffreydv за идею использования visibility.

В связи с этим я смог использовать CSS ниже, чтобы эффективно скрыть пробелы, занимаемые текстом внутри метки.

body.login #loginform label[for="user_login"], 
body.login #loginform label[for="user_pass"]{ 
    display:  inline-block; 
    height:   50px; 
    position:  relative; 
    visibility:  collapse; 
    width:   300px; 
} 

body.login #loginform input#user_login, 
body.login #loginform input#user_pass{ 
    margin:   0; 
    position:  absolute; 
    top:   0; 
    visibility:  visible; 
    width:   300px; 
} 
Смежные вопросы