Очень легко с Flexbox:
div {
position: relative;
width: 200px;
height : 40px;
display: flex;
justify-content: center;
align-items: center;
border : green solid 2px;
}
div:before{
content: "";
background: lightblue;
position: absolute;
top: 0;
left: 0;
width : 60%;
height: 100%;
}
span{
z-index : 1;
}
<div>
<span>Centered text!</span>
</div>
Я взял AnthonyWJones исходный код и исправил его так, чтобы он работал независимо от того, что сценарий:
static class WebControlsExtensions
{
public static void AddCssClass(this WebControl control, string cssClass)
{
List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
classes.Add(cssClass);
control.CssClass = classes.ToDelimitedString(" ");
}
public static void RemoveCssClass(this WebControl control, string cssClass)
{
List<string> classes = control.CssClass.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries).ToList();
classes.Remove(cssClass);
control.CssClass = classes.ToDelimitedString(" ");
}
}
static class StringExtensions
{
public static string ToDelimitedString(this IEnumerable<string> list, string delimiter)
{
StringBuilder sb = new StringBuilder();
foreach (string item in list)
{
if (sb.Length > 0)
sb.Append(delimiter);
sb.Append(item);
}
return sb.ToString();
}
}
В C# 3 можно добавить некоторые дополнительные методы.
static class WebControlsExtensions
{
public static void AddCssClass (this WebControl control, string cssClass)
{
control.CssClass += " " + cssClass;
}
public static void RemoveCssClass (this WebControl control, string cssClass)
{
control.CssClass = control.CssClass.replace(" " + cssClass, "");
}
}
Использование:-
ctl.AddCssClass("ReadOnly");
ctl.RemoveCssClass("ReadOnly");
Обратите внимание, что RemoveCssClass разработан для удаления только тех классов, добавленных AddCssClass, и имеет ограничение, что, где 2 дополнительных имен классов добавляется, самое короткое имя не должно соответствовать точно запуску самого длинного имени. Например, Если Вы добавили "тест" и "test2", Вы не можете удалить тест, не повреждая CssClass. Это могло быть улучшено с RegEx, я ожидаю, что вышеупомянутое будет достаточно для Ваших потребностей.
Отметьте, нет ли у Вас C#3, затем удаляют this
ключевое слово от первого параметра и использования статические методы стандартным способом.
This version checks to make sure the given class isn't already added before adding it.
public static void CssAddClass(this WebControl control, string className)
{
var classNames = control.CssClass.Split
(new[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
if (classNames.Contains(className))
{
return;
}
control.CssClass = string.Concat
(classNames.Select(name => name + " ").ToArray()) + className;
}
public static void CssRemoveClass(this WebControl control, string className)
{
var classNames = from name in control.CssClass.
Split(new[] {' '}, StringSplitOptions.RemoveEmptyEntries)
where name != className
select name + " ";
control.CssClass = string.Concat(classNames.ToArray()).TrimEnd();
}
Можно ли сделать собственные классы? Произойдите из Кнопки ASP.NET и добавьте собственность для Только для чтения. Где-нибудь..., вероятно, в OnPreRender, можно проверить новое свойство и установить (или не установить), свойство CSSClass соответственно.