Измените значение ‘src’ с помощью css для входного тега с типом =»изображение»

#html #css #markup

#HTML #css — файл #разметка #css

Вопрос:

Можно ли изменить значение атрибута src <input type='image' alt="Text will be shown if pics are disabled" src='somepic.png'../> с помощью css?

Проблема в том, что я хочу указать, какой рисунок будет отображаться в качестве кнопки отправки, просто используя css (таким образом, команда разработчиков изменит только файлы css!). Если я использую альтернативный способ, подобный <input type="submit" class="cssclass" value=" " alt="Text will be shown if pics are disabled"/> , и укажу фон этого элемента в css — это не будет хорошо работать, если изображения отключены. — Вместо рисунка не отображается какой-либо альтернативный текст. Однако первый способ решает эту ситуацию…

Пожалуйста, посоветуйте что-нибудь

Спасибо.

Комментарии:

1.Я действительно, действительно ОЧЕНЬ надеюсь, что это невозможно с помощью CSS/

2. @Zirak что ж, завтра я попробую эту возможность… чтобы поместить прозрачный ‘1 *1.gif ‘ в атрибут src, а также сделайте фоновое реальное изображение с помощью css. Я ДЕЙСТВИТЕЛЬНО ОЧЕНЬ надеюсь, что это должно сработать — в противном случае мне придется использовать решение JS

Ответ №1:

Вот оно:http://jsfiddle.net/kizu/66JXn /

Некоторые заметки об этом решении:

  1. Используйте <button></button> , потому что он может включать другие блоки.

  2. Вам понадобится немного дополнительного кода, чтобы все это работало в Fx и IE:

    • Для Fx вам нужна дополнительная оболочка внутри (есть ошибка позиционирования) и сброс некоторых дополнительных moz-свойств.
    • Для IE вы должны уменьшить исходную кнопку, потому что есть некоторые дополнительные отступы, которые трудно удалить.
  3. Вы помещаете текст и другой элемент внутрь, который будет накладываться на текст. Таким образом, когда изображения отсутствовали бы, текст был бы доступен.

Вот и все 🙂

Ответ №2:

Нет, и это плохая практика. CSS предназначен только для статического содержимого.

Что вы должны сделать, это определить файл шаблона с переменными в нем, такими как:

template.js

 my_backgroundImage = "url('somepic.png')";
  

затем ваш файл загрузится

 x = document.createElement('image');
x.src = my_backgroundImage
  

Комментарии:

1. наш css, конечно, статичен, но команда разработчиков имеет к нему доступ в svn. И у них нет доступа ни к каким js-файлам, так что ваше решение выглядит не очень подходящим…

2. @javagirl Ваши ограничения доступа к файлам на самом деле являются неподходящей частью этого разговора. Команда разработчиков не должна иметь доступа к js без css или css без js. Это скорее дополнительные языки, чем явные. Иногда я задаюсь вопросом, как компании выживают со всеми антипродуктивными методами, которые они используют по соображениям «безопасности».

Ответ №3:

Селекторы атрибутов могут работать, но они не очень гибкие. Попробуйте этот:

 img[src=""] {
  background-image: url('none.png');
  height: 100px; /* Height of BG image */
  width: 100px; /* Width of BG image */
}
  

Это не изменяет src= атрибут изображения, но выполняет ту же функцию.


Вот моя идея.

Вы можете использовать JavaScript для чтения таблиц стилей <img> тегов и изменять их соответствующим образом.

Я говорю о белом списке классов, как big, small, center и все другие классы, применяемые к изображениям, интерпретируются с помощью JavaScript. Команда разработчиков могла бы использовать CSS, но он не будет отображаться в ожидаемом виде, например, так (Python JavaScript):

 for every <img> tag:
  if tag.classes contains class not in whitelist:
    for every class not in whitelist:
      this.src = newClass.backgroundImage;
      this.removeClass(newClass)
  

Он считывает CSS для background-image свойства, но он просто крадет URL изображения и устанавливает src= атрибут, используя этот URL. Затем JavaScript удалит этот класс, в результате чего он не будет отображаться.

Комментарии:

1. не понял, как это может помочь в моей ситуации : ( У меня уже есть отличный selector — class=»cssclass»… Таким образом, смысл не в том, чтобы использовать background-image, потому что в этом случае, если изображения отключены, браузер также не отображает текст alt (в случае ввода type =submit). Текст Alt отображается, только если атрибут src заполнен и его тип ввода = изображение.

2. Не могли бы вы сформулировать свой вопрос немного более четко? Я этого не понимаю.

3. 1. Если я использую <тип ввода =’изображение’ alt = «Текст будет отображаться, если изображения отключены» src =’somepic.png’.. class=»cssclass»/>. Хорошо: текст alt отображается, если изображения отключены. Плохо: команда разработчиков не может указать другой pic для этого cssclass, потому что он уже указан атрибутом src. 2. Если я использую <тип ввода=»отправить» класс=»cssclass» значение =» » alt =»Текст будет показан, если изображения отключены»/> и .cssclass {background-image: url (‘somepic.png’);}. Хорошо: дизайнеры могут изменить этот рисунок на любой, какой захотят, в css. Плохо: текст alt не отображается на странице, если изображения отключены. Надеюсь, теперь это понятно 🙂

4. Понял. Вы не можете изменить это с помощью CSS, но вы можете сделать это с помощью JavaScript.

Ответ №4:

(Это проблема, для которой JS является решением, но игнорирует это:)

Одним из вариантов является перенос кнопки и дополнительного элемента div (назовем его div.overlay ) в родительский контейнер.

Установите для контейнера значение to position:relative .

Установите кнопку так, чтобы она отображала только текст, как обычно. Установите div.overlay на position:absolute , width и height на 100% , и left и top на 0 , и на z-index выше кнопки. Установите изображение, которое вы хотите отобразить в качестве background-image of div.overlay .

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

При отключенных изображениях или CSS пользователь видит только кнопку отправки открытого текста.

Возможно, вам придется прибегнуть к некоторым хитростям, чтобы заставить нажать div.overlay для отправки формы, возможно, просто сделайте div.overlay дублирующую кнопку отправки. Кроме того, кто знает, что Googlebot делает с такими методами наложения, как эти.

Ответ №5:

Это некрасиво, но единственное чистое CSS-решение, которое сразу приходит на ум, — это своего рода замена изображения с относительно плохой поддержкой. Это использование :after. Это своего рода плохая практика из-за неправильного использования :after , и поддержка довольно сомнительная, и я думаю, что для элемента ввода было бы сложнее, основываясь на последнем разе, когда я пытался использовать :after для ввода…

 .cssclass,
.cssclass:after{
display:block;
    width:100px;
    height:100px;
}
.cssclass{ position:relative; }
.cssclass:after{
    position:absolute;
    top:0;left:0;
    content:url("button.jpg");
}
  

Смотрите http://www.rachaelmoore.name/best-practices/css-image-replacement-ii / для получения дополнительной информации.

Или установите src по умолчанию на прокладку и всегда используйте CSS для установки нужной кнопки в качестве фонового изображения. О чем, я только что заметил, вы уже подумали. Я полагаю, что это должно сработать просто отлично.

Комментарии:

1. img, input, select, textarea — ни в одном из них достоверно нет псевдоэлементов (которые в основном являются спецификациями)

Ответ №6:

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

Если я правильно понимаю проблему, вы просто хотите иметь кнопку формы с фоновым изображением, и если фоновое изображение не загружается, вы хотите, чтобы какой-то альтернативный текст отображался пользователю с заголовком кнопки? Если это не так, прекратите чтение и «стрелка вниз» мне.

В приложениях, которые я создал, я всегда просто оформлял ввод фоновым изображением, но оставлял вставку текста за элементом управления HTML… Это хорошо по трем причинам… кнопки могут быть стилизованы, разработчики могут изменять значение текста на кнопке, не беспокоя меня созданием нового изображения, и если фоновое изображение не загружается, кнопка все еще читаема.

Итак, мой html был таким:

 <input type="submit" id="btnSearch" class="searchButton" value="Search"> 
  

тогда мой класс может читать что-то вроде:

 .searchButton {
 backgorund-image: url('searchButtonImage.png');
 font-family: sans serif;
 font-size: 10px;
 color: #808080;
 padding-left: 50px 0px 0px 0px; // Assuming a magnifying glass icon or whatevs is on the left and is 20-ish pixels
 width: 100px; // you can put this as in-line style if you make a more generic class
}
  

Если вы хотите сделать BG более универсальным, переместите ширину кнопки, чтобы сделать ее встроенной в кнопку, чтобы разработчики могли изменить ширину с помощью текстового значения и сделать ваше общее bg-изображение шириной 200 пикселей.

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

(Отказ от ответственности: Пожалуйста, простите меня, если вы скопируете и вставите это, и это не сработает. Я просто написал это от руки, не тестируя.)

Ответ №7:

Вы можете сделать это с помощью javascript?

У меня на странице есть изображение, при нажатии на которое будет отображаться другая кнопка, а также изменится атрибут src первой.

Вот что я использую:

 <script type="text/javascript">
 function apps()
 {
 var element = document.getElementById("app_frame");
 if (element.width != "0%")
 {
    parent.document.getElementById("frame").setAttribute("width","100%");
    parent.document.getElementById("app_frame").setAttribute("width","0%");
    parent.document.getElementById("appbutton").setAttribute("src","site/main/images/apps/show.gif");
    parent.document.getElementById("wthrbutton").style.visibility="hidden";
 }
 else
 {
    parent.document.getElementById("frame").setAttribute("width","65%");
    parent.document.getElementById("app_frame").setAttribute("width","35%");
    parent.document.getElementById("appbutton").setAttribute("src","site/main/images/apps/hide.gif");
    parent.document.getElementById("wthrbutton").style.visibility="visible";
 }
 }
 </script>
  

Что это говорит: установите «app_frame» в качестве переменной «element»,
затем проверьте ширину переменной «element».
если его ширина не равна 0, то он получает элемент «frame»,
с помощью getElementById, а затем установите для атрибута «width» значение 100%

вы можете видеть чуть ниже, что вы используете тот же метод, но используете атрибут SRC, а не width, и устанавливаете для него любое значение, которое вы хотите, в моем случае, site/main/images/apps/show.gif

надеюсь, это поможет