Как да направя HTML връзката активирана чрез щракване върху ‹li›?

Имам следната маркировка,

<ul id="menu">              
    <li><a href="/bg#">Something1</a></li>
    <li><a href="/bg#">Something2</a></li>
    <li><a href="/bg#">Something3</a></li>
    <li><a href="/bg#">Something4</a></li>
</ul>

<li> е малко голям, с малко изображение отляво, трябва всъщност да щракна върху <a>, за да активирам връзката. Как мога да накарам щракване върху <li> да активирам връзката?

Редактиране1:

ul#menu li
{
    display:block;
    list-style: none;
    background: #e8eef4 url(images/arrow.png) 2% 50% no-repeat;
    border: 1px solid #b2b2b2;
    padding: 0;
    margin-top: 5px;
}

ul#menu li a
{

    font-weight: bold;
    text-decoration: none;
    line-height: 2.8em;
    padding-right:.5em;
    color: #696969;
}

person San    schedule 13.07.2009    source източник


Отговори (14)


Използвам данни в тази таблица, но отстранявах грешки откъде идва бавността. Без заявка за присъединяване 1 сек. Присъединете се след добавяне на idx индекс на music.url за 7 секунди, а добавянето на music.plays го издигна до 10
person MiffTheFox    schedule 13.07.2009
comment
Ето как бих го направил. Той разширява връзката до размера на етикета ‹li›. - person Austin Hyde; 14.07.2009
comment
Работи, но текстът (връзката) се придържа към дясната граница, когато дадох padding-right: .5em ‹a› излиза от ‹li› - person San; 14.07.2009
comment
Продължавайте да променяте и ще изглежда перфектно. Проверете за отрицателни полета и подложки, нещо вероятно не се събира и се свива. Също така се уверете, че нямате грешен text-align: right; заседнал там. - person Curtis Tasker; 14.07.2009
comment
Дадох на текста (връзката) надясно, като всъщност дадох на ‹li› padding-right:0.5em и накарах ‹li› и ‹a› да имат един и същ фонов цвят. Но сега тази .5em дясна част от ‹li › не може да се кликне, но това е добре. - person San; 14.07.2009
comment
Сан: Поправи този проблем чрез интелигентно поставяне на подложката върху самата връзка: li { padding-top: .3em; padding-bottom: .3em; a { дисплей: блок; поле: 0px; padding-left: 10%; ширина: 90%; височина: 100%; }} - person Ari Gesher; 28.08.2012

Както каза Marineio, можете да използвате атрибута onclick на <li>, за да промените location.href чрез javascript:

<li onclick="location.href='http://example';"> ... </li>

Като алтернатива можете да премахнете всякакви полета или подложки в <li> и да добавите голяма подложка към лявата страна на <a>, за да избегнете преминаването на текст над водещия символ.

person Eric    schedule 13.07.2009
comment
можеш ли да разшириш това? Защо е лоша идея - person NuclearPeon; 24.06.2015

Само за да пусна тази опция там:

<ul id="menu">
    <a href="/bg#"><li>Something1</li></a>
    <a href="/bg#"><li>Something2</li></a>
    <a href="/bg#"><li>Something3</li></a>
    <a href="/bg#"><li>Something4</li></a>
</ul>

Това е стилът, който използвам в моите менюта, той прави самия елемент от списъка хипервръзка (подобно на това как човек би направил връзка към изображение).
За стилизиране обикновено прилагам нещо подобно:

nav ul a {
    color: inherit;
    text-decoration: none;
}

След това мога да приложа всякакъв стил върху „li›, който желая.

Забележка: Валидаторите ще се оплачат от този метод, но ако сте като мен и не основавате живота си около тях, това трябва да работи добре.

person Duncan    schedule 05.07.2013
comment
Всички деца (директни потомци) на ul елемент трябва да са li елементи. Това е чисто синтактично изискване. според правилна семантика за ul в ul - този отговор ще доведе до невалиден HTML - person EGC; 04.02.2020
comment
Появи се див валидатор. :) - person Duncan; 17.07.2020

Просто добавете обвиване на текста на връзката в таг 'p' или нещо подобно и добавете поле и подложка към този елемент, по този начин това няма да повлияе на настройките, които MiffTheFox ви е дал, т.е.

<li> <a href="/bg#"> <p>Link Text </p> </a> </li>
person Adam    schedule 20.02.2012
comment
Този всъщност беше най-добрият за мен. Използвах <span> и настроих дисплея да блокира. Span просто изглеждаше по-правилен от параграф. Така или иначе се получи добре. - person Storm Muller; 04.03.2018

