Как мне стилизовать (css) переключатели и метки?

Учитывая приведенный ниже код, как мне настроить переключатели так, чтобы они находились рядом с метками, и стилизовать метку выбранного переключателя иначе, чем для других меток?

<link href = "http://yui.yahooapis.com/2.5.2/build/reset-fonts-grids/reset-fonts-grids.css" rel = "stylesheet">
<link href = "http://yui.yahooapis.com/2.5.2/build/base/base-min.css" rel = "stylesheet">

<div class = "input radio">
  <fieldset>
    <legend>What color is the sky?</legend>
    <input type = "hidden" name = "color" value = "" id = "SubmitQuestion" />
    <input type = "radio" name = "color" id = "SubmitQuestion1" value = "1"  />
    <label for = "SubmitQuestion1">A strange radient green.</label>
    <input type = "radio" name = "color" id = "SubmitQuestion2" value = "2"  />
    <label for = "SubmitQuestion2">A dark gloomy orange</label>
    <input type = "radio" name = "color" id = "SubmitQuestion3" value = "3"  />
    <label for = "SubmitQuestion3">A perfect glittering blue</label>
  </fieldset>
</div>

Также позвольте мне заявить, что я использую стили yui css в качестве основы. Если вы не знакомы с ними, их можно найти здесь:

Документация для них обоих здесь: Yahoo! Библиотека пользовательского интерфейса

@pkaeding: Спасибо. Я попробовал пару плавающих вещей, которые выглядели испорченными. Активный переключатель стиля, казалось, можно было выполнить с некоторым вводом [type = radio]: active nomination в поиске Google, но я не заставил его работать должным образом. Итак, вопрос, я думаю, больше: возможно ли это во всех современных браузерах, и если нет, то какой минимальный необходимый JS?

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
31
0
183 252
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Так вы, по крайней мере, поместите ваши кнопки и метки рядом друг с другом. Я считаю, что вторая часть не может быть выполнена только с помощью css, и для этого потребуется javascript. Я нашел страницу, которая может помочь вам и с этой частью, но сейчас у меня нет времени попробовать: http://www.webmasterworld.com/forum83/6942.htm

<style type = "text/css">
.input input {
  float: left;
}
.input label {
  margin: 5px;
}
</style>
<div class = "input radio">
    <fieldset>
        <legend>What color is the sky?</legend>
        <input type = "hidden" name = "data[Submit][question]" value = "" id = "SubmitQuestion" />

        <input type = "radio" name = "data[Submit][question]" id = "SubmitQuestion1" value = "1"  />
        <label for = "SubmitQuestion1">A strange radient green.</label>

        <input type = "radio" name = "data[Submit][question]" id = "SubmitQuestion2" value = "2"  />
        <label for = "SubmitQuestion2">A dark gloomy orange</label>
        <input type = "radio" name = "data[Submit][question]" id = "SubmitQuestion3" value = "3"  />
        <label for = "SubmitQuestion3">A perfect glittering blue</label>
    </fieldset>
</div>
Ответ принят как подходящий

Первую часть вашего вопроса можно решить с помощью только HTML и CSS; вам нужно будет использовать Javascript для второй части.

Размещение метки рядом с переключателем

Я не совсем понимаю, что вы имеете в виду под словом «рядом»: на той же линии и рядом или на разных строках? Если вы хотите, чтобы все переключатели находились в одной строке, просто используйте поля, чтобы раздвинуть их. Если вы хотите, чтобы каждый из них был на отдельной линии, у вас есть два варианта (если вы не хотите выходить на территорию float:):

  • Используйте <br />s , чтобы разделить параметры, и немного CSS, чтобы выровнять их по вертикали:
<style type='text/css'>
    .input input
    {
        width: 20px;
    }
</style>
<div class = "input radio">
    <fieldset>
        <legend>What color is the sky?</legend>
        <input type = "hidden" name = "data[Submit][question]" value = "" id = "SubmitQuestion" />

        <input type = "radio" name = "data[Submit][question]" id = "SubmitQuestion1" value = "1"  />
        <label for = "SubmitQuestion1">A strange radient green.</label>
        <br />
        <input type = "radio" name = "data[Submit][question]" id = "SubmitQuestion2" value = "2"  />
        <label for = "SubmitQuestion2">A dark gloomy orange</label>
        <br />
        <input type = "radio" name = "data[Submit][question]" id = "SubmitQuestion3" value = "3"  />
        <label for = "SubmitQuestion3">A perfect glittering blue</label>
    </fieldset>
</div>

Применение стиля к выбранной в данный момент метке + переключатель

Стилизация <label> - вот почему вам нужно прибегнуть к Javascript. Библиотека вроде jQuery идеально подходит для этого:

<style type='text/css'>
    .input label.focused
    {
        background-color: #EEEEEE;
        font-style: italic;
    }
</style>
<script type='text/javascript' src='jquery.js'></script>
<script type='text/javascript'>
    $(document).ready(function() {
        $('.input :radio').focus(updateSelectedStyle);
        $('.input :radio').blur(updateSelectedStyle);
        $('.input :radio').change(updateSelectedStyle);
    })

    function updateSelectedStyle() {
        $('.input :radio').removeClass('focused').next().removeClass('focused');
        $('.input :radio:checked').addClass('focused').next().addClass('focused');
    }
</script>

Перехватчики focus и blur необходимы для работы в IE.

Для любого браузера с поддержкой CSS3 вы можете использовать селектор соседних братьев и сестер для стилизации ваших ярлыков.

input:checked + label {
    color: white;
}  

таблица совместимости браузеров MDN говорит, что практически все текущие популярные браузеры (Chrome, IE, Firefox, Safari), как на настольных компьютерах, так и на мобильных устройствах, совместимы.

Отлично! Хорошо работает с firefox, которого достаточно для этого внутреннего веб-приложения. Это самое чистое решение. Спасибо!

cstamas 10.01.2011 03:48

Другие вопросы по теме