Хороший CSS для флеш-памяти (так называемые информационные сообщения в Rails, рычит в OSX) - PullRequest
13 голосов
/ 07 мая 2009

Мне трудно заставить CSS работать так, как я хочу, для вспышек (тех маленьких сообщений, которые появляются, когда вы входите в систему или делаете что-то или еще что-то, чтобы подтвердить свое действие, например, в Rails).

Я хочу это:

  • жить в любом произвольном div
  • выглядит как центрированная рамка с текстом
  • быть настолько большим, насколько это необходимо, чтобы уместить текст (если он меньше указанной максимальной ширины) или обернуть текст (если он больше)
  • имеет текст по центру или по левому краю (или по комбинации), в зависимости от вспышки (например, короткие ошибки центрируются; более длинные вводные инструкции для новичков выровнены по левому краю); дополнительный класс CSS (например, «flash info left») для поддержки этого в порядке
  • хорошо играть, если на странице рядом друг с другом есть несколько вспышек (как в примере)
  • предпочтительно состоит из одного элемента с классом вокруг текста, а не текста внутри элемента внутри элемента-оболочки
  • желательно быть совместимым с YUI CSS и чистым CSS (не JS)
  • работает правильно на IE7 +, FFx 3+, Safari 3+; работает достаточно хорошо в старых браузерах

Большая часть CSS, которую я видел для этого, не делает ни одного из них - например, большинство из них задают фиксированную ширину, что означает, что либо она плохо обернута, либо слишком много отступов.

Как я могу это сделать? (Или: почему я не могу?)

Вот мой текущий CSS:

<div class="flash info">
  <span class="close"><a href="AJAX callback">X</a></span>
  Some informational text here that can be closed w/ the X
</div>
<div class="flash error">
  Some other simultaneous error
</div>

.flash {
    text-align: center;
    padding:    .3em .4em;
    margin:     0 auto .5em;
    clear:      both;
    max-width:  46.923em; /* 610/13 */  
    *max-width: 45.750em; /* 610/13.3333 - for IE */
}

.flash.error {
    border: thin solid #8b0000;
    background: #ffc0cb;
}

.flash.notice, .flash.info {
    border: thin solid #ff0;
    background: #ffe;
}

.flash.warning {
    border: thin solid #b8860b;
    background: #ff0;
}

.flash .close {
    float:  right;
}

.flash .close a {
    color:              #f00;
    text-decoration:    none;
}

Бонусные баллы: я достиг того, что хочу, только частично с кодом подсказки ниже; а именно, он не способен оборачиваться.

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

Some text with <span class="tooltip">info <span>i can has info?</span></span> about a word

.tooltip {
  position: relative; /*this is the key*/
    background-color: #ffa;
}

.tooltip:hover{
    background-color: #ff6;
}

.tooltip span {
    display: none
}

.tooltip:hover span { /*the span will display just on :hover state*/
    z-index:        1; 
    display:        block;
    position:       absolute;
    top:            1.6em; 
    left:           0;
    border:         thin solid #ff0;
    background:     #ffe;
    padding:        .3em .6em;
    text-align:     left;
    white-space:    nowrap;
}

Спасибо!

  • Sai

Ответы [ 4 ]

4 голосов
/ 28 мая 2009

Это интересные попытки уведомлений в Javascript, первая имеет центрированное уведомление, может быть, вы можете получить вдохновение от этого.

рычание как (mootools)

Рев (это действительно хорошо)

2 голосов
/ 02 июня 2009

Во-первых, при поиске таких стилей вы должны называть эти всплывающие окна "рычаниями". Это имя, которое использует Apple, и использует их довольно агрессивно, так что это имя, которое вы должны искать.

Во-вторых, таблица стилей Roar очень доступна, почему бы вам не скачать и не скопировать ее. Пока всплывающее окно находится в JS, сгенерированный скрипт представляет собой чистый HTML.

mootools, JQ и Ext имеют свои собственные проекты уведомлений Growl.

В-третьих, если вы просто хотите создать свой собственный, если у вас есть размеры, которые он всегда будет использовать, вам, вероятно, лучше всего сделать одну или две графики и просто разместить текст поверх их центра.

1 голос
/ 01 апреля 2013

Alertify.js имеет приятный пользовательский интерфейс и прост в использовании, вы также можете попробовать его.

http://fabien -d.github.com / alertstify.js /

1 голос
/ 01 июня 2009

Это большой вопрос, но я постараюсь разбить его.

Во-первых, в отношении ваших первых трех требований вы, вероятно, застряли, если у вас нет роскоши диктовать свою платформу браузера. Чтобы центрировать блок в произвольном DIV в большинстве браузеров, необходимо указать ширину для внутреннего элемента блока. Это должен быть блочный элемент, чтобы вы могли сделать его похожим на прямоугольник (раскраска, рамка). Вы можете уйти без ширины в браузерах, которые поддерживают display: inline-block. Если вы хотите, вы можете попробовать взломать это с помощью некоторого сценария, задав ширину в зависимости от длины внутреннего текста, вплоть до некоторого максимума.

Ваши следующие три требования расходятся друг с другом. Если вы допускаете несколько вспышек, некоторые по центру, а некоторые по левому краю, только для выравнивания требуется, чтобы каждая вспышка была в пределах своего собственного блочного элемента, чтобы вы могли применить стиль выравнивания.

Это не очевидно, но вы ничего не можете сказать о типах вспышек notice, warning или error. Если вы хотите провести различие между теми, которые должны быть отцентрированы (короткие ошибки), и теми, которые должны быть выровнены по левому краю (вступление новичка), поместите их во флэш-память разными клавишами. Выполните итерацию по своей флэш-памяти, применяя необходимое имя класса, чтобы получить желаемый стиль для каждого ключа. Если вы должны поддерживать более одного сообщения об ошибке, flash[:error] может быть массивом. Я бы написал вспомогательные методы для облегчения добавления сообщений во флэш-память, чтобы у вас было меньше условного кода в представлениях.

...