Това ще направи целия <li> обект като връзка:

<li onclick="location.href='/bgpage.html';"  style="cursor:pointer;">...</li>
person DejanR    schedule 06.11.2011

Следното изглежда работи:

ul#menu li a {
    color:#696969;
    display:block;
    font-weight:bold;
    line-height:2.8;
    text-decoration:none;
    width:100%;
}
person Sinan Ünür    schedule 13.07.2009

jqyery това е друга версия с jquery, малко по-малко по-кратка. ако приемем, че елементът <a> е вътре в елемента <li>

$(li).click(function(){
    $(this).children().click();
});
person Mijail    schedule 16.01.2014
comment
Това ще задейства непрекъснат цикъл. Тъй като щракването върху детето-›щраква и върху родителя. - person Rocky Kev; 26.06.2020

Или можете да създадете празна връзка в края на вашия <li>:

<a href="/bglink"></a>

.menu li{position:relative;padding:0;}
.link{
     bottom: 0;
     left: 0;
     position: absolute;
     right: 0;
     top: 0;
}

Това ще създаде пълен <li> с възможност за кликване и ще запази форматирането ви върху истинската ви връзка. Може да бъде полезно и за <div> таг

person MrFlo    schedule 30.08.2014

Anchor href връзката се прилага към li:

#menu li a {
       display:block;
    }
person Khandoker Hirok    schedule 02.04.2019

Можете да опитате събитие "onclick" вътре в тага LI и да промените "location.href", както в javascript.

Можете също така да опитате да поставите таговете li в таговете a, но това вероятно не е валиден HTML.

person Marineio    schedule 13.07.2009
comment
Според моя опит фалшивите връзки чрез Javascript почти винаги водят до лошо потребителско изживяване. - person Chuck; 14.07.2009
comment
Това е просто една възможност, която той може да обмисли, в крайна сметка това е неговият уебсайт. И той можеше да запази нормалната връзка ‹a› там и тя щеше да функционира нормално, дори ако Javascript беше изключен (само не ако се щракне върху li). - person Marineio; 14.07.2009

a {
  display: block;
  position: relative;
}

Мисля, че това е всичко, от което се нуждаеш.

person Abaas Skills    schedule 13.08.2020

Как да направя HTML връзката активирана чрез щракване върху ‹li› ?

Като направите връзката си толкова голяма, колкото вашия li: просто преместете инструкцията

display: block;

от li до a и сте готови.

Това е:

#menu li
{
    /* no more display:block; on list item */

    list-style: none;
    background: #e8eef4 url(arrow.gif) 2% 50% no-repeat;
    border: 1px solid #b2b2b2;
    padding: 0;
    margin-top: 5px;
}

#menu li a
{
    display:block; /* moved to link */
    font-weight: bold;
    text-decoration: none;
    line-height: 2.8em;
    padding-right:.5em;
    color: #696969;
}

Странична бележка: можете да премахнете "ul" от вашите два селектора: #menu е достатъчна индикация, освен ако трябва да придадете тежест на тези две правила, за да замените други инструкции.

person FelipeAls    schedule 13.07.2009
comment
Това не работи за мен. Когато променя показването на връзката ‹a› да блокира, тя се поставя на различен ред от точката. - person cartbeforehorse; 07.09.2012
comment
Нека прецизирам този отговор... Поведението, което обяснявам по-горе, се среща във Firefox и Opera, но не и в Chrome. Работи добре в Chrome. - person cartbeforehorse; 07.09.2012
comment
Ами ако запазите display: block както на li, така и на a? В противен случай, моля, публикувайте проблема си в отделен въпрос. - person FelipeAls; 07.09.2012

Намерих лесно решение: направете тагът „li“ да бъде вътре в тага „a“:

<a href="/bg#"><li>Something1</li></a>
person rafaelsimoes85    schedule 27.12.2018
comment
Това не е валидно. Единственият елемент, който може да бъде дъщерен на <ul>, е <li> . <a> трябва да е вътре в <li> . w3c.github.io/html-reference/ul.html - person Daniel Sixl; 28.12.2018
comment
Не е задължително да има връзка между валидност и функционалност. - person Daniel Sixl; 29.01.2019

Използвайте jQuery, за да не се налага да пишете вграден javascript на <li> елемент:

$(document).ready(function(){
    $("li > a").each(function(index, value) {
        var link = $(this).attr("href");
        $(this).parent().bind("click", function() {
            location.href = link;
        });
    });
}); 
person Ignacio Pascual    schedule 30.05.2013